[−][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:
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 | A value-to-value conversion that consumes the input value. The
opposite of |
TryFrom | Simple and safe type conversions that may fail in a controlled
way under some circumstances. It is the reciprocal of |
TryInto | An attempted conversion that consumes |