use fastskip::ConcurrentSkipList;
fn main() {
let memtable = ConcurrentSkipList::new();
memtable.insert(b"map", b"hello world");
memtable.insert(b"map2", b"hello world2");
memtable.insert(b"map3", b"hello world3");
memtable.delete(b"map");
match memtable.get(b"map") {
Some((value, is_tombstone)) => {
let readable = std::str::from_utf8(value).unwrap();
println!("Value for 'map': {}", readable);
println!("Is tombstone: {}", is_tombstone); }
None => println!("Key 'map' not found"),
}
println!("get_live: {:?}", memtable.get_live(b"map"));
println!("Memory usage: {} bytes", memtable.memory_usage());
println!("Live entries: {}", memtable.len());
let (frozen, fresh) = memtable.seal().unwrap();
for entry in frozen.iter() {
if entry.is_tombstone {
println!(
"SSTable: DELETE {:?}",
std::str::from_utf8(entry.key).unwrap()
);
} else {
println!(
"SSTable: PUT {:?} = {:?}",
std::str::from_utf8(entry.key).unwrap(),
std::str::from_utf8(entry.value).unwrap()
);
}
}
println!(
"\nFrozen memory before drop: {} bytes",
frozen.memory_usage()
);
drop(frozen);
println!("Frozen dropped — all memory reclaimed");
println!(
"Fresh memtable: {} entries, {} bytes",
fresh.len(),
fresh.memory_usage()
);
}