Crate contrail[][src]

Backtrackable primitives and data structures.

Examples

use contrail::{Stored, TrailBuilder, Trailed};

// setup the trail
let mut builder = TrailBuilder::new();
let trailed_counter = Trailed::new(&mut builder, 0);
let stored_counter = Stored::new(&mut builder, 0);
let mut trail = builder.finish();

// push a new level onto the trail
trail.new_level();

// increment each counter
trailed_counter.update(&mut trail, |x| x + 1);
stored_counter.update(&mut trail, |x| x + 1);
assert_eq!(trailed_counter.get(&trail), 1);
assert_eq!(stored_counter.get(&trail), 1);

// pop the previous level from the trail
trail.undo_level();

// the trailed counter is reset to its value when new_level() was called
// the stored counter is unchanged
assert_eq!(trailed_counter.get(&trail), 0);
assert_eq!(stored_counter.get(&trail), 1);

Modules

collections

Collections built out of trailed and stored primitives.

mem

Low-level memory management.

Structs

Stored
StoredArray
Trail

The trail itself.

TrailBuilder

A builder to create a Trail.

Trailed

A generic trailed value.

TrailedArray