polygon_unionfind 0.7.8

Disjoint-set data structure (union-find) for polygons.
Documentation
// SPDX-FileCopyrightText: 2026 polygon_unionfind contributors
//
// SPDX-License-Identifier: MIT OR Apache-2.0

#![doc = include_str!("../README.md")]

#[cfg(feature = "std")]
extern crate std;

// No feature for `alloc` because it would be always enabled anyway.
extern crate alloc;

mod bool_ops;
mod combinators;
mod inflate;
mod laminate;
mod polygon;
mod polygon_set;
mod polygon_unionfind;
mod unionfind;

pub use bool_ops::{Difference, Intersection, Union};
pub use combinators::{Inflated, Negated, Paralleled};
#[cfg(feature = "undoredo")]
pub use combinators::{RecordingInflated, RecordingNegated, RecordingParalleled};
pub use inflate::Inflate;
pub use laminate::Laminate;
#[cfg(feature = "undoredo")]
pub use laminate::{LaminateDelta, LaminateHalfDelta, RecordingLaminate};
pub use polygon::{Polygon, PolygonId, PolygonWithData, Rings};
pub use polygon_set::PolygonSet;
#[cfg(feature = "undoredo")]
pub use polygon_set::{PolygonSetDelta, PolygonSetHalfDelta, RecordingPolygonSet};
pub use polygon_unionfind::PolygonUnionFind;
#[cfg(feature = "undoredo")]
pub use polygon_unionfind::{
    PolygonUnionFindDelta, PolygonUnionFindHalfDelta, RecordingPolygonUnionFind,
};
pub use unionfind::UnionFind;

pub trait Add<P> {
    type Output;

    fn add(&mut self, polygon: P) -> Self::Output;
}

pub trait Sub<P> {
    type Output;

    fn sub(&mut self, polygon: P) -> Self::Output;
}

pub trait Clip<P> {
    type Output;

    fn clip(&mut self, polygon: P) -> Self::Output;
}