Trait protocoll::MapMut
[−]
[src]
pub trait MapMut<K, V> { fn update_mut<F>(&mut self, k: K, fnil: V, f: F)
where
F: FnOnce(&mut V); fn update_all_mut<F>(&mut self, f: F)
where
F: FnMut(&K, &mut V); fn merge_mut<I, F>(&mut self, coll: I, f: F)
where
I: IntoIterator<Item = (K, V)>,
F: FnMut(&mut V, V); }
Required Methods
fn update_mut<F>(&mut self, k: K, fnil: V, f: F) where
F: FnOnce(&mut V),
F: FnOnce(&mut V),
like Map::update
but can be more efficient.
example
use protocoll::{Map,MapMut}; use std::collections::HashMap; let a = [0,0,0,1,1,0,0,0]; let m1 = a.iter().fold (HashMap::new(), |m,&k| Map::update (m, k, |n| 1 + n.unwrap_or(0))); let m2 = a.iter().fold (HashMap::new(), |mut m, &k| {m.update_mut(k, 0, |n| *n += 1); m}); assert_eq!(m1,m2);
fn update_all_mut<F>(&mut self, f: F) where
F: FnMut(&K, &mut V),
F: FnMut(&K, &mut V),
like Map::update_all
but can be more efficient.
example
use protocoll::MapMut; use std::collections::HashMap; let mut m = [0,0,0,1,1,0,0,0].iter().fold (HashMap::new(), |mut m, &k| {m.update_mut(k, 0, |n| *n += 1); m}); m.update_all_mut(|_,v| *v += 1); assert_eq!(7, m[&0]); assert_eq!(3, m[&1]);
fn merge_mut<I, F>(&mut self, coll: I, f: F) where
I: IntoIterator<Item = (K, V)>,
F: FnMut(&mut V, V),
I: IntoIterator<Item = (K, V)>,
F: FnMut(&mut V, V),
like Map::merge
but can be more efficient.
example
use protocoll::MapMut; use std::collections::HashMap; let m1 = [0,0,0,1,1,0,0,0].iter().fold (HashMap::new(), |mut m, &k| {m.update_mut(k, 0, |n| *n += 1); m}); let mut m2 = m1.clone(); m2.merge_mut(m1, |u,v| *u += v); assert_eq!(12, m2[&0]); assert_eq!(4, m2[&1]);