Trait sp_std::ops::BitAndAssign

1.8.0 · source ·
pub trait BitAndAssign<Rhs = Self> {
    fn bitand_assign(&mut self, rhs: Rhs);
}
Expand description

The bitwise AND assignment operator &=.

Examples

An implementation of BitAndAssign that lifts the &= operator to a wrapper around bool.

use std::ops::BitAndAssign;

#[derive(Debug, PartialEq)]
struct Scalar(bool);

impl BitAndAssign for Scalar {
    // rhs is the "right-hand side" of the expression `a &= b`
    fn bitand_assign(&mut self, rhs: Self) {
        *self = Self(self.0 & rhs.0)
    }
}

let mut scalar = Scalar(true);
scalar &= Scalar(true);
assert_eq!(scalar, Scalar(true));

let mut scalar = Scalar(true);
scalar &= Scalar(false);
assert_eq!(scalar, Scalar(false));

let mut scalar = Scalar(false);
scalar &= Scalar(true);
assert_eq!(scalar, Scalar(false));

let mut scalar = Scalar(false);
scalar &= Scalar(false);
assert_eq!(scalar, Scalar(false));

Here, the BitAndAssign trait is implemented for a wrapper around Vec<bool>.

use std::ops::BitAndAssign;

#[derive(Debug, PartialEq)]
struct BooleanVector(Vec<bool>);

impl BitAndAssign for BooleanVector {
    // `rhs` is the "right-hand side" of the expression `a &= b`.
    fn bitand_assign(&mut self, rhs: Self) {
        assert_eq!(self.0.len(), rhs.0.len());
        *self = Self(
            self.0
                .iter()
                .zip(rhs.0.iter())
                .map(|(x, y)| *x & *y)
                .collect()
        );
    }
}

let mut bv = BooleanVector(vec![true, true, false, false]);
bv &= BooleanVector(vec![true, false, true, false]);
let expected = BooleanVector(vec![true, false, false, false]);
assert_eq!(bv, expected);

Required Methods§

Performs the &= operation.

Examples
let mut x = true;
x &= false;
assert_eq!(x, false);

let mut x = true;
x &= true;
assert_eq!(x, true);

let mut x: u8 = 5;
x &= 1;
assert_eq!(x, 1);

let mut x: u8 = 5;
x &= 2;
assert_eq!(x, 0);

Implementors§

impl<A, O> BitAndAssign<BitArray<A, O>> for BitSlice<A::Store, O>where
    A: BitViewSized,
    O: BitOrder,

impl<A, O> BitAndAssign<&BitArray<A, O>> for BitSlice<A::Store, O>where
    A: BitViewSized,
    O: BitOrder,

impl<A, O, Rhs> BitAndAssign<Rhs> for BitArray<A, O>where
    A: BitViewSized,
    O: BitOrder,
    BitSlice<A::Store, O>: BitAndAssign<Rhs>,

impl<T, O> BitAndAssign<BitBox<T, O>> for BitSlice<T, O>where
    T: BitStore,
    O: BitOrder,

impl<T, O> BitAndAssign<&BitBox<T, O>> for BitSlice<T, O>where
    T: BitStore,
    O: BitOrder,

impl<T, O, Rhs> BitAndAssign<Rhs> for BitBox<T, O>where
    T: BitStore,
    O: BitOrder,
    BitSlice<T, O>: BitAndAssign<Rhs>,

impl<T1, T2, O1, O2> BitAndAssign<&BitSlice<T2, O2>> for BitSlice<T1, O1>where
    T1: BitStore,
    T2: BitStore,
    O1: BitOrder,
    O2: BitOrder,

impl<T, O> BitAndAssign<BitVec<T, O>> for BitSlice<T, O>where
    T: BitStore,
    O: BitOrder,

impl<T, O> BitAndAssign<&BitVec<T, O>> for BitSlice<T, O>where
    T: BitStore,
    O: BitOrder,

impl<T, O, Rhs> BitAndAssign<Rhs> for BitVec<T, O>where
    T: BitStore,
    O: BitOrder,
    BitSlice<T, O>: BitAndAssign<Rhs>,

impl<const LIMBS: usize> BitAndAssign<UInt<LIMBS>> for UInt<LIMBS>

impl<const LIMBS: usize> BitAndAssign<&UInt<LIMBS>> for UInt<LIMBS>

impl<const LIMBS: usize> BitAndAssign<Wrapping<UInt<LIMBS>>> for Wrapping<UInt<LIMBS>>

impl<const LIMBS: usize> BitAndAssign<&Wrapping<UInt<LIMBS>>> for Wrapping<UInt<LIMBS>>

impl<T, B> BitAndAssign<B> for BitFlags<T>where
    T: BitFlag,
    B: Into<BitFlags<T>>,

impl<Frac> BitAndAssign<FixedU8<Frac>> for FixedU8<Frac>

impl<Frac> BitAndAssign<&FixedU8<Frac>> for FixedU8<Frac>

impl<Frac> BitAndAssign<FixedU16<Frac>> for FixedU16<Frac>

impl<Frac> BitAndAssign<&FixedU16<Frac>> for FixedU16<Frac>

impl<Frac> BitAndAssign<FixedU32<Frac>> for FixedU32<Frac>

impl<Frac> BitAndAssign<&FixedU32<Frac>> for FixedU32<Frac>

impl<Frac> BitAndAssign<FixedU64<Frac>> for FixedU64<Frac>

impl<Frac> BitAndAssign<&FixedU64<Frac>> for FixedU64<Frac>

impl<Frac> BitAndAssign<FixedU128<Frac>> for FixedU128<Frac>

impl<Frac> BitAndAssign<&FixedU128<Frac>> for FixedU128<Frac>

impl<Frac> BitAndAssign<FixedI8<Frac>> for FixedI8<Frac>

impl<Frac> BitAndAssign<&FixedI8<Frac>> for FixedI8<Frac>

impl<Frac> BitAndAssign<FixedI16<Frac>> for FixedI16<Frac>

impl<Frac> BitAndAssign<&FixedI16<Frac>> for FixedI16<Frac>

impl<Frac> BitAndAssign<FixedI32<Frac>> for FixedI32<Frac>

impl<Frac> BitAndAssign<&FixedI32<Frac>> for FixedI32<Frac>

impl<Frac> BitAndAssign<FixedI64<Frac>> for FixedI64<Frac>

impl<Frac> BitAndAssign<&FixedI64<Frac>> for FixedI64<Frac>

impl<Frac> BitAndAssign<FixedI128<Frac>> for FixedI128<Frac>

impl<Frac> BitAndAssign<&FixedI128<Frac>> for FixedI128<Frac>

impl<F> BitAndAssign<Unwrapped<F>> for Unwrapped<F>where
    F: BitAndAssign<F>,

impl<F> BitAndAssign<&Unwrapped<F>> for Unwrapped<F>where
    for<'a> F: BitAndAssign<&'a F>,

impl<F> BitAndAssign<F> for Unwrapped<F>where
    F: BitAndAssign<F>,

impl<F> BitAndAssign<&F> for Unwrapped<F>where
    for<'a> F: BitAndAssign<&'a F>,

impl<F> BitAndAssign<Wrapping<F>> for Wrapping<F>where
    F: BitAndAssign<F>,

impl<F> BitAndAssign<&Wrapping<F>> for Wrapping<F>where
    for<'a> F: BitAndAssign<&'a F>,

impl<F> BitAndAssign<F> for Wrapping<F>where
    F: BitAndAssign<F>,

impl<F> BitAndAssign<&F> for Wrapping<F>where
    for<'a> F: BitAndAssign<&'a F>,

impl<'a> BitAndAssign<&'a BigInt> for BigInt

impl<'a> BitAndAssign<&'a BigUint> for BigUint

impl<'r> BitAndAssign<&'r H128> for H128

impl<'r> BitAndAssign<&'r H160> for H160

impl<'r> BitAndAssign<&'r H256> for H256

impl<'r> BitAndAssign<&'r H384> for H384

impl<'r> BitAndAssign<&'r H512> for H512

impl<'r> BitAndAssign<&'r H768> for H768