Skip to content

BisetMap is a fast and thread-safe two-way hash map of sets for Rust.

License

Notifications You must be signed in to change notification settings

arash16/bisetmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crates.io Documentation

BisetMap

BisetMap is a fast and thread-safe two-way hash map of sets for Rust. It is best suited where you need to associate two collumns uniquely. Each key is associated to one or more other unique values.

The structure is interior mutable and all operations are thread safe. Each clone provides access to the same underlying data. Serialize and Deserialize from serde are also implemented.

Usage

To use BisetMap in your Rust project, add bisetmap = 0.1 to the dependencies section of your Cargo.toml. See the docs for more details and example code.

Examples

use bisetmap::BisetMap;

let subscriptions = BisetMap::new();

// insert client-ids and subscription topics
subscriptions.insert("Bob", "Tech");
subscriptions.insert("Bob", "Math");
subscriptions.insert("Alice", "Tech");
subscriptions.insert("Alice", "Romance");

// retrieve topic by client-id (left to right)
assert_eq!(subscriptions.get(&"Bob"), ["Math", "Tech"]);
assert_eq!(subscriptions.get(&"Alice"), ["Romance", "Tech"]);

// retrieve clients by topic (right to left)
assert_eq!(subscriptions.rev_get(&"Tech"), ["Alice", "Bob"]);
assert_eq!(subscriptions.rev_get(&"Math"), ["Bob"]);

// check membership
assert!(subscriptions.contains(&"Bob", &"Math"));
assert!(!subscriptions.contains(&"Bob", &"Romance"));

// check key/value existence
assert!(subscriptions.key_exists(&"Alice"));
assert!(subscriptions.value_exists(&"Tech"));

License

BisetMap is licensed under the MIT license.

About

BisetMap is a fast and thread-safe two-way hash map of sets for Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages