use super::{Key, Value, Ordering, ARRAY_SIZE};
#[derive(Debug, Clone, Default)]
pub struct Node<K, V> {
pub items: [Option<Box<Item<K, V>>>; ARRAY_SIZE],
pub children: [Option<Box<Node<K, V>>>; 2],
pub children_size: [usize; 2],
pub child_difference: u8,
pub height: u8,
}
impl<K: Key, V: Value> Node<K, V> {
pub fn new() -> Box<Node<K, V>> {
Box::default()
}
pub fn is_full(&self) -> bool {
for item in &self.items {
match item {
None => return false,
Some(_) => {}
}
}
true
}
}
#[derive(Debug, Clone)]
pub struct Item<K, V> {
pub key: Box<K>,
pub value: Option<Box<V>>,
}
impl<K: Key, V: Value> Item<K, V> {
pub fn new(key: K, value: Option<V>) -> Item<K, V> {
Item {
key: Box::new(key),
value: value.map(|value| Box::new(value)),
}
}
pub fn compare(&self, item: &Item<K, V>) -> Ordering {
self.key.compare_keys(item.key.as_ref())
}
pub fn get_key(&self) -> Option<&K> {
Some(self.key.as_ref())
}
}