use crate::types::LogPointer;
use crossbeam_skiplist::SkipMap;
use std::ops::Bound;
pub struct TimestampIndex {
inner: SkipMap<(i64, u64), LogPointer>,
}
impl Default for TimestampIndex {
fn default() -> Self {
Self::new()
}
}
impl TimestampIndex {
pub fn new() -> Self {
Self {
inner: SkipMap::new(),
}
}
pub fn insert(&self, timestamp: i64, seq_id: u64, pointer: LogPointer) {
self.inner.insert((timestamp, seq_id), pointer);
}
pub fn remove(&self, timestamp: i64, seq_id: u64) {
self.inner.remove(&(timestamp, seq_id));
}
pub fn range(&self, start_ms: i64, end_ms: i64) -> Vec<LogPointer> {
self.inner
.range((
Bound::Included(&(start_ms, u64::MIN)),
Bound::Included(&(end_ms, u64::MAX)),
))
.map(|e| *e.value())
.collect()
}
pub fn len(&self) -> usize {
self.inner.len()
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
}