Crate internment
source ·Expand description
A very easy to use library for interning strings or other data in rust. Interned data is very efficient to either hash or compare for equality (just a pointer comparison). Data is also automatically de-duplicated.
You have three options with the internment crate:
-
Intern
, which will never free your data. This means that anIntern
isCopy
, so you can make as many copies of the pointer as you may care to at no cost. -
ArcIntern
, which reference-counts your data and frees it when there are no more references.ArcIntern
will keep memory use down, but uses an atomic increment/decrement whenever a clone of your pointer is made, or a pointer is dropped. -
ArenaIntern
, which stores its data in anArena
, with the data being freed when the arena itself is freed. Requires featurearena
.
In each case, accessing your data is a single pointer dereference, and the size
of any internment data structure (Intern
or ArcIntern
or ArenaIntern
) is a
single pointer. In each case, you have a guarantee that a single data value (as
defined by Eq
and Hash
) will correspond to a single pointer value. This
means that we can use pointer comparison (and a pointer hash) in place of value
comparisons, which is very fast.
Example
use internment::Intern;
let x = Intern::new("hello");
let y = Intern::new("world");
assert_ne!(x, y);
println!("The conventional greeting is '{} {}'", x, y);
Structs
- A pointer to an interned object