Indexical: Human-Friendly Indexed Collections
Indexical is a library for conveniently and efficiently working with indexed collections of objects. "Indexed" means that the domain of objects is finite, and you can assign a numeric index to each object. This enables the use of efficient data structures like bit-sets.
Indexical is a layer on top of existing bit-set libraries like bitvec
and rustc_index::bit_set
.
Those data structures only "understand" raw indexes, not the objects represented by the index.
Indexical provides utilities for converting between the object domain and the index domain.
Example
use ;
use Rc;
// 1. Define a custom type.
;
// 2. Define a new index for your custom type.
define_index_type!
// 3. Create an immutable indexed domain from a collection of objects.
// By default this is Rc-wrapped, but you can also use Arc or &-refs.
let domain = new;
// 4. Now you can make a set! Notice how you can pass either a `MyString`
// or a `StringIndex` to `set.insert(..)` and `set.contains(..)`.
let mut set = new;
set.insert;
set.insert;
assert!;