use deferred_map::{DeferredMap, Key};
fn main() {
let mut map = DeferredMap::new();
println!("Allocating handles...");
let handle1 = map.allocate_handle();
let handle2 = map.allocate_handle();
let handle3 = map.allocate_handle();
let key1 = handle1.key();
let key2 = handle2.key();
let key3 = handle3.key();
println!("Inserting values...");
map.insert(handle1, "Alice");
map.insert(handle2, "Bob");
map.insert(handle3, "Charlie");
println!("\nAccessing values:");
println!("Key1: {:?}", map.get(key1));
println!("Key2: {:?}", map.get(key2));
println!("Key3: {:?}", map.get(key3));
if let Some(val) = map.get_mut(key2) {
*val = "Bob Updated";
}
println!("Key2 after update: {:?}", map.get(key2));
println!("\nIterating:");
for (key, value) in map.iter() {
println!("Key: {:?}, Value: {}", key, value);
}
println!("\nRemoving Key1...");
let removed = map.remove(key1);
println!("Removed: {:?}", removed);
println!("Key1 exists? {}", map.contains_key(key1));
println!("\nAllocating new handle (should reuse slot)...");
let handle4 = map.allocate_handle();
let key4 = handle4.key();
map.insert(handle4, "Dave");
println!("Key1: index={}, gen={}", key1.index(), key1.generation());
println!("Key4: index={}, gen={}", key4.index(), key4.generation());
println!("Key4 value: {:?}", map.get(key4));
println!("Accessing with old Key1: {:?}", map.get(key1));
}