Struct blart::OpaqueNodePtr

source ·
#[repr(transparent)]
pub struct OpaqueNodePtr<K, V>(TaggedPointer<OpaqueValue, 3>, PhantomData<(K, V)>);
Expand description

An opaque pointer to a Node.

Could be any one of the NodeTypes, need to perform check on the runtime type and then cast to a NodePtr.

Tuple Fields§

§0: TaggedPointer<OpaqueValue, 3>§1: PhantomData<(K, V)>

Implementations§

source§

impl<K, V> OpaqueNodePtr<K, V>

source

pub fn new<N>(pointer: NonNull<N>) -> Selfwhere N: Node<Value = V>,

Construct a new opaque node pointer from an existing non-null node pointer.

source

pub fn is<N: Node>(&self) -> bool

Return true if this Node_ pointer points to the specified concrete NodeType.

source

pub fn cast<N: Node>(self) -> Option<NodePtr<N>>

Create a non-opaque node pointer that will eliminate future type assertions, if the type of the pointed node matches the given node type.

source

pub fn to_node_ptr(self) -> ConcreteNodePtr<K, V>

Cast this opaque pointer type an enum that contains a pointer to the concrete node type.

source

pub fn node_type(self) -> NodeType

Retrieve the runtime node type information.

source

pub(crate) unsafe fn header_mut<'h>(self) -> Option<&'h mut Header>

Get a mutable reference to the header if the underlying node has a header field, otherwise return None.

Safety
  • You must enforce Rust’s aliasing rules, since the returned lifetime ’h is arbitrarily chosen and does not necessarily reflect the actual lifetime of the data. In particular, for the duration of this lifetime, the memory the pointer points to must not get accessed (read or written) through any other pointer.

Trait Implementations§

source§

impl<K, V> Clone for OpaqueNodePtr<K, V>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl<K, V> Debug for OpaqueNodePtr<K, V>

source§

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

Formats the value using the given formatter. Read more
source§

impl<K, V> Hash for OpaqueNodePtr<K, V>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

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

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

impl<K, V> PartialEq<OpaqueNodePtr<K, V>> for OpaqueNodePtr<K, V>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<K, V> Pointer for OpaqueNodePtr<K, V>

source§

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

Formats the value using the given formatter.
source§

impl<K, T> Visitable<K, T> for OpaqueNodePtr<K, T>

source§

fn super_visit_with<V: Visitor<K, T>>(&self, visitor: &mut V) -> V::Output

This function provides the default traversal behavior for the implementing type. Read more
source§

fn visit_with<V: Visitor<K, T>>(&self, visitor: &mut V) -> V::Output

This function will traverse the implementing type and execute any specific logic from the given Visitor. Read more
source§

impl<K, V> Copy for OpaqueNodePtr<K, V>

source§

impl<K, V> Eq for OpaqueNodePtr<K, V>

Auto Trait Implementations§

§

impl<K, V> RefUnwindSafe for OpaqueNodePtr<K, V>where K: RefUnwindSafe, V: RefUnwindSafe,

§

impl<K, V> !Send for OpaqueNodePtr<K, V>

§

impl<K, V> !Sync for OpaqueNodePtr<K, V>

§

impl<K, V> Unpin for OpaqueNodePtr<K, V>where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for OpaqueNodePtr<K, V>where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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 Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

type Error = Infallible

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

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

Performs the conversion.
source§

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

§

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.