pub struct QueueIndex<V: Clone + Send + Sync> { /* private fields */ }Expand description
A queue-optimized ordered index
This provides efficient priority queue operations by:
- Maintaining a BTreeMap for O(log N) min-key access
- Caching the minimum key for O(1) peek
- Tracking size for O(1) count
§Internal Structure
┌─────────────────────────────────────────────────────────────────────┐
│ QueueIndex │
├─────────────────────────────────────────────────────────────────────┤
│ entries: BTreeMap<CompositeKey, Value> ← O(log N) ordered ops │
│ min_key_cache: Option<CompositeKey> ← O(1) peek │
│ size: AtomicUsize ← O(1) count │
│ version: AtomicU64 ← For cache invalidation │
└─────────────────────────────────────────────────────────────────────┘Implementations§
Source§impl<V: Clone + Send + Sync> QueueIndex<V>
impl<V: Clone + Send + Sync> QueueIndex<V>
Sourcepub fn new(config: QueueIndexConfig) -> Self
pub fn new(config: QueueIndexConfig) -> Self
Create a new queue index
Sourcepub fn insert(&self, key: CompositeQueueKey, value: V)
pub fn insert(&self, key: CompositeQueueKey, value: V)
Insert a task into the queue
Complexity: O(log N)
Sourcepub fn peek_min(&self) -> Option<(CompositeQueueKey, V)>
pub fn peek_min(&self) -> Option<(CompositeQueueKey, V)>
Peek at the minimum key without removing it
Complexity: O(1) if cache hit, O(log N) if cache miss
Sourcepub fn pop_min(&self) -> Option<(CompositeQueueKey, V)>
pub fn pop_min(&self) -> Option<(CompositeQueueKey, V)>
Remove and return the minimum entry
Complexity: O(log N)
Sourcepub fn remove(&self, key: &CompositeQueueKey) -> Option<V>
pub fn remove(&self, key: &CompositeQueueKey) -> Option<V>
Remove a specific entry by key
Complexity: O(log N)
Sourcepub fn get(&self, key: &CompositeQueueKey) -> Option<V>
pub fn get(&self, key: &CompositeQueueKey) -> Option<V>
Get an entry by key
Complexity: O(log N)
Sourcepub fn contains(&self, key: &CompositeQueueKey) -> bool
pub fn contains(&self, key: &CompositeQueueKey) -> bool
Check if a key exists
Complexity: O(log N)
Sourcepub fn scan_by_priority(
&self,
max_priority: i64,
limit: usize,
) -> Vec<(CompositeQueueKey, V)>
pub fn scan_by_priority( &self, max_priority: i64, limit: usize, ) -> Vec<(CompositeQueueKey, V)>
Scan entries with priority <= threshold
Useful for batch processing of high-priority tasks.
Complexity: O(log N + K) where K is result count
Sourcepub fn scan_ready(&self, now: u64, limit: usize) -> Vec<(CompositeQueueKey, V)>
pub fn scan_ready(&self, now: u64, limit: usize) -> Vec<(CompositeQueueKey, V)>
Scan entries ready at or before the given timestamp
Complexity: O(N) in worst case, but typically O(K) if data is time-ordered
Sourcepub fn config(&self) -> &QueueIndexConfig
pub fn config(&self) -> &QueueIndexConfig
Get the configuration
Auto Trait Implementations§
impl<V> !Freeze for QueueIndex<V>
impl<V> !RefUnwindSafe for QueueIndex<V>
impl<V> Send for QueueIndex<V>
impl<V> Sync for QueueIndex<V>
impl<V> Unpin for QueueIndex<V>
impl<V> UnwindSafe for QueueIndex<V>where
V: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more