pub struct Interner { /* private fields */ }Expand description
String interner that deduplicates strings and returns Atom handles.
§Example
use tsz_common::interner::Interner;
let mut interner = Interner::new();
let a1 = interner.intern("hello");
let a2 = interner.intern("hello");
assert_eq!(a1, a2); // Same atom for same string
assert_eq!(interner.resolve(a1), "hello");Implementations§
Source§impl Interner
impl Interner
Sourcepub fn intern(&mut self, s: &str) -> Atom
pub fn intern(&mut self, s: &str) -> Atom
Intern a string, returning its Atom handle. If the string was already interned, returns the existing Atom.
Sourcepub fn intern_owned(&mut self, s: String) -> Atom
pub fn intern_owned(&mut self, s: String) -> Atom
Intern an owned String, avoiding allocation if possible.
Sourcepub fn resolve(&self, atom: Atom) -> &str
pub fn resolve(&self, atom: Atom) -> &str
Resolve an Atom back to its string value. Returns empty string if atom is out of bounds (safety for error recovery).
Sourcepub fn try_resolve(&self, atom: Atom) -> Option<&str>
pub fn try_resolve(&self, atom: Atom) -> Option<&str>
Try to resolve an Atom, returning None if invalid.
Sourcepub const fn is_empty(&self) -> bool
pub const fn is_empty(&self) -> bool
Check if the interner is empty (only has the empty string).
Sourcepub fn intern_common(&mut self)
pub fn intern_common(&mut self)
Pre-intern common TypeScript keywords and identifiers. Call this after creating the interner for better cache locality.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Interner
impl RefUnwindSafe for Interner
impl Send for Interner
impl Sync for Interner
impl Unpin for Interner
impl UnsafeUnpin for Interner
impl UnwindSafe for Interner
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§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more