logo

Trait rocket::mtls::oid::asn1_rs::nom::lib::std::ops::BitOr

1.0.0 · source · []
pub trait BitOr<Rhs = Self> {
    type Output;

    fn bitor(self, rhs: Rhs) -> Self::Output;
}
Available on crate feature mtls only.
Expand description

The bitwise OR operator |.

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

Examples

An implementation of BitOr for a wrapper around bool.

use std::ops::BitOr;

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

impl BitOr for Scalar {
    type Output = Self;

    // rhs is the "right-hand side" of the expression `a | b`
    fn bitor(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(true));
assert_eq!(Scalar(false) | Scalar(true), Scalar(true));
assert_eq!(Scalar(false) | Scalar(false), Scalar(false));

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

use std::ops::BitOr;

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

impl BitOr for BooleanVector {
    type Output = Self;

    fn bitor(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, true, true, false]);
assert_eq!(bv1 | bv2, expected);

Required Associated Types

The resulting type after applying the | operator.

Required Methods

Performs the | operation.

Examples
assert_eq!(true | false, true);
assert_eq!(false | false, false);
assert_eq!(5u8 | 1u8, 5);
assert_eq!(5u8 | 2u8, 7);

Implementations on Foreign Types

Returns the set union, cloned into a new set.

Values from self are collected in their original order, followed by values that are unique to other in their original order.

Returns the union 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![3, 4, 5].into_iter().collect();

let set = &a | &b;

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

Returns the union of self and rhs as a new AHashSet<T, S>.

Examples
use ahash::AHashSet;

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

let set = &a | &b;

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

UInt<Ul, B1> | UInt<Ur, B0> = UInt<Ul | Ur, B1>

Or with 0 ( 0 | 0 = 0)

UInt<Ul, B0> | UInt<Ur, B0> = UInt<Ul | Ur, B0>

UTerm | X = X

Or with 0 ( 0 | 1 = 1)

X | UTerm = X

Or with 1 ( 1 | B = 1)

UInt<Ul, B0> | UInt<Ur, B1> = UInt<Ul | Ur, B1>

UInt<Ul, B1> | UInt<Ur, B1> = UInt<Ul | Ur, B1>

Implementors