[][src]Crate trashmap

This crate provides TrashMap and TrashSet types, which allow you to directly use the key hash to operate with your entries. This is typically useful for when it's cheap to hold on to the hash value (e.g. within a single stack frame) and you don't want to incur the cost of rehashing on each access (but you can't use Entry as the map may change in the process)

The Trash type is used to represent computed hashes, lookups via Trash are cheap.

An example of using this would be to check for cycles when doing some kind of graph traversal:

use trashmap::TrashSet;
struct State {
   seen: TrashSet<str>,
}

impl State {
    fn step_into(&mut self, entry: &str) {
        let (id, empty) = self.seen.insert_check(entry);
        if !empty {
            panic!("found recursive loop!");
        }
        let children = lookup_children(entry);
        for child in children {
           self.step_into(child);
        }
        self.seen.remove(id);
    }
}

Structs

Trash

Trash is a hash, and can be used directly with TrashMap and TrashSet to interact with entries

TrashMap

A hash map that can operate on known hash values (Trash) instead of actual keys

TrashSet

A hash set that can operate on known hash values (Trash) instead of actual keys