[−][src]Struct jupiter::infograph::symbols::SymbolTable
Used to resolve and lookup symbols.
Implementations
impl SymbolTable
[src]
pub fn new() -> Self
[src]
Creates a new and empty symbol table.
Example
let table = SymbolTable::new(); assert_eq!(table.len(), 0);
pub fn resolve(&self, string: impl AsRef<str>) -> Option<Symbol>
[src]
Tries to resolve the given string
into an existing Symbol
.
If no symbol with the given name is known, None
is returned. If a new
symbol should be created instead, use find_or_create
.
Example
let mut table = SymbolTable::new(); let symbol = table.find_or_create("Test").unwrap(); assert_eq!(table.resolve("Test").unwrap(), symbol); assert_eq!(table.resolve("Unknown").is_none(), true);
pub fn find_or_create(&mut self, string: impl AsRef<str>) -> Result<Symbol>
[src]
Resolve the given string
into a new or an existing Symbol
.
If no symbol should be created if the given name is unknown, use resolve
.
Errors
This will return an error if the internal symbol table overflows (if there are more than std::i32::MAX - 2 symbols).
Example
let mut table = SymbolTable::new(); let symbol = table.find_or_create("Test").unwrap(); assert_eq!(table.resolve("Test").unwrap(), symbol);
pub fn lookup(&self, symbol: Symbol) -> &str
[src]
Retrieves the name of the given Symbol
.
Examples
let mut table = SymbolTable::new(); let symbol = table.find_or_create("Test").unwrap(); // A known symbol can be looked up... assert_eq!(table.lookup(symbol), "Test"); // An unknown symbol is simply translated to "" assert_eq!(table.lookup(1024), "");
pub fn len(&self) -> usize
[src]
Determines the number of known symbols in the table.
Examples
let mut table = SymbolTable::new(); // The same symbol is only added once to a table... let symbol = table.find_or_create("Test").unwrap(); let symbol1 = table.find_or_create("Test").unwrap(); assert_eq!(symbol, symbol1); // ..therefore the table size is 1. assert_eq!(table.len(), 1); // If we add another symbol... table.find_or_create("Test 2").unwrap(); // ...the size grows to 2. assert_eq!(table.len(), 2);
pub fn allocated_size(&self) -> usize
[src]
Estimates the allocated memory required to represent the symbol table.
Note that this is only an approximation as some inner types to not reveal their size.
Example
let mut table = SymbolTable::new(); table.find_or_create("Hello").unwrap(); table.find_or_create("World").unwrap(); println!("{}", table.allocated_size());
Auto Trait Implementations
impl RefUnwindSafe for SymbolTable
impl Send for SymbolTable
impl Sync for SymbolTable
impl Unpin for SymbolTable
impl UnwindSafe for SymbolTable
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,