<!-- cargo-sync-rdme title [[ -->
# width_counters
<!-- cargo-sync-rdme ]] -->
#### Usability:
<!-- cargo-sync-rdme badge:usability [[ -->

[](https://crates.io/crates/width_counters)
[](https://docs.rs/width_counters)
<!-- cargo-sync-rdme ]] -->
#### Development:
<!-- cargo-sync-rdme badge:development [[ -->
[](https://doc.rust-lang.org/cargo/reference/manifest.html#the-badges-section)
[](https://github.com/anwarhahjjeffersongeorge/width_counters/actions/workflows/ci.yml)
<!-- cargo-sync-rdme ]] -->
---
## Overview
<!-- cargo-sync-rdme rustdoc [[ -->
Atomic, thread-safe counters of differing integer widths
#### Comes with
These counters support
* Incrementing/decrementing by default (1) or specified amounts,
* Using per-operation [atomic orderings](https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html), ([see this also](https://en.cppreference.com/w/c/atomic/memory_order))
* Instantiation with default offset (0) and default atomic ordering ( sequentially consistent ),
* Instantiation with custom offset, custom ordering or both,
* Instantiation with custom enum-flag-based counting behaviors (monotonic, nonmonotonic, incrementing, decrementing, cyclic, acyclic)
* [PartialEq](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html), [Eq](https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html), [Hash](https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html), [PartialOrd](https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html), [Ord](https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html), [Clone](https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html), [Debug](https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html), [Display](https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html)
* [Send](https://doc.rust-lang.org/nightly/core/marker/trait.Send.html), [Sync](https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html)
#### Optional features
* `serde`: Enable de/serialization
<!-- cargo-sync-rdme ]] -->