An open API service indexing awesome lists of open source software.

https://github.com/udoprog/uniset

A hierarchical growable bitset which supports in-place atomic operations
https://github.com/udoprog/uniset

bitset rust

Last synced: 4 months ago
JSON representation

A hierarchical growable bitset which supports in-place atomic operations

Awesome Lists containing this project

README

        

# uniset

[github](https://github.com/udoprog/uniset)
[crates.io](https://crates.io/crates/uniset)
[docs.rs](https://docs.rs/uniset)
[build status](https://github.com/udoprog/uniset/actions?query=branch%3Amain)

A hierarchical, growable bit set with support for in-place atomic
operations.

The idea is based on [hibitset], but dynamically growing instead of having a
fixed capacity. By being careful with the underlying data layout, we also
support structural sharing between the [local] and [atomic] bitsets.


## Features

* `vec-safety` - Avoid relying on the assumption that `&mut Vec` can be
safely coerced to `&mut Vec` if `T` and `U` have an identical memory
layouts (enabled by default, [issue #1]).


## Examples

```rust
use uniset::BitSet;

let mut set = BitSet::new();
assert!(set.is_empty());
assert_eq!(0, set.capacity());

set.set(127);
set.set(128);
assert!(!set.is_empty());

assert!(set.test(128));
assert_eq!(vec![127, 128], set.iter().collect::>());
assert!(!set.is_empty());

assert_eq!(vec![127, 128], set.drain().collect::>());
assert!(set.is_empty());
```

[issue #1]: https://github.com/udoprog/unicycle/issues/1
[hibitset]: https://docs.rs/hibitset
[local]: https://docs.rs/uniset/latest/uniset/struct.BitSet.html
[atomic]: https://docs.rs/uniset/latest/uniset/struct.AtomicBitSet.html