use crate::{Dyn, TreeVariant};
use alloc::vec::Vec;
use orx_selfref_col::NodePtr;
pub type State<V> = (NodePtr<V>, usize);
pub fn set<V: TreeVariant>(states: &mut Vec<State<V>>, depth: usize, pointer: NodePtr<V>) {
match states.get_mut(depth) {
Some(x) => *x = (pointer, 0),
None => {
debug_assert!(states.len() == depth);
states.push((pointer, 0));
}
}
}
pub fn increment_child_idx<V: TreeVariant>(states: &mut [State<V>], depth: usize) {
states[depth].1 += 1;
}
#[derive(Default)]
pub struct States {
states: Vec<State<Dyn<i32>>>,
}
impl States {
pub(crate) fn for_variant<V>(&mut self) -> &mut Vec<State<V>>
where
V: TreeVariant,
{
unsafe { core::mem::transmute(&mut self.states) }
}
}