Struct smtree::index::TreeIndex[][src]

pub struct TreeIndex { /* fields omitted */ }
Expand description

The index of a tree node includes the height (the root with height 0), and the path from the root to the node.

The path is a bit array, and each bit indicates which direction the child node goes.

The i-th bit being 0 indicates that the node at height i+1 in the path is the left child of the node at height i, and 1 indicates the right child.

Implementations

impl TreeIndex[src]

pub fn new(height: usize, pos: [u8; 32]) -> TreeIndex[src]

The constructor.

Panics if the input height exceeds MAX_HEIGHT,

pub fn from_u32(height: usize, pos: u32) -> TreeIndex[src]

Construct TreeIndex from a u32 leaf position.

Panics if:

  • height exceeds MAX_HEIGHT.
  • pos is not a valid leaf position in the tree of the specified height.

pub fn from_u64(height: usize, pos: u64) -> TreeIndex[src]

Construct TreeIndex from a u64 leaf position.

Panics if:

  • height exceeds MAX_HEIGHT.
  • pos is not a valid leaf position in the tree of the specified height.

pub fn zero(height: usize) -> TreeIndex[src]

Returns a tree index of the left-most node (all bits in the path being 0) at the given height.

Panics if the input height exceeds MAX_HEIGHT.

pub fn get_height(&self) -> usize[src]

Returns the height of a tree index.

pub fn set_height(&mut self, height: usize)[src]

Set the height of a tree index.

Panics if the input height exceeds MAX_HEIGHT.

pub fn get_path(&self) -> [u8; 32][src]

Returns the path of a tree index.

pub fn get_bit(&self, i: usize) -> u8[src]

Get the i-th bit in the path.

Panics if queried bit index is out of the range [0, height-1].

pub fn get_last_bit(self) -> u8[src]

Returns the last bit in the path of the tree index.

Panics if the tree index has height 0 thus the bit doesn’t exist.

pub fn get_prefix(&self, height: usize) -> TreeIndex[src]

Returns a tree index with the input height and the path being a prefix of the self path.

Panics if the input height exceeds the height of the index.

pub fn randomize(&mut self)[src]

Randomly samples a path.

pub fn get_lch_index(&self) -> TreeIndex[src]

Returns the tree index of the left child of a node.

Panics if the height of the child node exceeds MAX_HEIGHT.

pub fn get_rch_index(&self) -> TreeIndex[src]

Returns the tree index of the right child of a node.

Panics if the height of the child node exceeds MAX_HEIGHT.

pub fn get_child_index_by_dir(&self, dir: ChildDir) -> TreeIndex[src]

Returns the tree index of the child in the input direction of a node.

Panics if the height of the child node exceeds MAX_HEIGHT.

pub fn get_sibling_index(&self) -> TreeIndex[src]

Returns the tree index of the sibling of a node.

Panics if the queried node is the root, which means that the sibling doesn’t exist.

pub fn get_parent_index(&self) -> TreeIndex[src]

Returns the tree index of the parent of a node.

Panics if the queried node is the root, which means that the parent doesn’t exist.

pub fn get_left_index(&self) -> Option<TreeIndex>[src]

Returns the index on the left of self.

pub fn get_right_index(&self) -> Option<TreeIndex>[src]

Returns the index on the right of self.

pub fn serialize(list: &[TreeIndex]) -> Vec<u8>[src]

Encode a list of tree indexes in the format: height || path || ... || path.

If the input list is empty, return empty vector.

pub fn deserialize_as_a_unit(
    bytes: &[u8],
    num: usize,
    begin: &mut usize
) -> Result<Vec<TreeIndex>, DecodingError>
[src]

Decode input bytes (height || path || ... || path) as a list of tree indexes.

Note that bytes is the input bytes, num is the target number of tree indexes, begin is the beginning position of bytes.

If the decoded height exceeds MAX_HEIGHT, return DecodingError::ExceedMaxHeight.

If the bytes are not enough for decoding, return DecodingError::BytesNotEnough.

Trait Implementations

impl Clone for TreeIndex[src]

fn clone(&self) -> TreeIndex[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for TreeIndex[src]

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

Formats the value using the given formatter. Read more

impl Default for TreeIndex[src]

fn default() -> TreeIndex[src]

Returns the “default value” for a type. Read more

impl Hash for TreeIndex[src]

fn hash<__H: Hasher>(&self, state: &mut __H)[src]

Feeds this value into the given Hasher. Read more

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

Feeds a slice of this type into the given Hasher. Read more

impl Ord for TreeIndex[src]

If two indexes have the same height, the right-side one is greater.

If two indexes have different heights, the one with smaller height is greater, i.o.w., the higher the node in the SMT, the greater its index is.

fn cmp(&self, other: &Self) -> Ordering[src]

This method returns an Ordering between self and other. Read more

#[must_use]
fn max(self, other: Self) -> Self
1.21.0[src]

Compares and returns the maximum of two values. Read more

#[must_use]
fn min(self, other: Self) -> Self
1.21.0[src]

Compares and returns the minimum of two values. Read more

#[must_use]
fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]

Restrict a value to a certain interval. Read more

impl PartialEq<TreeIndex> for TreeIndex[src]

fn eq(&self, other: &TreeIndex) -> bool[src]

This method tests for self and other values to be equal, and is used by ==. Read more

fn ne(&self, other: &TreeIndex) -> bool[src]

This method tests for !=.

impl PartialOrd<TreeIndex> for TreeIndex[src]

If two indexes have the same height, the right-side one is greater.

If two indexes have different heights, the one with smaller height is greater, i.o.w., the higher the node in the SMT, the greater its index is.

fn partial_cmp(&self, other: &Self) -> Option<Ordering>[src]

This method returns an ordering between self and other values if one exists. Read more

#[must_use]
fn lt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than (for self and other) and is used by the < operator. Read more

#[must_use]
fn le(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

#[must_use]
fn gt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than (for self and other) and is used by the > operator. Read more

#[must_use]
fn ge(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl Copy for TreeIndex[src]

impl Eq for TreeIndex[src]

impl StructuralEq for TreeIndex[src]

impl StructuralPartialEq for TreeIndex[src]

Auto Trait Implementations

Blanket Implementations

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

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> Pointable for T

pub const ALIGN: usize

The alignment of pointer.

type Init = T

The type for initializers.

pub unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more

pub unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more

pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more

pub unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more

impl<T> Same<T> for T

type Output = T

Should always be Self

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

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

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

Performs the conversion.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

pub fn vzip(self) -> V