Skip to main content

Crate any_intern

Crate any_intern 

Source
Expand description

§any-intern

any-intern is a Rust crate for efficient interning of values. It provides flexible interners for various use cases, ensuring that each unique value is stored only once, saving memory and improving lookup efficiency.

§Examples

§Interner

A generic interner for storing and deduplicating values of various types.

use any_intern::Interner;

#[derive(PartialEq, Eq, Hash, Debug)]
struct A(u32);

#[derive(PartialEq, Eq, Hash, Debug)]
struct B(u32);

let interner = Interner::new();

// Interning static types
let a1 = interner.intern_static(A(42));
let a2 = interner.intern_static(A(42));
let b1 = interner.intern_static(B(42));
assert_eq!(a1, a2); // Same value, same reference
assert_ne!(a1.erased_raw(), b1.erased_raw()); // Different value, different reference

// Interning `Dropless` types
let s1 = interner.intern_dropless("hello");
let s2 = interner.intern_dropless(&*String::from("hello"));
assert_eq!(s1, s2); // Same string, same reference

// Interning `Display` types as formatted string
let f1 = interner.intern_formatted_str(&42, 10).unwrap();
assert_eq!(&*f1, "42");

§AnyInterner

A type-erased interner for storing and deduplicating values of a single type.

use any_intern::AnyInterner;

#[derive(PartialEq, Eq, Hash, Debug)]
struct A(u32);

let interner = AnyInterner::of::<A>();
unsafe {
    let a1 = interner.intern(A(42));
    let a2 = interner.intern(A(42));
    assert_eq!(a1, a2); // Same value, same reference
}

§DroplessInterner

An interner for storing and deduplicating values without requiring ownership.

use any_intern::DroplessInterner;

let interner = DroplessInterner::new();
let hello = interner.intern("hello");
let another_hello = interner.intern(&*String::from("hello"));
assert_eq!(hello, another_hello); // Same value, same reference

Structs§

AnyArena
AnyInternSet
A type-erased interning set for storing and deduplicating values of a single type without interior mutability.
AnyInterner
A type-erased interner for storing and deduplicating values of a single type.
DroplessInternSet
A dropless interner.
DroplessInterner
An interner for storing and deduplicating values without requiring ownership.
Interned
Due to [Prv], clients cannot make this type directly, but still allowed to use pattern match.
Interner
A generic interner for storing and deduplicating values of various types.
RawInterned
A same type with the Interned, but with erased lifetime.
TypedArena
UnsafeLock

Traits§

Dropless
A trait for types that can be stored in a dropless interner.