use deferred_map::{DeferredMap, Key, SecondaryMap};
fn main() {
let mut users = DeferredMap::new();
let mut scores = SecondaryMap::new();
let h_alice = users.allocate_handle();
let k_alice = h_alice.key();
users.insert(h_alice, "Alice");
scores.insert(k_alice, 100);
let h_bob = users.allocate_handle();
let k_bob = h_bob.key();
users.insert(h_bob, "Bob");
scores.insert(k_bob, 85);
println!("Users and Scores:");
for (key, name) in users.iter() {
if let Some(score) = scores.get(key) {
println!("{} has score: {}", name, score);
} else {
println!("{} has no score", name);
}
}
println!("\nRemoving Alice from primary map...");
users.remove(k_alice);
println!(
"Can we still access Alice's score with the old key? {:?}",
scores.get(k_alice)
);
println!("Is Alice in users map? {}", users.contains_key(k_alice));
scores.remove(k_alice);
println!("After cleanup, Alice's score: {:?}", scores.get(k_alice));
println!("\nAdding Charlie (reuses Alice's slot)...");
let h_charlie = users.allocate_handle();
let k_charlie = h_charlie.key();
users.insert(h_charlie, "Charlie");
println!(
"Alice Key: idx={}, gen={}",
k_alice.index(),
k_alice.generation()
);
println!(
"Charlie Key: idx={}, gen={}",
k_charlie.index(),
k_charlie.generation()
);
scores.insert(k_charlie, 95);
println!("Charlie's score: {:?}", scores.get(k_charlie));
println!("Accessing with Alice's old key: {:?}", scores.get(k_alice));
}