[][src]Struct abi_stable::std_types::map::RHashMap

#[repr(C)]pub struct RHashMap<K, V, S = RandomState> { /* fields omitted */ }

An ffi-safe hashmap,which wraps std::collections::HashMap<K,V,S>, only requiring the K: Eq + Hash bounds when constructing it.

Most of the API in HashMap is implemented here,including the Entry API.

Example

This example demonstrates how one can use the RHashMap as a dictionary.

use abi_stable::std_types::{RHashMap,Tuple2,RString,RSome};

let mut map=RHashMap::new();

map.insert("dictionary","A book/document containing definitions of words");
map.insert("bibliophile","Someone who loves books.");
map.insert("pictograph","A picture representating of a word.");

assert_eq!(
    map["dictionary"],
    "A book/document containing definitions of words",
);

assert_eq!(
    map.remove("bibliophile"),
    RSome("Someone who loves books."),
);

assert_eq!(
    map.get("pictograph"),
    Some(&"A picture representating of a word."),
);

for Tuple2(k,v) in map {
    assert!( k=="dictionary" || k=="pictograph" );

    assert!(
        v=="A book/document containing definitions of words" ||
        v=="A picture representating of a word.",
        "{}=>{}",
        k,v
    );
}

Implementations

impl<K, V> RHashMap<K, V, RandomState>[src]

pub fn new() -> RHashMap<K, V> where
    Self: Default
[src]

Constructs an empty RHashMap.

Example

use abi_stable::std_types::{RHashMap,RString};

let mut map=RHashMap::<RString,u32>::new();
assert!(map.is_empty());
map.insert("Hello".into(),10);
assert_eq!(map.is_empty(),false);
 

pub fn with_capacity(capacity: usize) -> RHashMap<K, V> where
    Self: Default
[src]

Constructs an empty RHashMap with at least the passed capacity.

Example

use abi_stable::std_types::{RHashMap,RString};

let mut map=RHashMap::<RString,u32>::with_capacity(10);
assert!(map.capacity()>=10);
 

impl<K, V, S> RHashMap<K, V, S>[src]

pub fn with_hasher(hash_builder: S) -> RHashMap<K, V, S> where
    K: Eq + Hash,
    S: BuildHasher + Default
[src]

Constructs an empty RHashMap with the passed hash_builder to hash the keys.

Example

use abi_stable::std_types::{RHashMap,RString};
use std::collections::hash_map::RandomState;

let s = RandomState::new();
let mut map=RHashMap::<RString,u32,_>::with_hasher(s);
assert!(map.is_empty());
map.insert("Hello".into(),10);
assert_eq!(map.is_empty(),false);
 

pub fn with_capacity_and_hasher(
    capacity: usize,
    hash_builder: S
) -> RHashMap<K, V, S> where
    K: Eq + Hash,
    S: BuildHasher + Default
[src]

Constructs an empty RHashMap with at least the passed capacity, and the passed hash_builder to hash the keys.

Example

use abi_stable::std_types::{RHashMap,RString};
use std::collections::hash_map::RandomState;

let s = RandomState::new();
let mut map=RHashMap::<RString,u32,_>::with_capacity_and_hasher(10,s);
assert!(map.capacity()>=10);
 

impl<K, V, S> RHashMap<K, V, S>[src]

pub fn contains_key<Q: ?Sized>(&self, query: &Q) -> bool where
    K: Borrow<Q>,
    Q: Hash + Eq
[src]

Returns whether the map associates a value with the key.

Example

use abi_stable::std_types::{RHashMap,RString};

let mut map=RHashMap::<RString,u32>::new();
assert_eq!(map.contains_key("boo"),false);
map.insert("boo".into(),0);
assert_eq!(map.contains_key("boo"),true);

pub fn get<Q: ?Sized>(&self, query: &Q) -> Option<&V> where
    K: Borrow<Q>,
    Q: Hash + Eq
[src]

Returns a reference to the value associated with the key.

Returns a None if there is no entry for the key.

Example

use abi_stable::std_types::{RHashMap,RString};

let mut map=RHashMap::<RString,u32>::new();
assert_eq!(map.get("boo"), None);
map.insert("boo".into(),0);
assert_eq!(map.get("boo"), Some(&0));

pub fn get_mut<Q: ?Sized>(&mut self, query: &Q) -> Option<&mut V> where
    K: Borrow<Q>,
    Q: Hash + Eq
[src]

Returns a mutable reference to the value associated with the key.

Returns a None if there is no entry for the key.

Example

use abi_stable::std_types::{RHashMap,RString};

let mut map=RHashMap::<RString,u32>::new();
assert_eq!(map.get_mut("boo"), None);
map.insert("boo".into(),0);
assert_eq!(map.get_mut("boo"), Some(&mut 0));

pub fn remove<Q: ?Sized>(&mut self, query: &Q) -> ROption<V> where
    K: Borrow<Q>,
    Q: Hash + Eq
[src]

Removes the value associated with the key.

Example

use abi_stable::std_types::{RHashMap,RSome,RNone};

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.remove(&0), RSome(1));
assert_eq!(map.remove(&0), RNone);

assert_eq!(map.remove(&3), RSome(4));
assert_eq!(map.remove(&3), RNone);

pub fn remove_entry<Q: ?Sized>(&mut self, query: &Q) -> ROption<Tuple2<K, V>> where
    K: Borrow<Q>,
    Q: Hash + Eq
[src]

Removes the entry for the key.

Example

use abi_stable::std_types::{RHashMap,RSome,RNone,Tuple2};

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.remove_entry(&0), RSome(Tuple2(0,1)));
assert_eq!(map.remove_entry(&0), RNone);

assert_eq!(map.remove_entry(&3), RSome(Tuple2(3,4)));
assert_eq!(map.remove_entry(&3), RNone);

impl<K, V, S> RHashMap<K, V, S>[src]

pub fn contains_key_p(&self, key: &K) -> bool[src]

Returns whether the map associates a value with the key.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();
assert_eq!(map.contains_key(&11),false);
map.insert(11,0);
assert_eq!(map.contains_key(&11),true);

pub fn get_p(&self, key: &K) -> Option<&V>[src]

Returns a reference to the value associated with the key.

Returns a None if there is no entry for the key.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();
assert_eq!(map.get(&12), None);
map.insert(12,0);
assert_eq!(map.get(&12), Some(&0));

pub fn get_mut_p(&mut self, key: &K) -> Option<&mut V>[src]

Returns a mutable reference to the value associated with the key.

Returns a None if there is no entry for the key.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();
assert_eq!(map.get_mut(&12), None);
map.insert(12,0);
assert_eq!(map.get_mut(&12), Some(&mut 0));

pub fn remove_p(&mut self, key: &K) -> ROption<V>[src]

Removes the value associated with the key.

Example

use abi_stable::std_types::{RHashMap,RSome,RNone};

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.remove_p(&0), RSome(1));
assert_eq!(map.remove_p(&0), RNone);

assert_eq!(map.remove_p(&3), RSome(4));
assert_eq!(map.remove_p(&3), RNone);

pub fn remove_entry_p(&mut self, key: &K) -> ROption<Tuple2<K, V>>[src]

Removes the entry for the key.

Example

use abi_stable::std_types::{RHashMap,RSome,RNone,Tuple2};

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.remove_entry_p(&0), RSome(Tuple2(0,1)));
assert_eq!(map.remove_entry_p(&0), RNone);

assert_eq!(map.remove_entry_p(&3), RSome(Tuple2(3,4)));
assert_eq!(map.remove_entry_p(&3), RNone);

pub fn index_p(&self, key: &K) -> &V[src]

Returns a reference to the value associated with the key.

Panics

Panics if the key is not associated with a value.

Example

use abi_stable::std_types::RHashMap;

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.index_p(&0),&1);
assert_eq!(map.index_p(&3),&4);
This example panics
use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

assert_eq!(map.index_p(&0),&1);

pub fn index_mut_p(&mut self, key: &K) -> &mut V[src]

Returns a mutable reference to the value associated with the key.

Panics

Panics if the key is not associated with a value.

Example

use abi_stable::std_types::RHashMap;

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.index_mut_p(&0),&mut 1);
assert_eq!(map.index_mut_p(&3),&mut 4);
This example panics
use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

assert_eq!(map.index_mut_p(&0),&mut 1);

pub fn insert(&mut self, key: K, value: V) -> ROption<V>[src]

Inserts a value into the map,associating it with a key,returning the previous value.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

map.insert(0,1);
map.insert(2,3);

assert_eq!(map[&0],1);
assert_eq!(map[&2],3);

pub fn reserve(&mut self, reserved: usize)[src]

Reserves enough space to insert reserved extra elements without reallocating.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();
map.reserve(10);

pub fn clear(&mut self)[src]

Removes all the entries in the map.

Example

use abi_stable::std_types::RHashMap;

let mut map=vec![(0,1),(3,4)].into_iter().collect::<RHashMap<u32,u32>>();

assert_eq!(map.contains_key(&0),true);
assert_eq!(map.contains_key(&3),true);

map.clear();

assert_eq!(map.contains_key(&0),false);
assert_eq!(map.contains_key(&3),false);

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

Returns the amount of entries in the map.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

assert_eq!(map.len(),0);
map.insert(0,1);
assert_eq!(map.len(),1);
map.insert(2,3);
assert_eq!(map.len(),2);

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

Returns the capacity of the map,the amount of elements it can store without reallocating.

Note that this is a lower bound,since hash maps don't necessarily have an exact capacity.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::with_capacity(4);

assert!(map.capacity()>=4);

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

Returns whether the map contains any entries.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

assert_eq!(map.is_empty(),true);
map.insert(0,1);
assert_eq!(map.is_empty(),false);

pub fn iter(&self) -> Iter<'_, K, V>[src]

Iterates over the entries in the map,with references to the values in the map.

This returns a type that implements Iterator<Item= Tuple2< &K, &V > > + !Send + !Sync + Clone

Example

use abi_stable::std_types::{RHashMap,Tuple2};

let mut map=RHashMap::<u32,u32>::new();

map.insert(0,1);
map.insert(3,4);

let mut list=map.iter().collect::<Vec<_>>();
list.sort();
assert_eq!( list, vec![Tuple2(&0,&1),Tuple2(&3,&4)] );

pub fn iter_mut(&mut self) -> IterMut<'_, K, V>[src]

Iterates over the entries in the map,with mutable references to the values in the map.

This returns a type that implements Iterator<Item= Tuple2< &K, &mut V > > + !Send + !Sync

Example

use abi_stable::std_types::{RHashMap,Tuple2};

let mut map=RHashMap::<u32,u32>::new();

map.insert(0,1);
map.insert(3,4);

let mut list=map.iter_mut().collect::<Vec<_>>();
list.sort();
assert_eq!( list, vec![Tuple2(&0,&mut 1),Tuple2(&3,&mut  4)] );

pub fn drain(&mut self) -> Drain<'_, K, V>[src]

Clears the map,returning an iterator over all the entries that were removed.

This returns a type that implements Iterator<Item= Tuple2< K, V > > + !Send + !Sync

Example

use abi_stable::std_types::{RHashMap,Tuple2};

let mut map=RHashMap::<u32,u32>::new();

map.insert(0,1);
map.insert(3,4);

let mut list=map.drain().collect::<Vec<_>>();
list.sort();
assert_eq!( list, vec![Tuple2(0,1),Tuple2(3,4)] );

assert!(map.is_empty());

pub fn entry(&mut self, key: K) -> REntry<'_, K, V>[src]

Gets a handle into the entry in the map for the key, that allows operating directly on the entry.

Example

use abi_stable::std_types::RHashMap;

let mut map=RHashMap::<u32,u32>::new();

// Inserting an entry that wasn't there before.
{
    let mut entry=map.entry(0);
    assert_eq!(entry.get(),None);
    assert_eq!(entry.or_insert(3),&mut 3);
    assert_eq!(map.get(&0),Some(&3));
}

Trait Implementations

impl<K, V, S> Clone for RHashMap<K, V, S> where
    K: Clone,
    V: Clone,
    Self: Default
[src]

impl<K, V, S> Debug for RHashMap<K, V, S> where
    K: Debug,
    V: Debug
[src]

impl<K, V, S> Default for RHashMap<K, V, S> where
    K: Eq + Hash,
    S: BuildHasher + Default
[src]

impl<'de, K, V, S> Deserialize<'de> for RHashMap<K, V, S> where
    K: Deserialize<'de>,
    V: Deserialize<'de>,
    Self: Default
[src]

impl<K, V, S> Eq for RHashMap<K, V, S> where
    K: Eq,
    V: Eq
[src]

impl<K, V, S> Extend<(K, V)> for RHashMap<K, V, S>[src]

impl<K, V, S> Extend<Tuple2<K, V>> for RHashMap<K, V, S>[src]

impl<K, V, S> From<HashMap<K, V, S>> for RHashMap<K, V, S> where
    Self: Default
[src]

impl<K, V, S> FromIterator<(K, V)> for RHashMap<K, V, S> where
    Self: Default
[src]

impl<K, V, S> FromIterator<Tuple2<K, V>> for RHashMap<K, V, S> where
    Self: Default
[src]

impl<K, V, S> GetStaticEquivalent_ for RHashMap<K, V, S> where
    K: __StableAbi,
    V: __StableAbi
[src]

impl<K, Q: ?Sized, V, S, '_> Index<&'_ Q> for RHashMap<K, V, S> where
    K: Borrow<Q>,
    Q: Eq + Hash
[src]

type Output = V

The returned type after indexing.

impl<K, Q: ?Sized, V, S, '_> IndexMut<&'_ Q> for RHashMap<K, V, S> where
    K: Borrow<Q>,
    Q: Eq + Hash
[src]

impl<K, V, S> Into<HashMap<K, V, S>> for RHashMap<K, V, S> where
    K: Eq + Hash,
    S: BuildHasher + Default
[src]

impl<K, V, S> IntoIterator for RHashMap<K, V, S>[src]

This returns an Iterator<Item= Tuple2< K, V > >+!Send+!Sync

type Item = Tuple2<K, V>

The type of the elements being iterated over.

type IntoIter = IntoIter<K, V>

Which kind of iterator are we turning this into?

impl<'a, K, V, S> IntoIterator for &'a RHashMap<K, V, S>[src]

This returns an Iterator<Item= Tuple2< &K, &V > > + !Send + !Sync + Clone

type Item = Tuple2<&'a K, &'a V>

The type of the elements being iterated over.

type IntoIter = Iter<'a, K, V>

Which kind of iterator are we turning this into?

impl<'a, K, V, S> IntoIterator for &'a mut RHashMap<K, V, S>[src]

This returns a type that implements Iterator<Item= Tuple2< &K, &mut V > > + !Send + !Sync

type Item = Tuple2<&'a K, &'a mut V>

The type of the elements being iterated over.

type IntoIter = IterMut<'a, K, V>

Which kind of iterator are we turning this into?

impl<K, V, S> PartialEq<RHashMap<K, V, S>> for RHashMap<K, V, S> where
    K: PartialEq,
    V: PartialEq
[src]

impl<K, V, S> Send for RHashMap<K, V, S> where
    HashMap<K, V, S>: Send
[src]

impl<K, V, S> Serialize for RHashMap<K, V, S> where
    K: Serialize,
    V: Serialize
[src]

impl<K, V, S> StableAbi for RHashMap<K, V, S> where
    K: __StableAbi,
    V: __StableAbi
[src]

type IsNonZeroType = False

Whether this type has a single invalid bit-pattern. Read more

impl<K, V, S> Sync for RHashMap<K, V, S> where
    HashMap<K, V, S>: Sync
[src]

Auto Trait Implementations

impl<K, V, S> RefUnwindSafe for RHashMap<K, V, S> where
    K: RefUnwindSafe,
    S: RefUnwindSafe,
    V: RefUnwindSafe

impl<K, V, S> Unpin for RHashMap<K, V, S>

impl<K, V, S> UnwindSafe for RHashMap<K, V, S> where
    K: RefUnwindSafe + UnwindSafe,
    S: RefUnwindSafe + UnwindSafe,
    V: RefUnwindSafe + UnwindSafe

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<'a, T> BorrowOwned<'a> for T where
    T: 'a + Clone
[src]

type ROwned = T

The owned type, stored in RCow::Owned

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

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

impl<T> GetWithMetadata for T[src]

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>

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

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

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

type Owned = T

The resulting type after obtaining ownership.

impl<This> TransmuteElement for This where
    This: ?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.

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

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

The error type returned when the conversion fails.

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

type Type = T

The same type as Self. Read more

impl<This> ValidTag_Bounds for This where
    This: Debug + Clone + PartialEq<This>, 
[src]