Expand description
Proxy reference type, equivalent to &mut bool.
This is a two-word structure capable of correctly referring to a single bit in
a memory element. Because Rust does not permit reference-like objects in the
same manner that C++ does – &T and &mut T values are required to be
immediately-valid pointers, not objects – bitvec cannot manifest encoded
&mut Bit values in the same way that it can manifest &mut BitSlice.
Instead, this type implements Deref and DerefMut to an internal bool slot,
and in Drop commits the value of that bool to the proxied bit in the source
BitSlice from which the BitMut value was created. The combination of Rust’s
own exclusion rules and the aliasing type system in this library ensure that a
BitMut value has unique access to the bit it proxies, and the memory element
it uses will not have destructive data races from other views.
Lifetimes
'a: The lifetime of the source&'a mut BitSlicethat created theBitMut.
Type Parameters
O: TheBitOrdertype parameter from the source&mut BitSlice.T: TheBitStoretype parameter from the source&mut BitSlice.
Examples
use bitvec::prelude::*;
let bits = bits![mut 0; 2];
let (left, right) = bits.split_at_mut(1);
let mut first = left.get_mut(0).unwrap();
let second = right.get_mut(0).unwrap();
// Referential behavior
*first = true;
// Direct write
second.set(true);
drop(first); // it’s not a reference!
assert_eq!(bits, bits![1; 2]);Implementations
Writes a bit into the proxied location without an intermediate copy.
This function writes value directly into the proxied location, and
does not store value in the proxy’s internal cache. This should be
equivalent to the behavior seen when using ordinary DerefMut proxying,
but the latter depends on compiler optimization.
Parameters
self: This destroys the proxy, as it becomes invalid when writing directly to the location without updating the cache.value: The new bit to write into the proxied slot.
Trait Implementations
Auto Trait Implementations
impl<'a, O, T> RefUnwindSafe for BitMut<'a, O, T> where
    O: RefUnwindSafe,
    T: RefUnwindSafe,
    <T as BitStore>::Access: RefUnwindSafe,
    <T as BitStore>::Mem: RefUnwindSafe, 
impl<'a, O, T> !UnwindSafe for BitMut<'a, O, T>
Blanket Implementations
Mutably borrows from an owned value. Read more
Causes self to use its Binary implementation when Debug-formatted.
Causes self to use its Display implementation when
Debug-formatted. Read more
Causes self to use its LowerExp implementation when
Debug-formatted. Read more
Causes self to use its LowerHex implementation when
Debug-formatted. Read more
Causes self to use its Octal implementation when Debug-formatted.
Causes self to use its Pointer implementation when
Debug-formatted. Read more
Causes self to use its UpperExp implementation when
Debug-formatted. Read more
Causes self to use its UpperHex implementation when
Debug-formatted. Read more
fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: AsRef<T>,
    T: 'a,
    R: 'a, 
fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: AsRef<T>,
    T: 'a,
    R: 'a, 
Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more
fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: Borrow<T>,
    T: 'a,
    R: 'a, 
fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
    Self: Borrow<T>,
    T: 'a,
    R: 'a, 
Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more
fn pipe_deref<'a, R>(&'a self, func: impl FnOnce(&'a Self::Target) -> R) -> R where
    Self: Deref,
    R: 'a, 
fn pipe_deref<'a, R>(&'a self, func: impl FnOnce(&'a Self::Target) -> R) -> R where
    Self: Deref,
    R: 'a, 
Pipes a dereference into a function that cannot normally be called in suffix position. Read more
Pipes a reference into a function that cannot ordinarily be called in suffix position. Read more
Provides immutable access to the reference for inspection.
Calls tap_ref in debug builds, and does nothing in release builds.
Provides mutable access to the reference for modification.
Calls tap_ref_mut in debug builds, and does nothing in release builds.
Provides immutable access to the borrow for inspection. Read more
Calls tap_borrow in debug builds, and does nothing in release builds.
fn tap_borrow_mut<F, R>(self, func: F) -> Self where
    Self: BorrowMut<T>,
    F: FnOnce(&mut T) -> R, 
fn tap_borrow_mut<F, R>(self, func: F) -> Self where
    Self: BorrowMut<T>,
    F: FnOnce(&mut T) -> R, 
Provides mutable access to the borrow for modification.
Immutably dereferences self for inspection.
fn tap_deref_dbg<F, R>(self, func: F) -> Self where
    Self: Deref,
    F: FnOnce(&Self::Target) -> R, 
fn tap_deref_dbg<F, R>(self, func: F) -> Self where
    Self: Deref,
    F: FnOnce(&Self::Target) -> R, 
Calls tap_deref in debug builds, and does nothing in release builds.
fn tap_deref_mut<F, R>(self, func: F) -> Self where
    Self: DerefMut,
    F: FnOnce(&mut Self::Target) -> R, 
fn tap_deref_mut<F, R>(self, func: F) -> Self where
    Self: DerefMut,
    F: FnOnce(&mut Self::Target) -> R, 
Mutably dereferences self for modification.
