6 releases (3 breaking)
0.4.1 | Mar 9, 2021 |
---|---|
0.3.1 | Mar 9, 2021 |
0.2.1 | Oct 1, 2019 |
0.2.0 | Jul 12, 2018 |
0.1.1 | May 14, 2018 |
#834 in Database interfaces
2,112 downloads per month
Used in 5 crates
(2 directly)
20KB
410 lines
raii-counter
Rust type for a RAII Counter (counts number of held instances,
decrements count on Drop
), implemented with Arc<AtomicUsize>
.
Useful for tracking the number of holders exist for a handle, tracking the number of transactions that are in-flight, etc.
Additional Features
- Counters can have a size, eg. a Counter with
size
4 adds 4 to the count, and removes 4 when dropped.
Demo
extern crate raii_counter;
use raii_counter::Counter;
let counter = Counter::new();
assert_eq!(counter.count(), 1);
let weak = counter.downgrade();
assert_eq!(weak.count(), 0);
{
let _counter1 = weak.spawn_upgrade();
assert_eq!(weak.count(), 1);
let _counter2 = weak.spawn_upgrade();
assert_eq!(weak.count(), 2);
}
assert_eq!(weak.count(), 0);
License: MIT
lib.rs
:
Rust type for a RAII Counter (counts number of held instances,
decrements count on Drop
), implemented with Arc<AtomicUsize>
.
Useful for tracking the number of holders exist for a handle, tracking the number of transactions that are in-flight, etc.
Additional Features
Counter
s can have a size, eg. aCounter
withsize
4 adds 4 to the count, and removes 4 when dropped.NotifyHandle
s can be used for efficient conditional checking, eg. if you want to wait until there are no in-flight transactions, see:CounterBuilder::create_notify
/WeakCounterBuilder::create_notify
andNotifyHandle::wait_until_condition
.
Demo
extern crate raii_counter;
use raii_counter::Counter;
let counter = Counter::builder().build();
assert_eq!(counter.count(), 1);
let weak = counter.downgrade();
assert_eq!(weak.count(), 0);
{
let _counter1 = weak.spawn_upgrade();
assert_eq!(weak.count(), 1);
let _counter2 = weak.spawn_upgrade();
assert_eq!(weak.count(), 2);
}
assert_eq!(weak.count(), 0);
Dependencies
~230–680KB
~16K SLoC