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]

[src]

Return an empty cactus stack node.

[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());

[src]

How many items are there in this cactus stack?

[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]);

[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());

[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);

Important traits for CactusNodesIter<'a, 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)));

Important traits for CactusValsIter<'a, 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]);

[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]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl<T: Default> Default for Cactus<T>
[src]

[src]

Returns the "default value" for a type. Read more

impl<T: PartialEq> PartialEq for Cactus<T>
[src]

[src]

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

1.0.0
[src]

This method tests for !=.

impl<T: Eq> Eq for Cactus<T>
[src]

impl<T: Hash> Hash for Cactus<T>
[src]

[src]

Feeds this value into the given [Hasher]. Read more

1.3.0
[src]

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

impl<T: Debug> Debug for Cactus<T>
[src]

[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl<T> !Send for Cactus<T>

impl<T> !Sync for Cactus<T>