[][src]Crate string_interner

Caches strings efficiently, with minimal memory footprint and associates them with unique symbols. These symbols allow constant time comparisons and look-ups to the underlying interned strings.

Example: Interning & Symbols

use string_interner::StringInterner;

let mut interner = StringInterner::default();
let sym0 = interner.get_or_intern("Elephant");
let sym1 = interner.get_or_intern("Tiger");
let sym2 = interner.get_or_intern("Horse");
let sym3 = interner.get_or_intern("Tiger");
assert_ne!(sym0, sym1);
assert_ne!(sym0, sym2);
assert_ne!(sym1, sym2);
assert_eq!(sym1, sym3); // same!

Example: Creation by FromIterator

let interner = vec!["Elephant", "Tiger", "Horse", "Tiger"]
    .into_iter()
    .collect::<StringInterner>();

Example: Look-up

let mut interner = StringInterner::default();
let sym = interner.get_or_intern("Banana");
assert_eq!(interner.resolve(sym), Some("Banana"));

Example: Iteration

let interner = vec!["Earth", "Water", "Fire", "Air"]
    .into_iter()
    .collect::<StringInterner>();
for (sym, str) in &interner {
    // iteration code here!
}

Modules

backend

Backends for the StringInterner.

symbol

Interfaces and types to be used as symbols for the StringInterner.

Structs

StringInterner

Data structure to intern and resolve strings.

Traits

Symbol

Types implementing this trait can be used as symbols for string interners.

Type Definitions

DefaultBackend

The default backend recommended for general use.

DefaultHashBuilder

Default hasher for HashMap.

DefaultSymbol

The symbol type that is used by default.