1.0.0[][src]Trait tract_hir::internal::tract_downcast_rs::__std::ops::BitXor

#[lang = "bitxor"]pub trait BitXor<Rhs = Self> {
    type Output;
#[must_use]    pub fn bitxor(self, rhs: Rhs) -> Self::Output;
}

The bitwise XOR operator ^.

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

Examples

An implementation of BitXor that lifts ^ to a wrapper around bool.

use std::ops::BitXor;

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

impl BitXor for Scalar {
    type Output = Self;

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

assert_eq!(Scalar(true) ^ Scalar(true), Scalar(false));
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 BitXor trait for a wrapper around Vec<bool>.

use std::ops::BitXor;

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

impl BitXor for BooleanVector {
    type Output = Self;

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

Associated Types

type Output[src]

The resulting type after applying the ^ operator.

Loading content...

Required methods

#[must_use]pub fn bitxor(self, rhs: Rhs) -> Self::Output[src]

Performs the ^ operation.

Examples

assert_eq!(true ^ false, true);
assert_eq!(true ^ true, false);
assert_eq!(5u8 ^ 1u8, 4);
assert_eq!(5u8 ^ 2u8, 7);
Loading content...

Implementations on Foreign Types

impl<'_> BitXor<&'_ isize> for isize[src]

type Output = <isize as BitXor<isize>>::Output

impl<'_> BitXor<&'_ i8> for i8[src]

type Output = <i8 as BitXor<i8>>::Output

impl<'_, '_> BitXor<&'_ u16> for &'_ u16[src]

type Output = <u16 as BitXor<u16>>::Output

impl<'_> BitXor<&'_ u8> for u8[src]

type Output = <u8 as BitXor<u8>>::Output

impl<'a> BitXor<usize> for &'a usize[src]

type Output = <usize as BitXor<usize>>::Output

impl<'_> BitXor<&'_ i64> for i64[src]

type Output = <i64 as BitXor<i64>>::Output

impl<'_, '_> BitXor<&'_ i32> for &'_ i32[src]

type Output = <i32 as BitXor<i32>>::Output

impl<'a> BitXor<i16> for &'a i16[src]

type Output = <i16 as BitXor<i16>>::Output

impl<'_, '_> BitXor<&'_ i8> for &'_ i8[src]

type Output = <i8 as BitXor<i8>>::Output

impl<'a> BitXor<i32> for &'a i32[src]

type Output = <i32 as BitXor<i32>>::Output

impl<'a> BitXor<u16> for &'a u16[src]

type Output = <u16 as BitXor<u16>>::Output

impl<'_, '_> BitXor<&'_ u64> for &'_ u64[src]

type Output = <u64 as BitXor<u64>>::Output

impl<'a> BitXor<u64> for &'a u64[src]

type Output = <u64 as BitXor<u64>>::Output

impl BitXor<u32> for u32[src]

type Output = u32

impl<'a> BitXor<u8> for &'a u8[src]

type Output = <u8 as BitXor<u8>>::Output

impl<'_> BitXor<&'_ u64> for u64[src]

type Output = <u64 as BitXor<u64>>::Output

impl<'_> BitXor<&'_ u32> for u32[src]

type Output = <u32 as BitXor<u32>>::Output

impl<'_> BitXor<&'_ u128> for u128[src]

type Output = <u128 as BitXor<u128>>::Output

impl<'_> BitXor<&'_ usize> for usize[src]

type Output = <usize as BitXor<usize>>::Output

impl BitXor<i8> for i8[src]

type Output = i8

impl<'a> BitXor<isize> for &'a isize[src]

type Output = <isize as BitXor<isize>>::Output

impl<'a> BitXor<i8> for &'a i8[src]

type Output = <i8 as BitXor<i8>>::Output

impl BitXor<u16> for u16[src]

type Output = u16

impl BitXor<i128> for i128[src]

type Output = i128

impl BitXor<bool> for bool[src]

type Output = bool

impl BitXor<u64> for u64[src]

type Output = u64

impl<'_> BitXor<&'_ i128> for i128[src]

type Output = <i128 as BitXor<i128>>::Output

impl<'_, '_> BitXor<&'_ u8> for &'_ u8[src]

type Output = <u8 as BitXor<u8>>::Output

impl<'_, '_> BitXor<&'_ bool> for &'_ bool[src]

type Output = <bool as BitXor<bool>>::Output

impl BitXor<usize> for usize[src]

type Output = usize

impl BitXor<u8> for u8[src]

type Output = u8

impl<'_, '_> BitXor<&'_ isize> for &'_ isize[src]

type Output = <isize as BitXor<isize>>::Output

impl BitXor<i64> for i64[src]

type Output = i64

impl BitXor<i32> for i32[src]

type Output = i32

impl BitXor<i16> for i16[src]

type Output = i16

impl<'a> BitXor<u128> for &'a u128[src]

type Output = <u128 as BitXor<u128>>::Output

impl<'_> BitXor<&'_ i16> for i16[src]

type Output = <i16 as BitXor<i16>>::Output

impl<'a> BitXor<bool> for &'a bool[src]

type Output = <bool as BitXor<bool>>::Output

impl BitXor<isize> for isize[src]

type Output = isize

impl<'_, '_> BitXor<&'_ u128> for &'_ u128[src]

type Output = <u128 as BitXor<u128>>::Output

impl<'_> BitXor<&'_ i32> for i32[src]

type Output = <i32 as BitXor<i32>>::Output

impl BitXor<u128> for u128[src]

type Output = u128

impl<'a> BitXor<i64> for &'a i64[src]

type Output = <i64 as BitXor<i64>>::Output

impl<'_, '_> BitXor<&'_ i16> for &'_ i16[src]

type Output = <i16 as BitXor<i16>>::Output

impl<'_> BitXor<&'_ bool> for bool[src]

type Output = <bool as BitXor<bool>>::Output

impl<'_, '_> BitXor<&'_ i64> for &'_ i64[src]

type Output = <i64 as BitXor<i64>>::Output

impl<'a> BitXor<u32> for &'a u32[src]

type Output = <u32 as BitXor<u32>>::Output

impl<'_, '_> BitXor<&'_ i128> for &'_ i128[src]

type Output = <i128 as BitXor<i128>>::Output

impl<'_> BitXor<&'_ u16> for u16[src]

type Output = <u16 as BitXor<u16>>::Output

impl<'_, '_> BitXor<&'_ usize> for &'_ usize[src]

type Output = <usize as BitXor<usize>>::Output

impl<'_, '_> BitXor<&'_ u32> for &'_ u32[src]

type Output = <u32 as BitXor<u32>>::Output

impl<'a> BitXor<i128> for &'a i128[src]

type Output = <i128 as BitXor<i128>>::Output

impl<S, D> BitXor<ArrayBase<S, D>> for u16 where
    D: Dimension,
    S: DataOwned<Elem = u16> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for u32 where
    D: Dimension,
    S: Data<Elem = u32>, 
[src]

type Output = ArrayBase<OwnedRepr<u32>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for i32 where
    D: Dimension,
    S: DataOwned<Elem = i32> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for u16 where
    D: Dimension,
    S: Data<Elem = u16>, 
[src]

type Output = ArrayBase<OwnedRepr<u16>, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for i16 where
    D: Dimension,
    S: Data<Elem = i16>, 
[src]

type Output = ArrayBase<OwnedRepr<i16>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for u32 where
    D: Dimension,
    S: DataOwned<Elem = u32> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for i64 where
    D: Dimension,
    S: Data<Elem = i64>, 
[src]

type Output = ArrayBase<OwnedRepr<i64>, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for u8 where
    D: Dimension,
    S: Data<Elem = u8>, 
[src]

type Output = ArrayBase<OwnedRepr<u8>, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for u128 where
    D: Dimension,
    S: Data<Elem = u128>, 
[src]

type Output = ArrayBase<OwnedRepr<u128>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for i8 where
    D: Dimension,
    S: DataOwned<Elem = i8> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for i128 where
    D: Dimension,
    S: Data<Elem = i128>, 
[src]

type Output = ArrayBase<OwnedRepr<i128>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for bool where
    D: Dimension,
    S: DataOwned<Elem = bool> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for i32 where
    D: Dimension,
    S: Data<Elem = i32>, 
[src]

type Output = ArrayBase<OwnedRepr<i32>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for i64 where
    D: Dimension,
    S: DataOwned<Elem = i64> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for i8 where
    D: Dimension,
    S: Data<Elem = i8>, 
[src]

type Output = ArrayBase<OwnedRepr<i8>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for u8 where
    D: Dimension,
    S: DataOwned<Elem = u8> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for bool where
    D: Dimension,
    S: Data<Elem = bool>, 
[src]

type Output = ArrayBase<OwnedRepr<bool>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for u64 where
    D: Dimension,
    S: DataOwned<Elem = u64> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<S, D> BitXor<ArrayBase<S, D>> for i16 where
    D: Dimension,
    S: DataOwned<Elem = i16> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<S, D> BitXor<ArrayBase<S, D>> for u128 where
    D: Dimension,
    S: DataOwned<Elem = u128> + DataMut
[src]

type Output = ArrayBase<S, D>

impl<'a, S, D> BitXor<&'a ArrayBase<S, D>> for u64 where
    D: Dimension,
    S: Data<Elem = u64>, 
[src]

type Output = ArrayBase<OwnedRepr<u64>, D>

impl<S, D> BitXor<ArrayBase<S, D>> for i128 where
    D: Dimension,
    S: DataOwned<Elem = i128> + DataMut
[src]

type Output = ArrayBase<S, D>

Loading content...

Implementors

impl BitXor<Wrapping<i8>> for Wrapping<i8>[src]

type Output = Wrapping<i8>

impl BitXor<Wrapping<i16>> for Wrapping<i16>[src]

type Output = Wrapping<i16>

impl BitXor<Wrapping<i32>> for Wrapping<i32>[src]

type Output = Wrapping<i32>

impl BitXor<Wrapping<i64>> for Wrapping<i64>[src]

type Output = Wrapping<i64>

impl BitXor<Wrapping<i128>> for Wrapping<i128>[src]

type Output = Wrapping<i128>

impl BitXor<Wrapping<isize>> for Wrapping<isize>[src]

type Output = Wrapping<isize>

impl BitXor<Wrapping<u8>> for Wrapping<u8>[src]

type Output = Wrapping<u8>

impl BitXor<Wrapping<u16>> for Wrapping<u16>[src]

type Output = Wrapping<u16>

impl BitXor<Wrapping<u32>> for Wrapping<u32>[src]

type Output = Wrapping<u32>

impl BitXor<Wrapping<u64>> for Wrapping<u64>[src]

type Output = Wrapping<u64>

impl BitXor<Wrapping<u128>> for Wrapping<u128>[src]

type Output = Wrapping<u128>

impl BitXor<Wrapping<usize>> for Wrapping<usize>[src]

type Output = Wrapping<usize>

impl<'_> BitXor<&'_ Wrapping<i8>> for Wrapping<i8>[src]

type Output = <Wrapping<i8> as BitXor<Wrapping<i8>>>::Output

impl<'_> BitXor<&'_ Wrapping<i16>> for Wrapping<i16>[src]

type Output = <Wrapping<i16> as BitXor<Wrapping<i16>>>::Output

impl<'_> BitXor<&'_ Wrapping<i32>> for Wrapping<i32>[src]

type Output = <Wrapping<i32> as BitXor<Wrapping<i32>>>::Output

impl<'_> BitXor<&'_ Wrapping<i64>> for Wrapping<i64>[src]

type Output = <Wrapping<i64> as BitXor<Wrapping<i64>>>::Output

impl<'_> BitXor<&'_ Wrapping<i128>> for Wrapping<i128>[src]

type Output = <Wrapping<i128> as BitXor<Wrapping<i128>>>::Output

impl<'_> BitXor<&'_ Wrapping<isize>> for Wrapping<isize>[src]

type Output = <Wrapping<isize> as BitXor<Wrapping<isize>>>::Output

impl<'_> BitXor<&'_ Wrapping<u8>> for Wrapping<u8>[src]

type Output = <Wrapping<u8> as BitXor<Wrapping<u8>>>::Output

impl<'_> BitXor<&'_ Wrapping<u16>> for Wrapping<u16>[src]

type Output = <Wrapping<u16> as BitXor<Wrapping<u16>>>::Output

impl<'_> BitXor<&'_ Wrapping<u32>> for Wrapping<u32>[src]

type Output = <Wrapping<u32> as BitXor<Wrapping<u32>>>::Output

impl<'_> BitXor<&'_ Wrapping<u64>> for Wrapping<u64>[src]

type Output = <Wrapping<u64> as BitXor<Wrapping<u64>>>::Output

impl<'_> BitXor<&'_ Wrapping<u128>> for Wrapping<u128>[src]

type Output = <Wrapping<u128> as BitXor<Wrapping<u128>>>::Output

impl<'_> BitXor<&'_ Wrapping<usize>> for Wrapping<usize>[src]

type Output = <Wrapping<usize> as BitXor<Wrapping<usize>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<i8>> for &'_ Wrapping<i8>[src]

type Output = <Wrapping<i8> as BitXor<Wrapping<i8>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<i16>> for &'_ Wrapping<i16>[src]

type Output = <Wrapping<i16> as BitXor<Wrapping<i16>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<i32>> for &'_ Wrapping<i32>[src]

type Output = <Wrapping<i32> as BitXor<Wrapping<i32>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<i64>> for &'_ Wrapping<i64>[src]

type Output = <Wrapping<i64> as BitXor<Wrapping<i64>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<i128>> for &'_ Wrapping<i128>[src]

type Output = <Wrapping<i128> as BitXor<Wrapping<i128>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<isize>> for &'_ Wrapping<isize>[src]

type Output = <Wrapping<isize> as BitXor<Wrapping<isize>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<u8>> for &'_ Wrapping<u8>[src]

type Output = <Wrapping<u8> as BitXor<Wrapping<u8>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<u16>> for &'_ Wrapping<u16>[src]

type Output = <Wrapping<u16> as BitXor<Wrapping<u16>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<u32>> for &'_ Wrapping<u32>[src]

type Output = <Wrapping<u32> as BitXor<Wrapping<u32>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<u64>> for &'_ Wrapping<u64>[src]

type Output = <Wrapping<u64> as BitXor<Wrapping<u64>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<u128>> for &'_ Wrapping<u128>[src]

type Output = <Wrapping<u128> as BitXor<Wrapping<u128>>>::Output

impl<'_, '_> BitXor<&'_ Wrapping<usize>> for &'_ Wrapping<usize>[src]

type Output = <Wrapping<usize> as BitXor<Wrapping<usize>>>::Output

impl<'_, '_, T> BitXor<&'_ BTreeSet<T>> for &'_ BTreeSet<T> where
    T: Clone + Ord
[src]

type Output = BTreeSet<T>

pub fn bitxor(self, rhs: &BTreeSet<T>) -> BTreeSet<T>[src]

Returns the symmetric difference 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, [1, 4]);

impl<'_, '_, T, S> BitXor<&'_ HashSet<T, S>> for &'_ HashSet<T, S> where
    S: BuildHasher + Default,
    T: Eq + Hash + Clone
[src]

type Output = HashSet<T, S>

pub fn bitxor(self, rhs: &HashSet<T, S>) -> HashSet<T, S>[src]

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

let set = &a ^ &b;

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

impl<'a> BitXor<Wrapping<i8>> for &'a Wrapping<i8>[src]

type Output = <Wrapping<i8> as BitXor<Wrapping<i8>>>::Output

impl<'a> BitXor<Wrapping<i16>> for &'a Wrapping<i16>[src]

type Output = <Wrapping<i16> as BitXor<Wrapping<i16>>>::Output

impl<'a> BitXor<Wrapping<i32>> for &'a Wrapping<i32>[src]

type Output = <Wrapping<i32> as BitXor<Wrapping<i32>>>::Output

impl<'a> BitXor<Wrapping<i64>> for &'a Wrapping<i64>[src]

type Output = <Wrapping<i64> as BitXor<Wrapping<i64>>>::Output

impl<'a> BitXor<Wrapping<i128>> for &'a Wrapping<i128>[src]

type Output = <Wrapping<i128> as BitXor<Wrapping<i128>>>::Output

impl<'a> BitXor<Wrapping<isize>> for &'a Wrapping<isize>[src]

type Output = <Wrapping<isize> as BitXor<Wrapping<isize>>>::Output

impl<'a> BitXor<Wrapping<u8>> for &'a Wrapping<u8>[src]

type Output = <Wrapping<u8> as BitXor<Wrapping<u8>>>::Output

impl<'a> BitXor<Wrapping<u16>> for &'a Wrapping<u16>[src]

type Output = <Wrapping<u16> as BitXor<Wrapping<u16>>>::Output

impl<'a> BitXor<Wrapping<u32>> for &'a Wrapping<u32>[src]

type Output = <Wrapping<u32> as BitXor<Wrapping<u32>>>::Output

impl<'a> BitXor<Wrapping<u64>> for &'a Wrapping<u64>[src]

type Output = <Wrapping<u64> as BitXor<Wrapping<u64>>>::Output

impl<'a> BitXor<Wrapping<u128>> for &'a Wrapping<u128>[src]

type Output = <Wrapping<u128> as BitXor<Wrapping<u128>>>::Output

impl<'a> BitXor<Wrapping<usize>> for &'a Wrapping<usize>[src]

type Output = <Wrapping<usize> as BitXor<Wrapping<usize>>>::Output

impl<'a, A, B, S, S2, D, E> BitXor<&'a ArrayBase<S2, E>> for &'a ArrayBase<S, D> where
    A: Clone + BitXor<B, Output = A>,
    B: Clone,
    D: Dimension,
    E: Dimension,
    S: Data<Elem = A>,
    S2: Data<Elem = B>, 
[src]

Perform elementwise bit xor between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

type Output = ArrayBase<OwnedRepr<A>, D>

impl<'a, A, B, S, S2, D, E> BitXor<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where
    A: Clone + BitXor<B, Output = A>,
    B: Clone,
    D: Dimension,
    E: Dimension,
    S: DataOwned<Elem = A> + DataMut,
    S2: Data<Elem = B>, 
[src]

Perform elementwise bit xor between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

type Output = ArrayBase<S, D>

impl<'a, A, S, D, B> BitXor<B> for &'a ArrayBase<S, D> where
    A: Clone + BitXor<B, Output = A>,
    B: ScalarOperand,
    D: Dimension,
    S: Data<Elem = A>, 
[src]

Perform elementwise bit xor between the reference self and the scalar x, and return the result as a new Array.

type Output = ArrayBase<OwnedRepr<A>, D>

impl<A, B, S, S2, D, E> BitXor<ArrayBase<S2, E>> for ArrayBase<S, D> where
    A: Clone + BitXor<B, Output = A>,
    B: Clone,
    D: Dimension,
    E: Dimension,
    S: DataOwned<Elem = A> + DataMut,
    S2: Data<Elem = B>, 
[src]

Perform elementwise bit xor between self and rhs, and return the result (based on self).

self must be an Array or ArcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

type Output = ArrayBase<S, D>

impl<A, S, D, B> BitXor<B> for ArrayBase<S, D> where
    A: Clone + BitXor<B, Output = A>,
    B: ScalarOperand,
    D: Dimension,
    S: DataOwned<Elem = A> + DataMut
[src]

Perform elementwise bit xor between self and the scalar x, and return the result (based on self).

self must be an Array or ArcArray.

type Output = ArrayBase<S, D>

Loading content...