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:
Set
is basically interchangeable withHashSet
, although it does require that its elements implement theCopy
trait, since otherwise I would have to learn to write correctunsafe
code, which would be scary. It uses FNV hashing when there are large numbers of elements.TinySet
is places a stronger requirement on its elements, which must have traitHasInvalid
. This is intended for elements that areCopy
, areHash
, 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 |
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
|
Traits
HasInvalid |
Trait for any type that can be converted to a |