Crate trashmap

Source
Expand description

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