Struct intern_arc::Interned[][src]

pub struct Interned<T: ?Sized> { /* fields omitted */ }

Implementations

impl<T: ?Sized> Interned<T>[src]

An interned value

This type works very similar to an Arc with the difference that it has no concept of weak references. They are not needed because interned values must not be modified, so reference cycles cannot be constructed. One reference is held by the interner that created this value as long as that interner lives.

Keeping interned values around does not keep the interner alive: once the last reference to the interner is dropped, it will release its existing interned values, so the backing memory will be released once each of the interned values is no longer referenced through any Interned instances. (Interned keeps a Weak reference to the interner that created it, so it will prevent the ArcInner from being deallocated while it lives.)

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

Obtain current number of references, including this one, using Ordering::Relaxed. This means that reads and writes of your code may be freely reordered around this read, there is no synchronisation with other threads.

The value will always be at least 1. If the value is 1, this means that the interner which produced this reference has been dropped; in this case you are still free to use this reference in any way you like.

Trait Implementations

impl<T: ?Sized> AsRef<T> for Interned<T>[src]

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

impl<T: ?Sized> Clone for Interned<T>[src]

impl<T: ?Sized + Debug> Debug for Interned<T>[src]

impl<T: ?Sized> Deref for Interned<T>[src]

type Target = T

The resulting type after dereferencing.

impl<T: ?Sized + Display> Display for Interned<T>[src]

impl<T: ?Sized> Drop for Interned<T>[src]

impl<T: ?Sized + Eq> Eq for Interned<T>[src]

impl<T: ?Sized + Hash> Hash for Interned<T>[src]

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

impl<T: ?Sized + PartialEq> PartialEq<Interned<T>> for Interned<T>[src]

impl<T: ?Sized + PartialOrd> PartialOrd<Interned<T>> for Interned<T>[src]

impl<T: ?Sized> Pointer for Interned<T>[src]

impl<T: ?Sized + Sync + Send> Send for Interned<T>[src]

impl<T: ?Sized + Sync + Send> Sync for Interned<T>[src]

Auto Trait Implementations

impl<T: ?Sized> RefUnwindSafe for Interned<T> where
    T: RefUnwindSafe

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

impl<T: ?Sized> UnwindSafe for Interned<T> where
    T: RefUnwindSafe

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> ToString for T where
    T: Display + ?Sized
[src]

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.