use crate::IsLessThan;
use std::collections::LinkedList as StdLinkedList;
use std::fmt::Debug;
mod get_set;
mod insert;
mod iterator;
mod linkedlist_impl;
mod remove;
mod trait_impl;
#[cfg(any(test, debug_assertions))]
mod validation;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Index(usize);
#[derive(Debug)]
struct ListNode<K, V>
where
K: Debug + Clone + IsLessThan,
V: Debug + Clone,
{
kv: Option<(K, V)>,
forward: usize,
prev: usize,
}
const HEAD_INDEX: usize = usize::MAX - 1;
const TAIL_INDEX: usize = usize::MAX;
#[derive(Debug)]
pub struct LinkedList<K, V>
where
K: Debug + Clone + IsLessThan,
V: Debug + Clone,
{
head: usize,
tail: usize,
nodes: Vec<ListNode<K, V>>,
free_index_pool: StdLinkedList<usize>,
#[cfg(feature = "linkedlist_midpoint")]
mid_point: Option<usize>,
#[cfg(feature = "linkedlist_midpoint")]
mid_point_delta: i32,
}
#[cfg(test)]
mod tests {
pub(super) mod common;
#[cfg(feature = "linkedlist_midpoint")]
mod middle_test;
mod reinsert_test;
mod test;
}