Struct intern_arc::OrdInterner[][src]

pub struct OrdInterner<T: ?Sized + Ord> { /* fields omitted */ }

Interner for values with a total order

The interner is cheaply cloneable by virtue of keeping the underlying storage in an Arc. Once the last reference to this interner is dropped, it will clear its backing storage and release all references to the interned values it has created that are still live. Those values remain fully operational until dropped. Memory for the values themselves is freed for each value individually once its last reference is dropped. The interner’s ArcInner memory will only be deallocated once the last interned value has been dropped (this is less than hundred bytes).

Implementations

impl<T: ?Sized + Ord> OrdInterner<T>[src]

pub fn new() -> Self[src]

pub fn len(&self) -> usize[src]

Returns the number of objects currently kept in this interner.

pub fn is_empty(&self) -> bool[src]

Returns true when this interner doesn’t hold any values.

pub fn intern_ref(&self, value: &T) -> InternedOrd<T> where
    T: ToOwned,
    T::Owned: Into<Box<T>>, 
[src]

Intern a value from a shared reference by allocating new memory for it.

use intern_arc::{OrdInterner, InternedOrd};

let strings = OrdInterner::<str>::new();
let i: InternedOrd<str> = strings.intern_ref("hello world!");

pub fn intern_box(&self, value: Box<T>) -> InternedOrd<T>[src]

Intern a value from an owned reference without allocating new memory for it.

use intern_arc::{OrdInterner, InternedOrd};

let strings = OrdInterner::<str>::new();
let hello: Box<str> = "hello world!".into();
let i: InternedOrd<str> = strings.intern_box(hello);

(This also works nicely with a String that can be turned .into() a Box.)

pub fn intern_sized(&self, value: T) -> InternedOrd<T> where
    T: Sized
[src]

Intern a sized value, allocating heap memory for it.

use intern_arc::{OrdInterner, InternedOrd};

let arrays = OrdInterner::<[u8; 1000]>::new();
let i: InternedOrd<[u8; 1000]> = arrays.intern_sized([0; 1000]);

Trait Implementations

impl<T: ?Sized + Ord> Clone for OrdInterner<T>[src]

impl<T: ?Sized + Ord> Default for OrdInterner<T>[src]

Auto Trait Implementations

impl<T> !RefUnwindSafe for OrdInterner<T>

impl<T: ?Sized> Send for OrdInterner<T> where
    T: Send + Sync

impl<T: ?Sized> Sync for OrdInterner<T> where
    T: Send + Sync

impl<T: ?Sized> Unpin for OrdInterner<T>

impl<T> !UnwindSafe for OrdInterner<T>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.