[][src]Struct string_cache::Atom

pub struct Atom<Static> { /* fields omitted */ }

Represents a string that has been interned.

While the type definition for Atom indicates that it generic on a particular implementation of an atom set, you don't need to worry about this. Atoms can be static and come from a StaticAtomSet generated by the string_cache_codegen crate, or they can be dynamic and created by you on an EmptyStaticAtomSet.

Atom implements Clone but not Copy, since internally atoms are reference-counted; this means that you may need to .clone() an atom to keep copies to it in different places, or when passing it to a function that takes an Atom rather than an &Atom.

Creating an atom at runtime

If you use string_cache_codegen to generate a precomputed list of atoms, your code may then do something like read data from somewhere and extract tokens that need to be compared to the atoms. In this case, you can use Atom::from(&str) or Atom::from(String). These create a reference-counted atom which will be automatically freed when all references to it are dropped.

This means that your application can safely have a loop which tokenizes data, creates atoms from the tokens, and compares the atoms to a predefined set of keywords, without running the risk of arbitrary memory consumption from creating large numbers of atoms — as long as your application does not store clones of the atoms it creates along the way.

For example, the following is safe and will not consume arbitrary amounts of memory:

This example is not tested
let untrusted_data = "large amounts of text ...";

for token in untrusted_data.split_whitespace() {
    let atom = Atom::from(token); // interns the string

    if atom == Atom::from("keyword") {
        // handle that keyword
    } else if atom == Atom::from("another_keyword") {
        // handle that keyword
    } else {
        println!("unknown keyword");
    }
} // atom is dropped here, so it is not kept around in memory

Methods

impl<Static: StaticAtomSet> Atom<Static>[src]

pub fn get_hash(&self) -> u32[src]

Get the hash of the string as it is stored in the set.

impl<Static: StaticAtomSet> Atom<Static>[src]

pub fn to_ascii_uppercase(&self) -> Self[src]

pub fn to_ascii_lowercase(&self) -> Self[src]

pub fn eq_ignore_ascii_case(&self, other: &Self) -> bool[src]

pub fn eq_str_ignore_ascii_case(&self, other: &str) -> bool[src]

Like eq_ignore_ascii_case, but takes an unhashed string as other.

Trait Implementations

impl<Static> Drop for Atom<Static>[src]

impl<Static: StaticAtomSet> AsRef<str> for Atom<Static>[src]

impl<'a, Static: StaticAtomSet> From<Cow<'a, str>> for Atom<Static>[src]

impl<'a, Static: StaticAtomSet> From<&'a Atom<Static>> for Atom<Static>[src]

impl<'a, Static: StaticAtomSet> From<&'a str> for Atom<Static>[src]

impl<Static: StaticAtomSet> From<String> for Atom<Static>[src]

impl<Static: StaticAtomSet> Clone for Atom<Static>[src]

impl<Static: StaticAtomSet> Default for Atom<Static>[src]

impl<Static: Eq> Eq for Atom<Static>[src]

impl<Static: StaticAtomSet> Ord for Atom<Static>[src]

impl<Static: PartialEq> PartialEq<Atom<Static>> for Atom<Static>[src]

impl<Static: StaticAtomSet> PartialEq<str> for Atom<Static>[src]

impl<Static: StaticAtomSet> PartialEq<Atom<Static>> for str[src]

impl<Static: StaticAtomSet> PartialEq<String> for Atom<Static>[src]

impl<Static: StaticAtomSet> PartialOrd<Atom<Static>> for Atom<Static>[src]

impl<Static: StaticAtomSet> Display for Atom<Static>[src]

impl<Static: StaticAtomSet> Debug for Atom<Static>[src]

impl<Static: StaticAtomSet> Deref for Atom<Static>[src]

type Target = str

The resulting type after dereferencing.

impl<Static: StaticAtomSet> Hash for Atom<Static>[src]

impl<Static: StaticAtomSet> Serialize for Atom<Static>[src]

impl<'a, Static: StaticAtomSet> Deserialize<'a> for Atom<Static>[src]

impl<Static: StaticAtomSet> PrecomputedHash for Atom<Static>[src]

Auto Trait Implementations

impl<Static> Send for Atom<Static> where
    Static: Send

impl<Static> Sync for Atom<Static> where
    Static: Sync

impl<Static> Unpin for Atom<Static> where
    Static: Unpin

impl<Static> UnwindSafe for Atom<Static> where
    Static: UnwindSafe

impl<Static> RefUnwindSafe for Atom<Static> where
    Static: RefUnwindSafe

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]