[][src]Module subset::multi

Multi-subset of slice's items that is able to iterate forward and backward over references to selected items. Each item of a slice can be selected more than once.

In comparison with unique subset, there is no iterator over mutable references (IterMut). The presence of such an iterator would violate (as shown below) Rust's rule that a mutable reference to any ​​memory location must be unique:

This example is not tested
use subset::multi::*;
 
let mut set = [1, 2];
let idxs = [0, 0]; // First item selected twice
let mut subset = SubsetMut::new(&mut set, &idxs).unwrap();
let mut iter = subset.iter_mut();
let ref1 = iter.next().unwrap();
let ref2 = iter.next().unwrap();
assert!(std::ptr::eq(r1, r2));  // Two mut refs to the same memory!
*ref1 = 666;
assert_eq!(*ref2, 666);

Examples

use subset::multi::*;
 
// Constructing mutable multi-subset
let mut set = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
let idxs = vec![10];
assert_eq!(SubsetMut::new(&mut set, &idxs).err(), Some(SubsetError::OutOfBounds));
let idxs = vec![2, 2, 5];   // Indexes of selected items
let mut subset = SubsetMut::new(&mut set, &idxs).unwrap();
 
// Iterating
let mut iter = subset.iter();
assert_eq!(Some(&7), iter.next());
assert_eq!(Some(&4), iter.next_back());
assert_eq!(Some(&7), iter.next_back());
assert_eq!(None, iter.next());
assert_eq!(None, iter.next_back());
 
// Converting to immutable multi-subset
let mut subset = SubsetMut::new(&mut set, &idxs).unwrap();
let imm_subset: Subset<_> = subset.into();
 
// Converting to (unique) mutable subset
let mut subset = SubsetMut::new(&mut set, &idxs).unwrap();
let result: Result<subset::unique::SubsetMut<_>, _> = subset.try_into();
assert_eq!(Some(SubsetError::NotUnique), result.err());
 
// Converting to (unique) immutable subset
let idxs = vec![2, 5];   // Indexes of selected items
let mut subset = SubsetMut::new(&mut set, &idxs).unwrap();
let u_imm_subset: subset::unique::Subset<_> = subset.try_into().unwrap();

Re-exports

pub use super::SubsetError;

Structs

Iter

Double-ended iterator over immutable references to selected items of set.

Subset

Multi-subset of slice's items that is able to iterate forward and backward over references to selected items. Each item of a slice can be selected more than once.

SubsetMut

Multi-subset of slice's items that is able to iterate forward and backward over references to selected items. Each item of a slice can be selected more than once.

Traits

From

Used to do value-to-value conversions while consuming the input value. It is the reciprocal of Into.

Into

A value-to-value conversion that consumes the input value. The opposite of From.

TryFrom

Simple and safe type conversions that may fail in a controlled way under some circumstances. It is the reciprocal of TryInto.

TryInto

An attempted conversion that consumes self, which may or may not be expensive.