Limited Queue
A circular queue that overrides the oldest data if trying to push a data when the queue is full.
All operations are of O(1) complexity, except the constructor with O(Vec::with_capacity).
Comparison
There is a similar library circular-queue I found, but without the basic peek and pop operations.
The comparison for now is listed below:
LimitedQueue |
circular-queue |
|
|---|---|---|
| Algorithm | circular queue (front-rear, without additional element slot) | circular queue (based on len and capacity provided by Vec) |
| Element trait bound needed | No | - |
push, size-related methods |
✅ | ✅ |
peek, pop support |
✅: peek✅: pop |
❌ |
| Indexing | ✅- [0, len)- support [idx]- support get(idx)- optionally mutable ([idx]) |
❌ |
| Iterator | ✅- iter() (DoubleEndedIterator)- iter_mut() (DoubleEndedIterator) |
✅- both ways- optionally mutable |
clear complexity |
O(1) |
O(Vec::clear) |
serde support |
❌ (TODO) | ✅ |
We welcome any kinds of contributions, please don't be hesitate to submit issues & PRs.
Changelog
Version 0.2.0 (2025-10-28)
This is a significant feature and stability release.
- BREAKING (but good) CHANGE:
pop()no longer requires theT: Defaulttrait bound. This was achieved by refactoring the internal storage toVec<Option<T>>and is verified by tests . - New Feature: Added
iter_mut(), providing a mutable, double-ended iterator. - Enhancement:
iter()now implementsDoubleEndedIterator, allowing for reverse iteration (e.g.,.iter().rev()). - Internal Refactor:
push()andwith_capacity()logic was rewritten to pre-allocate the internalVecwithNone, simplifying the implementation and removing potential panic paths. - Fix: Corrected a logic bug in
get(idx)that caused incorrectNonereturns. - Testing: Test suite was significantly expanded to cover all methods, edge cases (like capacity 0 and 1), and
panicconditions, achieving 100% test coverage.
Setup
Please run scripts/setup.sh to setup for committing. Currently, the script registers a git pre-commit hook.