[][src]Struct scc::Accessor

pub struct Accessor<'a, K: Eq + Hash + Sync, V: Sync, H: BuildHasher> { /* fields omitted */ }

Accessor owns a key-value pair in the HashMap.

It is !Send, thus disallowing other threads to have references to it. It acquires an exclusive lock on the cell managing the key. Instantiating multiple Accessor of Scanner instances in a thread poses a possibility of deadlock.

Implementations

impl<'a, K: Eq + Hash + Sync, V: Sync, H: BuildHasher> Accessor<'a, K, V, H>[src]

pub fn get(&'a self) -> (&'a K, &'a mut V)[src]

Returns a reference to the key-value pair.

Examples

use scc::HashMap;
use std::collections::hash_map::RandomState;

let hashmap: HashMap<u64, u32, RandomState> = HashMap::new(0, RandomState::new());

let result = hashmap.get(&1);
assert!(result.is_none());

let result = hashmap.insert(1, 0);
if let Ok(result) = result {
    assert_eq!(result.get(), (&1, &mut 0));
    (*result.get().1) = 2;
}

let result = hashmap.get(&1);
assert_eq!(result.unwrap().get(), (&1, &mut 2));

pub fn erase(self) -> Option<V>[src]

Erases the key-value pair owned by the Accessor.

Examples

use scc::HashMap;
use std::collections::hash_map::RandomState;

let hashmap: HashMap<u64, u32, RandomState> = HashMap::new(0, RandomState::new());

let result = hashmap.insert(1, 0);
if let Ok(result) = result {
    assert_eq!(result.get(), (&1, &mut 0));
    let result = result.erase();
    assert_eq!(result.unwrap(), 0);
}

let result = hashmap.get(&1);
assert!(result.is_none());

Auto Trait Implementations

impl<'a, K, V, H> RefUnwindSafe for Accessor<'a, K, V, H> where
    H: RefUnwindSafe,
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V, H> !Send for Accessor<'a, K, V, H>

impl<'a, K, V, H> !Sync for Accessor<'a, K, V, H>

impl<'a, K, V, H> Unpin for Accessor<'a, K, V, H>

impl<'a, K, V, H> UnwindSafe for Accessor<'a, K, V, H> where
    H: RefUnwindSafe,
    K: RefUnwindSafe,
    V: 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> Pointable for T[src]

type Init = T

The type for initializers.

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.