pub trait Intern {
type Symbol: Copy;
type Error;
const SYMBOL_RANGE_START: Self::Symbol;
// Required methods
fn intern_bytes<T>(
&mut self,
symbol: T,
) -> Result<Self::Symbol, Self::Error>
where T: Into<Cow<'static, [u8]>>;
fn check_interned_bytes(
&self,
symbol: &[u8],
) -> Result<Option<Self::Symbol>, Self::Error>;
fn lookup_symbol(
&self,
symbol: Self::Symbol,
) -> Result<Option<&[u8]>, Self::Error>;
fn symbol_count(&self) -> usize;
// Provided methods
fn intern_string<T>(
&mut self,
symbol: T,
) -> Result<Self::Symbol, Self::Error>
where T: Into<Cow<'static, str>> { ... }
fn check_interned_string(
&self,
symbol: &str,
) -> Result<Option<Self::Symbol>, Self::Error> { ... }
}
Expand description
Store and retrieve byte strings that have the same lifetime as the interpreter.
See the Ruby Symbol
type.
Required Associated Constants§
sourceconst SYMBOL_RANGE_START: Self::Symbol
const SYMBOL_RANGE_START: Self::Symbol
The initial Symbol
index returned by the interner.
Implementing Intern
requires that symbol identifiers form an
arithmetic progression with a common difference of 1. The sequence of
symbol identifiers must be representable by a Range<u32>
.
Required Associated Types§
Required Methods§
sourcefn intern_bytes<T>(&mut self, symbol: T) -> Result<Self::Symbol, Self::Error>
fn intern_bytes<T>(&mut self, symbol: T) -> Result<Self::Symbol, Self::Error>
Store an immutable byte string for the life of the interpreter.
Returns an identifier that enables retrieving the original bytes.
§Errors
If the symbol store cannot be accessed, an error is returned.
If the symbol table overflows, an error is returned.
sourcefn check_interned_bytes(
&self,
symbol: &[u8],
) -> Result<Option<Self::Symbol>, Self::Error>
fn check_interned_bytes( &self, symbol: &[u8], ) -> Result<Option<Self::Symbol>, Self::Error>
Check if a byte string is already interned and return its symbol
identifier. Return None
if the string has not been interned before.
Returns an identifier that enables retrieving the original bytes.
§Errors
If the symbol store cannot be accessed, an error is returned.
sourcefn lookup_symbol(
&self,
symbol: Self::Symbol,
) -> Result<Option<&[u8]>, Self::Error>
fn lookup_symbol( &self, symbol: Self::Symbol, ) -> Result<Option<&[u8]>, Self::Error>
Retrieve the original byte content of an interned byte string.
Returns None
if the symbol identifier is invalid.
§Errors
If the symbol store cannot be accessed, an error is returned.
sourcefn symbol_count(&self) -> usize
fn symbol_count(&self) -> usize
Retrieve the number of unique strings interned.
This method should return the length of the underlying symbol table.
Provided Methods§
sourcefn intern_string<T>(&mut self, symbol: T) -> Result<Self::Symbol, Self::Error>
fn intern_string<T>(&mut self, symbol: T) -> Result<Self::Symbol, Self::Error>
Store an immutable string for the life of the interpreter.
Returns an identifier that enables retrieving the original bytes.
By default, this method is implemented by delegating to
intern_bytes
.
§Errors
If the symbol store cannot be accessed, an error is returned.
If the symbol table overflows, an error is returned.
sourcefn check_interned_string(
&self,
symbol: &str,
) -> Result<Option<Self::Symbol>, Self::Error>
fn check_interned_string( &self, symbol: &str, ) -> Result<Option<Self::Symbol>, Self::Error>
Check if a string is already interned and return its symbol identifier.
Return None
if the string has not been interned before.
Returns an identifier that enables retrieving the original bytes.
By default, this method is implemented by delegating to
check_interned_bytes
.
§Errors
If the symbol store cannot be accessed, an error is returned.