simple-counter
Provides a single macro for generating thread-local global counters by
creating a new module with a thread-local static Cell
. Currently intended
to be used with integer types. Useful for basic ID generation.
Usage
Add the following dependency to your Cargo.toml file:
[dependencies]
simple-counter = "0.1.0"
And make sure to use the #[macro_use]
annotation when importing:
#[macro_use]
extern crate simple_counter;
generate_counter!(Counter, usize);
fn main() {
assert_eq!(Counter::next(), 0);
assert_eq!(Counter::next(), 1);
assert_eq!(Counter::next(), 2);
Counter::set(1000);
assert_eq!(Counter::next(), 1000);
assert_eq!(Counter::next(), 1001);
assert_eq!(Counter::next(), 1002);
Counter::reset();
assert_eq!(Counter::next(), 0);
}
Example
Here's a simple unique temp generator for a compiler:
#[macro_use]
extern crate simple_counter;
generate_counter!(TempID, usize);
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Temp {
id: usize,
name: String,
}
impl Temp {
pub fn from_str(name: &'static str) -> Self {
Temp {
id: TempID::next(),
name: name.to_string(),
}
}
}