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.
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.