pub struct BucketBackend<S = DefaultSymbol> { /* private fields */ }
Expand description
An interner backend that reduces memory allocations by using string buckets.
§Note
Implementation inspired by matklad’s blog post that can be found here: https://matklad.github.io/2020/03/22/fast-simple-rust-interner.html
§Usage Hint
Use when deallocations or copy overhead is costly or when interning of static strings is especially common.
§Usage
- Fill: Efficiency of filling an empty string interner.
- Resolve: Efficiency of interned string look-up given a symbol.
- Allocations: The number of allocations performed by the backend.
- Footprint: The total heap memory consumed by the backend.
- Contiguous: True if the returned symbols have contiguous values.
- Iteration: Efficiency of iterating over the interned strings.
Rating varies between bad, ok, good and best.
Scenario | Rating |
---|---|
Fill | good |
Resolve | best |
Allocations | good |
Footprint | ok |
Supports get_or_intern_static | yes |
Send + Sync | yes |
Contiguous | yes |
Iteration | best |
Trait Implementations§
Source§impl<S> Backend for BucketBackend<S>where
S: Symbol,
impl<S> Backend for BucketBackend<S>where
S: Symbol,
Source§fn with_capacity(cap: usize) -> Self
fn with_capacity(cap: usize) -> Self
Creates a new backend for the given capacity. Read more
Source§fn intern(&mut self, string: &str) -> Self::Symbol
fn intern(&mut self, string: &str) -> Self::Symbol
Interns the given string and returns its interned ref and symbol. Read more
Source§fn intern_static(&mut self, string: &'static str) -> Self::Symbol
fn intern_static(&mut self, string: &'static str) -> Self::Symbol
Interns the given static string and returns its interned ref and symbol. Read more
Source§fn shrink_to_fit(&mut self)
fn shrink_to_fit(&mut self)
Shrink backend capacity to fit interned symbols exactly.
Source§fn resolve(&self, symbol: Self::Symbol) -> Option<&str>
fn resolve(&self, symbol: Self::Symbol) -> Option<&str>
Resolves the given symbol to its original string contents.
Source§impl<S> Clone for BucketBackend<S>
impl<S> Clone for BucketBackend<S>
Source§impl<S: Debug> Debug for BucketBackend<S>
impl<S: Debug> Debug for BucketBackend<S>
Source§impl<S> Default for BucketBackend<S>
impl<S> Default for BucketBackend<S>
Source§impl<'a, S> IntoIterator for &'a BucketBackend<S>where
S: Symbol,
impl<'a, S> IntoIterator for &'a BucketBackend<S>where
S: Symbol,
Source§impl<S> PartialEq for BucketBackend<S>where
S: Symbol,
impl<S> PartialEq for BucketBackend<S>where
S: Symbol,
impl<S> Eq for BucketBackend<S>where
S: Symbol,
impl<S> Send for BucketBackend<S>where
S: Symbol,
§Safety
The bucket backend requires a manual Send
impl because it is self
referential. When cloning a bucket backend a deep clone is performed and
all references to itself are updated for the clone.
impl<S> Sync for BucketBackend<S>where
S: Symbol,
Auto Trait Implementations§
impl<S> Freeze for BucketBackend<S>
impl<S> RefUnwindSafe for BucketBackend<S>
impl<S> Unpin for BucketBackend<S>
impl<S> UnwindSafe for BucketBackend<S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)