Struct bitvec::slice::IterMut[][src]

pub struct IterMut<'a, O, T> where
    O: 'a + BitOrder,
    T: 'a + BitStore
{ /* fields omitted */ }

Mutable bit slice iterator.

This struct is created by the iter_mut method on BitSlices.

Original

slice::IterMut

API Differences

In addition to returning BitMut instead of &mut bool, all references produced from this iterator are marked as aliasing. This is necessary because the references receive the lifetime of the original slice, not of the iterator object, and the iterator is able to produce multiple live references in the same scope.

Examples

Basic usage:

use bitvec::prelude::*;
// First, we declare a type which has `iter_mut` method to get the `IterMut`
// struct (&BitSlice here):
let mut data = 0u8;
let bits = data.view_bits_mut::<Msb0>();

// Then, we iterate over it and modify bits:
for (idx, mut bit) in bits.iter_mut().enumerate() {
  *bit = idx % 3 == 0;
}
assert_eq!(data, 0b100_100_10);

Implementations

impl<'a, O, T> IterMut<'a, O, T> where
    O: 'a + BitOrder,
    T: 'a + BitStore
[src]

pub fn into_bitslice(self) -> &'a mut BitSlice<O, T::Alias>

Notable traits for &'a BitSlice<O, T>

impl<'a, O, T> Read for &'a BitSlice<O, T> where
    O: BitOrder,
    T: BitStore,
    BitSlice<O, T>: BitField
impl<'a, O, T> Write for &'a mut BitSlice<O, T> where
    O: BitOrder,
    T: BitStore,
    BitSlice<O, T::Alias>: BitField
[src]

Views the underlying data as a subslice of the original data.

To avoid creating &mut references that alias the same bits, this is forced to consume the iterator.

Original

IterMut::into_bitslice

API Differences

This is renamed, as its return type is not an element slice &mut [T] or &mut [bool] but a bit slice.

Examples

Basic usage:

use bitvec::prelude::*;

// First, we declare a type which has `iter_mut` method to get the `IterMut`
// struct (&BitSlice here):
let mut data = 0u8;
let bits = data.view_bits_mut::<Lsb0>();

{
  // Then, we get the iterator:
  let mut iter = bits.iter_mut();
  // We move to the next element:
  iter.next();
  // So if we print what `into_bitslice` method returns here, we have
  // "[0, 0, 0, 0, 0, 0, 0]":
  println!("{:?}", iter.into_bitslice());
}

// Now let's modify a value of the slice:
{
  // First we get back the iterator:
  let mut iter = bits.iter_mut();
  // We change the value of the first bit of the slice returned by the `next` method:
  *iter.next().unwrap() = true;
}
// Now data is "1":
assert_eq!(data, 1);

Trait Implementations

impl<'a, O: Debug, T: Debug> Debug for IterMut<'a, O, T> where
    O: 'a + BitOrder,
    T: 'a + BitStore,
    T::Alias: Debug,
    T::Alias: Debug,
    T::Alias: Debug,
    T::Alias: Debug,
    T::Alias: Debug
[src]

impl<'a, O, T> DoubleEndedIterator for IterMut<'a, O, T> where
    O: 'a + BitOrder,
    T: 'a + BitStore
[src]

impl<O, T> ExactSizeIterator for IterMut<'_, O, T> where
    O: BitOrder,
    T: BitStore
[src]

impl<O, T> FusedIterator for IterMut<'_, O, T> where
    O: BitOrder,
    T: BitStore
[src]

impl<'a, O, T> Iterator for IterMut<'a, O, T> where
    O: 'a + BitOrder,
    T: 'a + BitStore
[src]

type Item = <usize as BitSliceIndex<'a, O, T::Alias>>::Mut

The type of the elements being iterated over.

impl<O, T> Send for IterMut<'_, O, T> where
    O: BitOrder,
    T: BitStore
[src]

impl<O, T> Sync for IterMut<'_, O, T> where
    O: BitOrder,
    T: BitStore
[src]

Auto Trait Implementations

impl<'a, O, T> RefUnwindSafe for IterMut<'a, O, T> where
    O: RefUnwindSafe,
    <<T as BitStore>::Alias as BitStore>::Access: RefUnwindSafe,
    <T as BitStore>::Alias: RefUnwindSafe,
    <<T as BitStore>::Alias as BitStore>::Mem: RefUnwindSafe

impl<'a, O, T> Unpin for IterMut<'a, O, T>

impl<'a, O, T> !UnwindSafe for IterMut<'a, O, T>

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<T> Conv for T[src]

impl<T> Conv for T[src]

impl<T> FmtForward for T[src]

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

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

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

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

impl<T> Pipe for T[src]

impl<T> PipeAsRef for T[src]

impl<T> PipeBorrow for T[src]

impl<T> PipeDeref for T[src]

impl<T> PipeRef for T[src]

impl<T> Tap for T[src]

impl<T> Tap for T[src]

impl<T, U> TapAsRef<U> for T where
    U: ?Sized
[src]

impl<T, U> TapBorrow<U> for T where
    U: ?Sized
[src]

impl<T> TapDeref for T[src]

impl<T> TryConv for T[src]

impl<T> TryConv for T[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.