Crates.io | intern-all |
lib.rs | intern-all |
version | 0.4.1 |
source | src |
created_at | 2023-11-18 15:15:23.345999 |
updated_at | 2024-02-23 18:11:41.090424 |
description | A safe and predictable interner for data of mixed and arbitrary type |
homepage | |
repository | https://github.com/lbfalvy/intern-all |
max_upload_size | |
id | 1040564 |
size | 21,070 |
An interner for data of mixed / arbitrary type. It uses weak references and the default allocator so it can be used in long-running processes.
use std::env;
use std::path::PathBuf;
use intern_all::{i, Tok};
// Intern a value
let a: Tok<String> = i("foo");
// Intern a path
let b: Tok<PathBuf> = i(&env::current_dir().unwrap());
Some convenience methods are also provided to make working with lists easier
use intern_all::{i, ibv, iv, Tok};
// Intern a list as a slice of tokens
let v1: Tok<Vec<Tok<String>>> = i(&[i("bar"), i("quz"), i("quux")][..]);
// Intern a list of internable values
let v2: Tok<Vec<Tok<String>>> =
iv(["bar".to_string(), "quz".to_string(), "quux".to_string()]);
// Intern a list of the borrowed form of internable values
let v3: Tok<Vec<Tok<String>>> = ibv(["bar", "quz", "quux"]);
assert!(v1 == v2 && v2 == v3)
The interner uses weak references but the unreferenced values still take up
space in the token table. To avoid a memory leak, you can periodically
sremove entries referring to unreferenced values from the interner with
sweep
or sweep_t
.
use intern_all::{sweep, sweep_t};
// use this for general housekeeping
sweep();
// use this if a lot of temporary values of a particular interned type
// had been dropped recently
sweep_t::<String>();