Trait string_interner::backend::Backend
source · pub trait Backend: Default {
type Symbol: Symbol;
type Iter<'a>: Iterator<Item = (Self::Symbol, &'a str)>
where Self: 'a;
// Required methods
fn with_capacity(cap: usize) -> Self;
fn intern(&mut self, string: &str) -> Self::Symbol;
fn shrink_to_fit(&mut self);
fn resolve(&self, symbol: Self::Symbol) -> Option<&str>;
unsafe fn resolve_unchecked(&self, symbol: Self::Symbol) -> &str;
fn iter(&self) -> Self::Iter<'_>;
// Provided method
fn intern_static(&mut self, string: &'static str) -> Self::Symbol { ... }
}
Expand description
Types implementing this trait may act as backends for the string interner.
The job of a backend is to actually store, manage and organize the interned strings. Different backends have different trade-offs. Users should pick their backend with hinsight of their personal use-case.
Required Associated Types§
Required Methods§
sourcefn with_capacity(cap: usize) -> Self
fn with_capacity(cap: usize) -> Self
Creates a new backend for the given capacity.
The capacity denotes how many strings are expected to be interned.
sourcefn shrink_to_fit(&mut self)
fn shrink_to_fit(&mut self)
Shrink backend capacity to fit interned symbols exactly.
sourcefn resolve(&self, symbol: Self::Symbol) -> Option<&str>
fn resolve(&self, symbol: Self::Symbol) -> Option<&str>
Resolves the given symbol to its original string contents.
sourceunsafe fn resolve_unchecked(&self, symbol: Self::Symbol) -> &str
unsafe fn resolve_unchecked(&self, symbol: Self::Symbol) -> &str
Resolves the given symbol to its original string contents.
§Safety
Does not perform validity checks on the given symbol and relies
on the caller to be provided with a symbol that has been generated
by the intern
or
intern_static
methods of the same
interner backend.