pub struct Bag<T, const ARRAY_LEN: usize = DEFAULT_ARRAY_LEN> { /* private fields */ }
Expand description
Bag
is a lock-free concurrent unordered instance container.
Bag
is a linearizable concurrent instance container where ARRAY_LEN
instances are stored
in a fixed-size array, and the rest are managed by its backup container; this makes a Bag
especially efficient if the expected number of instances does not exceed ARRAY_LEN
.
The maximum value of ARRAY_LEN
is limited to usize::BITS / 2
which is the default value, and
if a larger value is specified, Bag::new
panics.
Implementations§
source§impl<T, const ARRAY_LEN: usize> Bag<T, ARRAY_LEN>
impl<T, const ARRAY_LEN: usize> Bag<T, ARRAY_LEN>
sourcepub fn pop_all<B, F: FnMut(B, T) -> B>(&self, init: B, fold: F) -> B
pub fn pop_all<B, F: FnMut(B, T) -> B>(&self, init: B, fold: F) -> B
Pops all the entries at once, and folds them into an accumulator.
Examples
use scc::Bag;
let bag: Bag<usize> = Bag::default();
bag.push(7);
bag.push(17);
bag.push(37);
assert_eq!(bag.pop_all(0, |a, v| a + v), 61);
bag.push(47);
assert_eq!(bag.pop(), Some(47));
assert!(bag.pop().is_none());
assert!(bag.is_empty());
sourcepub fn iter_mut(&mut self) -> Accessor<'_, T, ARRAY_LEN>
pub fn iter_mut(&mut self) -> Accessor<'_, T, ARRAY_LEN>
Iterates over contained instances for modifying them.
Examples
use scc::Bag;
let mut bag: Bag<usize> = Bag::default();
bag.push(3);
bag.push(3);
assert_eq!(bag.iter_mut().count(), 2);
bag.iter_mut().for_each(|e| { *e += 1; });
assert_eq!(bag.pop(), Some(4));
assert_eq!(bag.pop(), Some(4));
assert!(bag.pop().is_none());
Trait Implementations§
Auto Trait Implementations§
impl<T, const ARRAY_LEN: usize> RefUnwindSafe for Bag<T, ARRAY_LEN>where T: RefUnwindSafe,
impl<T, const ARRAY_LEN: usize> Send for Bag<T, ARRAY_LEN>where T: Send,
impl<T, const ARRAY_LEN: usize> Sync for Bag<T, ARRAY_LEN>where T: Sync,
impl<T, const ARRAY_LEN: usize> Unpin for Bag<T, ARRAY_LEN>where T: Unpin,
impl<T, const ARRAY_LEN: usize> UnwindSafe for Bag<T, ARRAY_LEN>where T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more