Expand description
§Introduction
This crate implements a variety of collections based on binary trees, in particular splay trees. Splay trees are a type of data structure that offers logarithmic time lookup for random access of data. They are self-organising, in the sense that commonly accessed items with the tree send to ‘bubble’ to the top so that future lookups of these items will be faster in the future.
§Benefits
The crate complements the standard std::collection routines, but provide the following
benefits:
- Keys stored in the collections do not need to be hashable.
- Keys are sorted into an ‘ascending’ order within the collection by comparing keys pairwise.
- Keys in the collection do not need to implement
CloneorCopy. Keys the supportOrdcan useMaporSet, etc, but if not a custom function can be supplied to compare keys usingMapByorStringMapBy, etc. - The crate is small and
#![no_std]. - Copying and moving of keys are values is minimised. They are stored as (key, Value) pairs in a single array. They are moved when inserted and moved when the array is expanded, but otherwise do not move as the tree reconfigures around them. Once the array is large enough the memory is managed internally and when keys are removed that memory is recycled for future use.
- The storage of the (key, value) pair is separate to the storage of the structure of the tree.
This has subtle benefits such as removing a (key, value) pair does not immediately remove them
from strage. That means, for example that the
pop_first()returns a reference&(K, V)not a value(K, V).
§Contents
The initial release of the thicket crate includes the following types
| Type | Stores | Sorts By | Iterator |
|---|---|---|---|
Map | Key/Value | Ord | MapIterator |
Set | Key | Ord | SetIterator |
StringMap | String/Value | Ord | StringMapIterator |
StringSet | String | Ord | StringSetIterator |
MapBy | Key/Value | Function | MapByIterator |
SetBy | Key | Function | SetByIterator |
StringMapBy | String/Value | Function | StringMapByIterator |
StringSetBy | String | Function | StringSetByIterator |
The crate exposes an additional type util::Tree that provides the foundation of the other
types. This can be thought of as a utility that manages a set of usize indices into an
external vector of data, without storing the vector itself. It is provided to support
development of additional collection types.
Modules§
- util
- Utility types to support self balancing binary splay trees
Structs§
- Map
- A simple map between keys and values, implemented using a splay tree.
- MapBy
- A simple map between keys and values, implemented using a splay tree.
- MapBy
Iterator - Iterator over a
MapBy - MapIterator
- Iterator over a
Map - Set
- A simple of keys, implemented using a splay tree.
- SetBy
- A simple set of keys, implemented using a splay tree.
- SetBy
Iterator - Iterator over a
SetBy - SetIterator
- Iterator over a
Set - String
Map - A simple map between strings and values, implemented using a splay tree.
- String
MapBy - A simple map between strings and values, implemented using a splay tree.
- String
MapBy Iterator - Iterator over a
StringMap - String
MapIterator - Iterator over a
StringMap - String
Set - A simple set of strings, implemented using a splay tree.
- String
SetBy - A simple set of strings, implemented using a splay tree.
- String
SetBy Iterator - Iterator over a
StringSet - String
SetIterator - Iterator over a
StringSet