use super::*;
mod navigator;
mod node;
mod value;
pub struct Navigator<'a, 'k> {
inner: Vec<NodeInner<'a, 'k>>,
}
#[derive(Copy, Clone)]
pub struct Node<'a, 'k, 'nav, 'node> {
nav: &'nav Navigator<'a, 'k>,
node: &'node NodeInner<'a, 'k>,
}
struct NodeInner<'a, 'k> {
kserd: &'a Kserd<'k>,
idx: usize,
parent: Option<usize>,
value_idx_in_parent: Option<usize>,
key_idx_in_parent: Option<usize>,
value_children: Vec<usize>,
key_children: Vec<usize>,
}
pub enum NodeValue<'a, 'k, 'nav, 'node> {
Primitive,
Tuple(SeqIter<'a, 'k, 'nav, 'node>),
Cntr(NamedIter<'a, 'k, 'nav, 'node>),
Seq(SeqIter<'a, 'k, 'nav, 'node>),
Map(KeyedIter<'a, 'k, 'nav, 'node>),
}
pub struct NodeIter<'a, 'k, 'nav> {
iter: std::slice::Iter<'nav, NodeInner<'a, 'k>>,
nav: &'nav Navigator<'a, 'k>,
}
pub struct SeqIter<'a, 'k, 'nav, 'node> {
seq: std::slice::Iter<'node, usize>,
nav: &'nav Navigator<'a, 'k>,
}
pub struct NamedIter<'a, 'k, 'nav, 'node> {
names: std::collections::btree_map::Keys<'node, Kstr<'k>, Kserd<'k>>,
values: std::slice::Iter<'node, usize>,
nav: &'nav Navigator<'a, 'k>,
}
pub struct KeyedIter<'a, 'k, 'nav, 'node> {
keys: std::slice::Iter<'node, usize>,
values: std::slice::Iter<'node, usize>,
nav: &'nav Navigator<'a, 'k>,
}