Trait otter_api_tests::imports::failure::_core::ops::BitAnd1.0.0[][src]

pub trait BitAnd<Rhs = Self> {
    type Output;
    #[must_use]
    fn bitand(self, rhs: Rhs) -> Self::Output;
}
Expand description

The bitwise AND operator &.

Note that Rhs is Self by default, but this is not mandatory.

Examples

An implementation of BitAnd for a wrapper around bool.

use std::ops::BitAnd;

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

impl BitAnd for Scalar {
    type Output = Self;

    // rhs is the "right-hand side" of the expression `a & b`
    fn bitand(self, rhs: Self) -> Self::Output {
        Self(self.0 & rhs.0)
    }
}

assert_eq!(Scalar(true) & Scalar(true), Scalar(true));
assert_eq!(Scalar(true) & Scalar(false), Scalar(false));
assert_eq!(Scalar(false) & Scalar(true), Scalar(false));
assert_eq!(Scalar(false) & Scalar(false), Scalar(false));

An implementation of BitAnd for a wrapper around Vec<bool>.

use std::ops::BitAnd;

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

impl BitAnd for BooleanVector {
    type Output = Self;

    fn bitand(self, Self(rhs): Self) -> Self::Output {
        let Self(lhs) = self;
        assert_eq!(lhs.len(), rhs.len());
        Self(
            lhs.iter()
                .zip(rhs.iter())
                .map(|(x, y)| *x & *y)
                .collect()
        )
    }
}

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

Associated Types

The resulting type after applying the & operator.

Required methods

Performs the & operation.

Examples

assert_eq!(true & false, false);
assert_eq!(true & true, true);
assert_eq!(5u8 & 1u8, 1);
assert_eq!(5u8 & 2u8, 0);

Implementations on Foreign Types

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the set intersection, cloned into a new set.

Values are collected in the same order that they appear in self.

Returns the intersection of self and rhs as a new HashSet<T, S>.

Examples

use hashbrown::HashSet;

let a: HashSet<_> = vec![1, 2, 3].into_iter().collect();
let b: HashSet<_> = vec![2, 3, 4].into_iter().collect();

let set = &a & &b;

let mut i = 0;
let expected = [2, 3];
for x in &set {
    assert!(expected.contains(x));
    i += 1;
}
assert_eq!(i, expected.len());

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Implementors

Returns the intersection between the two sets of flags.

And with 1 ( 1 & 0 = 0)

And with 1 ( 1 & 1 = 1)

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection between the two sets of flags.

Returns the intersection of self and rhs as a new BTreeSet<T>.

Examples

use std::collections::BTreeSet;

let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect();
let b: BTreeSet<_> = vec![2, 3, 4].into_iter().collect();

let result = &a & &b;
let result_vec: Vec<_> = result.into_iter().collect();
assert_eq!(result_vec, [2, 3]);

Returns the intersection of self and rhs as a new HashSet<T, S>.

Examples

use std::collections::HashSet;

let a: HashSet<_> = vec![1, 2, 3].into_iter().collect();
let b: HashSet<_> = vec![2, 3, 4].into_iter().collect();

let set = &a & &b;

let mut i = 0;
let expected = [2, 3];
for x in &set {
    assert!(expected.contains(x));
    i += 1;
}
assert_eq!(i, expected.len());

And with 0 ( 0 & B = 0)

Anding unsigned integers. We use our PrivateAnd operator and then Trim the output.

0 & X = 0