Struct cactus::Cactus
[−]
[src]
pub struct Cactus<T> { /* fields omitted */ }
An immutable cactus stack node. May be empty or contain a value; may have a pointer to a parent or not.
Methods
impl<T> Cactus<T>
[src]
fn new() -> Cactus<T>
[src]
Return an empty cactus stack node.
fn is_empty(&self) -> bool
[src]
Is this cactus stack node empty?
Examples
use cactus::Cactus; let c = Cactus::new(); assert!(c.is_empty()); let c2 = c.child(1); assert!(!c2.is_empty());
fn len(&self) -> usize
[src]
How many items are there in this cactus stack?
fn child(&self, val: T) -> Cactus<T>
[src]
Create a new cactus stack node containing value val
and pointing to parent self
.
Examples
use cactus::Cactus; let c = Cactus::new(); let c2 = c.child(1); let c3 = c2.child(2); assert_eq!(c3.vals().cloned().collect::<Vec<_>>(), [2, 1]);
fn parent(&self) -> Option<Cactus<T>>
[src]
Return this cactus stack node's parent node or None
if this cactus stack is empty.
Examples
use cactus::Cactus; let c = Cactus::new(); let c2 = c.child(1); assert_eq!(c.parent(), None); assert_eq!(c2.val(), Some(&1)); assert_eq!(c2.parent().unwrap(), Cactus::new());
fn val(&self) -> Option<&T>
[src]
Return a reference to this cactus stack node's value or None
if this cactus stack is
empty.
Examples
use cactus::Cactus; let c = Cactus::new().child(1); assert_eq!(c.val(), Some(&1)); assert_eq!(c.parent().unwrap().val(), None);
fn nodes(&self) -> CactusNodesIter<T>
[src]
Return an iterator over this cactus stack's nodes. Note that the iterator produces nodes starting from this node and then walking up towards the root.
Examples
use cactus::Cactus; let c = Cactus::new().child(1).child(2).child(3); assert_eq!(c.nodes().skip(1).next(), Some(Cactus::new().child(1).child(2)));
fn vals(&self) -> CactusValsIter<T>
[src]
Return an iterator over this cactus stack's values. Note that the iterator produces values starting from this node and then walking up towards the root.
Examples
use cactus::Cactus; let c = Cactus::new().child(1).child(2).child(3); assert_eq!(c.vals().cloned().collect::<Vec<_>>(), [3, 2, 1]);
fn try_unwrap(self) -> Result<T, Cactus<T>>
[src]
Try to consume this Cactus node and return its data. If the cactus node has no children, this succeeds; if the cactus node has children, it fails, and returns the original cactus node.
Examples
use cactus::Cactus; let c = Cactus::new().child(1).child(2); let p = c.parent().unwrap(); assert_eq!(c.try_unwrap().unwrap(), 2); // At this point the c variable can no longer be referenced (its value has moved). assert_eq!(p.val(), Some(&1)); let d = Cactus::new().child(1); let d1 = d.child(2); let d2 = d.child(3); // At this point d.try_unwrap().unwrap() would return an Err, as d has two children that // prevent the underlying Cactus from being consumed. We then need to manually clone the // value if we want to access it uniformly. assert_eq!(d.try_unwrap().unwrap_or_else(|c| c.val().unwrap().clone()), 1); // At this point the d variable can no loner be referenced (its value has moved), // but we can still access the contents it once pointed to: assert_eq!(*d1.parent().unwrap().val().unwrap(), 1);
Trait Implementations
impl<T: Clone> Clone for Cactus<T>
[src]
fn clone(&self) -> Cactus<T>
[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<T: Default> Default for Cactus<T>
[src]
impl<T: PartialEq> PartialEq for Cactus<T>
[src]
fn eq(&self, other: &Cactus<T>) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests for !=
.
impl<T: Eq> Eq for Cactus<T>
[src]
impl<T: Hash> Hash for Cactus<T>
[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]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more