use fastnum::UD64;
use crate::types;
#[derive(Clone, derive_more::Debug, Default)]
pub struct BookLevel {
head: Option<types::OrderId>,
tail: Option<types::OrderId>,
#[debug("{cached_size}")]
cached_size: UD64,
cached_count: u32,
}
impl BookLevel {
pub fn new() -> Self { Self::default() }
pub fn size(&self) -> UD64 { self.cached_size }
pub fn num_orders(&self) -> u32 { self.cached_count }
pub fn is_empty(&self) -> bool { self.head.is_none() }
pub(crate) fn head(&self) -> Option<types::OrderId> { self.head }
pub(crate) fn tail(&self) -> Option<types::OrderId> { self.tail }
pub(crate) fn set_head(&mut self, head: Option<types::OrderId>) { self.head = head; }
pub(crate) fn set_tail(&mut self, tail: Option<types::OrderId>) { self.tail = tail; }
pub(crate) fn add_size(&mut self, size: UD64) {
self.cached_size += size;
self.cached_count += 1;
}
pub(crate) fn sub_size(&mut self, size: UD64) {
self.cached_size -= size;
self.cached_count -= 1;
}
pub(crate) fn update_size(&mut self, old_size: UD64, new_size: UD64) {
self.cached_size -= old_size;
self.cached_size += new_size;
}
}