Expand description
Enter the Data Zoo
A collection of data structures interesting enough to put in free range pens.
Features
This is a collection of multimaps, jagged arrays, bit sets, and combination thereof.
Highlights:
- A storage-agnostic
Bitset
. - A storage-agnostic
JaggedArray
. - A
PackedIntArray
similar tobitpacking
,bitvec
and other bitpacking rust crates. - A bi-directional read-only multimap:
BimultiMap
enumset
-keyed data structures.
See rustdoc
documentation for details.
Cargo Features
enumset
: enables theenumset
dependency and theEnumBitMatrix
EnumMultimap
data structuressmallvec
: (off by default) Implementbitset::ExtendBlocks
onSmallVec
.
Unique features
JaggedArray
is generic over storage types, which means you can take advantage of your own specializedslice
impl such asSmallVec
, or a fixed sze array stored on the stack (typically useful if you have a fixed height matrix).Bitset
is also generic over storage type, with the same implications.
Limitations
- Data structures do not handle
Drop
types at all. - Data structures are untested with sizes
> u32::MAX
- Effort is made to panic in those situations though, but you never know
- Generally assumes
size_of(usize) >= size_of(u32)
- Definitively not as tested and benchmarked as other similar crates.
- No
#[no_std]
but I don’t see why this couldn’t be added as a feature - depends on
sorted-iter
, can’t disable dependency. Bitset
generally doesn’t distinguish between “disabled within bound” and “out of bound”.
History
This was first built for the cuicui_richtext
project, but became useful for
other things, so it got published separately.
License
You may use datazoo
under any of the following licenses:
- ZLib
- MIT
- Apache 2.0
Re-exports
pub use bimultimap::Bimultimap;
pub use bitmatrix::BitMatrix;
pub use bitset::Bitset;
pub use enum_bitmatrix::EnumBitMatrix;
pub use enum_multimap::EnumMultimap;
pub use index_multimap::IndexMultimap;
pub use jagged_array::JaggedArray;
pub use jagged_bitset::JaggedBitset;
pub use jagged_vec::JaggedVec;
pub use packed_int_array::PackedIntArray;
Modules
- A read-only bi-directional multimap.
- A bitset with fixed-size rows.
- A slice of
u32
accessed on the bit level. - A bitset similar to
BitMatrix
, indexed byEnumSetType
. - A multimap optimized for
EnumSetType
keys. - A multimap that goes from an integer to multiple integers.
- A variable length matrix optimized for read-only rows.
- An extensible (ie: can add more rows) jagged array.
- An associative array of small integers.
- Types marking slices as being sorted.
Traits
- extension trait for any iterator to add a assume_sorted_by_item method
- extension trait for any iterator of pairs to add a assume_sorted_by_key method
- A type that can be cast into an index.
- marker trait for iterators that are sorted by their Item
- marker trait for iterators that are sorted by the key of their Item
- set operations for iterators where the items are sorted according to the natural order
- relational operations for iterators of pairs where the items are sorted according to the key