Struct internment::LocalIntern
[−]
[src]
pub struct LocalIntern<T> { /* fields omitted */ }
A pointer to a thread-local interned object.
The interned object will be held in memory as long as the thread
is still running. Thus you can arrange a crude sort of arena
allocation by running code using LocalIntern
on a temporary
thread. Lifetime issues are as simple as when using Intern
.
LocalIntern
differs in that it is neigher Send
nor Share
, so
it cannot be used in a multithreaded manner. On the benefit side,
it is faster than Intern
, and the memory can be freed (by
running in a temporary thread).
Example
use internment::LocalIntern; let x = LocalIntern::new("hello"); let y = LocalIntern::new("world"); assert_ne!(x, y); assert_eq!(x, LocalIntern::new("hello")); assert_eq!(*x, "hello"); // dereference a LocalIntern like a pointer
Methods
impl<T: Eq + Hash + 'static> LocalIntern<T>
[src]
fn new(val: T) -> LocalIntern<T>
[src]
Intern a value in a thread-local way. If this value has not
previously been interned, then new
will allocate a spot for
the value on the heap. Otherwise, it will return a pointer to
the object previously allocated.
Note that LocalIntern::new
is a bit slow, since it needs to check
a HashMap
protected by a Mutex
.
fn num_objects_interned(&self) -> usize
[src]
See how many objects have been interned. This may be helpful in analyzing memory use.
Trait Implementations
impl<T> AsRef<T> for LocalIntern<T>
[src]
impl<T> Borrow<T> for LocalIntern<T>
[src]
impl<T> Deref for LocalIntern<T>
[src]
type Target = T
The resulting type after dereferencing.
fn deref(&self) -> &T
[src]
Dereferences the value.
impl<T: Debug> Debug for LocalIntern<T>
[src]
fn fmt(&self, f: &mut Formatter) -> Result<(), Error>
[src]
Formats the value using the given formatter.
impl<T: Display> Display for LocalIntern<T>
[src]
fn fmt(&self, f: &mut Formatter) -> Result<(), Error>
[src]
Formats the value using the given formatter. Read more
impl<T> Pointer for LocalIntern<T>
[src]
fn fmt(&self, f: &mut Formatter) -> Result<(), Error>
[src]
Formats the value using the given formatter.
impl<T: Eq + Hash + Default + 'static> Default for LocalIntern<T>
[src]
fn default() -> LocalIntern<T>
[src]
Returns the "default value" for a type. Read more
impl<T> Hash for LocalIntern<T>
[src]
The hash implementation returns the hash of the pointer value, not the hash of the value pointed to. This should be irrelevant, since there is a unique pointer for every value, but it is observable, since you could compare the hash of the pointer with hash of the data itself.
fn hash<H: Hasher>(&self, state: &mut H)
[src]
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl<T> PartialEq for LocalIntern<T>
[src]
fn eq(&self, other: &LocalIntern<T>) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests for !=
.
impl<T> Eq for LocalIntern<T>
[src]
impl<T> Clone for LocalIntern<T>
[src]
fn clone(&self) -> Self
[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl<T> Copy for LocalIntern<T>
[src]
An LocalIntern
is Copy
, which is unusal for a pointer. This
is safe because we never free the data pointed to by an
LocalIntern
until the thread itself is destroyed.
impl<T: Debug> Fits64 for LocalIntern<T>
[src]
unsafe fn from_u64(x: u64) -> Self
[src]
Convert back from a u64. This is unsafe, since it is only infallible (and lossless) if the u64
originally came from type Self
. Read more
fn to_u64(self) -> u64
[src]
Convert to a u64
. This should be infallible.
fn test_fits64(self) -> bool
[src]
verify that the conversion is lossless