2 unstable releases
0.2.0 | Aug 2, 2023 |
---|---|
0.1.0 | Aug 2, 2023 |
#2300 in Data structures
17KB
334 lines
Timed Queue
A queue that drops its content after a given amount of time.
Example
To implement an FPS counter, you could use the following technique:
use std::thread;
use std::time::Duration;
use ttl_queue::TtlQueue;
fn main() {
let mut fps_counter = TtlQueue::new(Duration::from_secs_f64(1.0));
for i in 0..100 {
// Register a new frame and return the number of frames observed
// within the last second.
let fps = fps_counter.refresh_and_push_back(());
debug_assert!(fps >= 1);
// Sleep 10 ms to achieve a ~100 Hz frequency.
thread::sleep(Duration::from_millis(10));
}
let fps = fps_counter.refresh();
debug_assert!(fps >= 95 && fps <= 105);
}
lib.rs
:
Timed Queue
A queue that drops its content after a given amount of time.
Crate Features
vecdeque
- Uses aVecDeque
as the underlying data structure. Enabled by default.doublestack
- Uses two stacks (Vec
) as the underlying data structure. Mutually exclusive withvecdeque
.tokio
- Usestokio::time::Instant
instead ofstd::time::Instant
.
Example
To implement an FPS counter, you could use the following technique:
let mut fps_counter = TtlQueue::new(Duration::from_secs_f64(1.0));
for i in 0..=50 {
// Register a new frame and return the number of frames observed
// within the last second.
let fps = fps_counter.refresh_and_push_back(());
debug_assert!(fps >= 1);
// Sleep ~20 ms to achieve a ~50 Hz frequency.
thread::sleep(Duration::from_millis(19));
}
let fps = fps_counter.refresh();
debug_assert!(fps >= 45 && fps <= 55);
let delta = fps_counter.avg_delta();
debug_assert!(delta >= Duration::from_millis(19) && delta <= Duration::from_millis(21));
Dependencies
~0–5.5MB
~19K SLoC