Crate tinyset [] [src]

tinyset contains a few collections that are optimized to scale in size well for small numbers of elements, while still scaling well in time (and size) for numbers of elements. We have two set types:

  1. Set is basically interchangeable with HashSet, although it does require that its elements implement the Copy trait, since otherwise I would have to learn to write correct unsafe code, which would be scary. It uses FNV hashing when there are large numbers of elements.

  2. TinySet is places a stronger requirement on its elements, which must have trait HasInvalid. This is intended for elements that are Copy, are Hash, and have an "invalid" value. For the unsigned integer types, we take their maximum value to mean invalid. This constraint allows us to save a bit more space.

Both of these set types will do no heap allocation for small sets of small elements. TinySet will store up to 16 bytes of elements before doing any heap allocation, while Set stores sets up to size 8 without allocation. Both sets are similar in speed to fnv::HashSet.

Examples

use tinyset::Set;
let mut s: Set<usize> = Set::new();
s.insert(1);
assert!(s.contains(&1));
use tinyset::TinySet;
let mut s: TinySet<usize> = TinySet::new();
s.insert(1);
assert!(s.contains(&1));

Structs

Set

A set that is a FnvHashSet when it has many elements, but is just an array for small set sizes.

TinySet

A set implemented for types that have an invalid value

VecSet

A set that is stored in a Vec

Constants

CAPACITY

The number of elements stored in an array before moving up to the FnvHashSet implementation.

Traits

HasInvalid

Trait for any type that can be converted to a usize. This could actually be a hash function, but we will assume that it is fast, so I'm not calling it Hash.