slabmap 0.1.0

HashMap-like collection that automatically determines the key.
Documentation
fn main() {
    example_main();
    example_retain();
    example_len();
    example_insert();
    example_insert_with_key();
}

fn example_main() {
    use slabmap::SlabMap;

    let mut s = SlabMap::new();
    let key_a = s.insert("aaa");
    let key_b = s.insert("bbb");

    assert_eq!(s[key_a], "aaa");
    assert_eq!(s[key_b], "bbb");

    s.optimize();
    for (key, value) in &s {
        println!("{} -> {}", key, value);
    }

    let value = s.remove(key_a);
    assert_eq!(value, Some("aaa"));
}

fn example_retain() {
    use slabmap::SlabMap;

    let mut s = SlabMap::new();
    s.insert(10);
    s.insert(15);
    s.insert(20);
    s.insert(25);

    s.retain(|_idx, x| *x % 2 == 0);

    let value: Vec<_> = s.values().cloned().collect();
    assert_eq!(value, vec![10, 20]);
}

fn example_len() {
    use slabmap::SlabMap;

    let mut s = SlabMap::new();
    assert_eq!(s.len(), 0);

    let key1 = s.insert(10);
    let key2 = s.insert(15);

    assert_eq!(s.len(), 2);

    s.remove(key1);
    assert_eq!(s.len(), 1);

    s.remove(key2);
    assert_eq!(s.len(), 2);
}

fn example_insert() {
    use slabmap::SlabMap;

    let mut s = SlabMap::new();
    let key_abc = s.insert("abc");
    let key_xyz = s.insert("xyz");

    assert_eq!(s[key_abc], "abc");
    assert_eq!(s[key_xyz], "xyz");
}

fn example_insert_with_key() {
    use slabmap::SlabMap;

    let mut s = SlabMap::new();
    let key = s.insert_with_key(|key| format!("my key is {}", key));

    assert_eq!(s[key], format!("my key is {}", key));
}