Skip to main content

earley_omnitool/forest/
node_handle.rs

1use cfg::Symbol;
2
3#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
4pub struct NodeHandle(pub(crate) u32);
5
6pub(super) const NULL_HANDLE: NodeHandle = NodeHandle(0xFFFF_FFFF);
7
8impl NodeHandle {
9    #[inline]
10    pub(super) fn nulling(symbol: Symbol) -> Self {
11        NodeHandle(symbol.usize() as u32)
12    }
13
14    #[inline]
15    pub(super) fn usize(self) -> usize {
16        self.0 as usize
17    }
18
19    #[inline]
20    pub(super) fn to_option(self) -> Option<NodeHandle> {
21        if self == NULL_HANDLE {
22            None
23        } else {
24            Some(self)
25        }
26    }
27}