pagedelta 0.2.0

Deltas: LLAMA's primary units of data.
Documentation

pagedelta

LLAMA's primary unit of data.


Example Usage: Building a PageState chain and iterating it

let pid = AtomicU32::new(0);
let mut page_state = DeltaChain::new(BasePage::small(), pid.load(Ordering::Acquire));

page_state.push(UpdateDelta::new_shared_delta(
    b"first",
    0, // Placeholder for in memory prior state pointer
    pid.load(Ordering::Acquire),
));

page_state.push(UpdateDelta::new_shared_delta(
    b"second",
    1,
    pid.load(Ordering::Acquire),
));

page_state.push(UpdateDelta::new_shared_delta(
    b"third",
    1,
    pid.load(Ordering::Acquire),
));

let place_holder_offset: u64 = 0;
page_state.flush(place_holder_offset);

page_state.partial_swap(PartialSwapDelta::new_shared_delta(
    b"evict",
    0,
    0,
    pid.load(Ordering::Acquire),
));

let payloads = page_state
    .iter_linear()
    .find(|f| f.delta_type() == DeltaKind::Update)
    .expect("Found Update Delta");

let delta = downcast_delta::<UpdateDelta>(payloads).expect("Successfull downcast");

assert_eq!(delta.delta_type(), DeltaKind::Update);

for node in page_state.iter_full() {
    println!("{:?}", node.delta_type());
}