[][src]Struct egg::Symbol

pub struct Symbol(_);

An interned string.

Internally, egg frequently compares Vars and elements of Languages. To keep comparisons fast, egg provides Symbol a simple wrapper providing interned strings.

You may wish to use Symbol in your own Languages to increase performance and keep enode sizes down (a Symbol is only 4 bytes, compared to 24 for a String.)

A Symbol is simply a wrapper around an integer. When creating a Symbol from a string, egg looks up it up in a global table, returning the index (inserting it if not found). That integer is used to cheaply implement Copy, Clone, PartialEq, Eq, PartialOrd, Ord, and Hash.

The internal symbol cache leaks the strings, which should be fine if you only put in things like variable names and identifiers.

Example

use egg::Symbol;

assert_eq!(Symbol::from("foo"), Symbol::from("foo"));
assert_eq!(Symbol::from("foo"), "foo".parse().unwrap());

assert_ne!(Symbol::from("foo"), Symbol::from("bar"));

Implementations

impl Symbol[src]

pub fn as_str(self) -> &'static str[src]

Get the string that this symbol represents

Trait Implementations

impl Clone for Symbol[src]

impl Copy for Symbol[src]

impl Debug for Symbol[src]

impl Display for Symbol[src]

impl Eq for Symbol[src]

impl<S: AsRef<str>> From<S> for Symbol[src]

impl FromStr for Symbol[src]

type Err = Infallible

The associated error which can be returned from parsing.

impl Hash for Symbol[src]

impl Ord for Symbol[src]

impl PartialEq<Symbol> for Symbol[src]

impl PartialOrd<Symbol> for Symbol[src]

impl StructuralEq for Symbol[src]

impl StructuralPartialEq for Symbol[src]

Auto Trait Implementations

impl RefUnwindSafe for Symbol

impl Send for Symbol

impl Sync for Symbol

impl Unpin for Symbol

impl UnwindSafe for Symbol

Blanket Implementations

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

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

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

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

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

impl<T, U> Into<U> for T where
    U: From<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.