algx 0.2.0

Implementation of Knuth's Algorithm X
Documentation

#[derive(Copy, Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
pub(crate) struct NodeId(usize);

impl Default for NodeId {
    fn default() -> Self {
        Self::invalid()
    }
}

impl NodeId {
    pub fn new(value: usize) -> Self {
        Self(value)
    }

    pub const fn invalid() -> Self {
        Self(usize::MAX)
    }

    pub fn is_valid(&self) -> bool {
        *self != Self::invalid()
    }

    pub fn value(&self) -> usize {
        assert!(self.is_valid());

        self.0
    }
}

#[derive(Default, Copy, Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
pub(crate) struct Node {
    pub(crate) left: NodeId,
    pub(crate) right: NodeId,
    pub(crate) up: NodeId,
    pub(crate) down: NodeId,
    pub(crate) header: NodeId,
    pub(crate) row: isize,
    pub(crate) col: usize,
}