Skip to main content

Node

Struct Node 

Source
pub struct Node {
    pub heads: &'static [(&'static str, usize, u32)],
    pub ints: &'static [(i128, u32)],
    pub same: &'static [(usize, u32)],
    pub wildcard: Option<(&'static str, u32)>,
    pub accept: Option<u32>,
}
Expand description

One node of the trie over the patterns.

The branches are held by the kind of question they ask rather than in one list, which is what lets the two that can be searched be searched.

Fields§

§heads: &'static [(&'static str, usize, u32)]

The branches taken on the head of the subterm, as the name, how many arguments it takes, and where to go. Sorted by the first two, which is what Node::branch needs.

§ints: &'static [(i128, u32)]

The branches taken on the value of a subterm that is a constant, sorted by the value.

§same: &'static [(usize, u32)]

The branches taken when the subterm is the same thing as a binding this pattern already made, named by which binding it is. A pattern writes one where it writes a name for the second time, so this is how x & x is told apart from x & y. In the order the rules were written, because two of them can match one subterm.

§wildcard: Option<(&'static str, u32)>

The branch that takes anything, and the name the first rule to reach it gave that hole.

§accept: Option<u32>

The rule that ends here, if one does.

Implementations§

Source§

impl Node

Source

pub fn branch(&self, head: &str, arity: usize) -> Option<u32>

The branch for a term with this head and this many arguments, if the node has one.

A binary search, which is the whole point of the list being sorted. At most one branch can answer, so nothing about which rule fires depends on the list being in this order rather than in the order the rules were written.

Source

pub fn literal(&self, value: i128) -> Option<u32>

The branch for a constant of this value, if the node has one.

Trait Implementations§

Source§

impl Clone for Node

Source§

fn clone(&self) -> Node

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Node

Source§

impl Debug for Node

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Node

§

impl RefUnwindSafe for Node

§

impl Send for Node

§

impl Sync for Node

§

impl Unpin for Node

§

impl UnsafeUnpin for Node

§

impl UnwindSafe for Node

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.