Trait multiversx_sc_snippets::imports::BitXor

1.0.0 · source ·
pub trait BitXor<Rhs = Self> {
    type Output;

    // Required method
    fn bitxor(self, rhs: Rhs) -> Self::Output;
}
Expand description

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);

Required Associated Types§

1.0.0 · source

type Output

The resulting type after applying the ^ operator.

Required Methods§

1.0.0 · source

fn bitxor(self, rhs: Rhs) -> Self::Output

Performs the ^ operation.

§Examples
assert_eq!(true ^ false, true);
assert_eq!(true ^ true, false);
assert_eq!(5u8 ^ 1u8, 4);
assert_eq!(5u8 ^ 2u8, 7);

Implementors§

1.0.0 · source§

impl BitXor for bool

§

type Output = bool

1.0.0 · source§

impl BitXor for i8

§

type Output = i8

1.0.0 · source§

impl BitXor for i16

§

type Output = i16

1.0.0 · source§

impl BitXor for i32

§

type Output = i32

1.0.0 · source§

impl BitXor for i64

§

type Output = i64

1.0.0 · source§

impl BitXor for i128

§

type Output = i128

1.0.0 · source§

impl BitXor for isize

1.0.0 · source§

impl BitXor for u8

§

type Output = u8

1.0.0 · source§

impl BitXor for u16

§

type Output = u16

1.0.0 · source§

impl BitXor for u32

§

type Output = u32

1.0.0 · source§

impl BitXor for u64

§

type Output = u64

1.0.0 · source§

impl BitXor for u128

§

type Output = u128

1.0.0 · source§

impl BitXor for usize

1.74.0 · source§

impl BitXor for Saturating<i8>

1.74.0 · source§

impl BitXor for Saturating<i16>

1.74.0 · source§

impl BitXor for Saturating<i32>

1.74.0 · source§

impl BitXor for Saturating<i64>

1.74.0 · source§

impl BitXor for Saturating<i128>

1.74.0 · source§

impl BitXor for Saturating<isize>

1.74.0 · source§

impl BitXor for Saturating<u8>

1.74.0 · source§

impl BitXor for Saturating<u16>

1.74.0 · source§

impl BitXor for Saturating<u32>

1.74.0 · source§

impl BitXor for Saturating<u64>

1.74.0 · source§

impl BitXor for Saturating<u128>

1.74.0 · source§

impl BitXor for Saturating<usize>

1.0.0 · source§

impl BitXor for Wrapping<i8>

1.0.0 · source§

impl BitXor for Wrapping<i16>

1.0.0 · source§

impl BitXor for Wrapping<i32>

1.0.0 · source§

impl BitXor for Wrapping<i64>

1.0.0 · source§

impl BitXor for Wrapping<i128>

1.0.0 · source§

impl BitXor for Wrapping<isize>

1.0.0 · source§

impl BitXor for Wrapping<u8>

1.0.0 · source§

impl BitXor for Wrapping<u16>

1.0.0 · source§

impl BitXor for Wrapping<u32>

1.0.0 · source§

impl BitXor for Wrapping<u64>

1.0.0 · source§

impl BitXor for Wrapping<u128>

1.0.0 · source§

impl BitXor for Wrapping<usize>

source§

impl BitXor for VMCodeMetadata

source§

impl BitXor for multiversx_chain_vm::types::vm_esdt_local_role_flags::EsdtLocalRoleFlags

source§

impl BitXor for CipherCtxFlags

source§

impl BitXor for CMSOptions

source§

impl BitXor for OcspFlag

source§

impl BitXor for Pkcs7Flags

source§

impl BitXor for ExtensionContext

source§

impl BitXor for ShutdownState

source§

impl BitXor for SslMode

source§

impl BitXor for SslOptions

source§

impl BitXor for SslSessionCacheMode

source§

impl BitXor for SslVerifyMode

source§

impl BitXor for X509CheckFlags

source§

impl BitXor for X509VerifyFlags

source§

impl BitXor for Choice

source§

impl BitXor for B0

Xor between 0 and 0 ( 0 ^ 0 = 0)

§

type Output = B0

source§

impl BitXor for B1

Xor between 1 and 1 ( 1 ^ 1 = 0)

§

type Output = B0

source§

impl BitXor for WasmFeatures

source§

impl BitXor for SegmentFlags

source§

impl BitXor for SymbolFlags

source§

impl BitXor for CodeMetadata

source§

impl BitXor for multiversx_sc_snippets::imports::EsdtLocalRoleFlags

source§

impl BitXor for BigInt

source§

impl BitXor for multiversx_sc_snippets::imports::RustBigUint

1.0.0 · source§

impl BitXor<&bool> for &bool

§

type Output = <bool as BitXor>::Output

1.0.0 · source§

impl BitXor<&bool> for bool

§

type Output = <bool as BitXor>::Output

1.0.0 · source§

impl BitXor<&i8> for &i8

§

type Output = <i8 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i8> for i8

§

type Output = <i8 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i16> for &i16

§

type Output = <i16 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i16> for i16

§

type Output = <i16 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i32> for &i32

§

type Output = <i32 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i32> for i32

§

type Output = <i32 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i64> for &i64

§

type Output = <i64 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i64> for i64

§

type Output = <i64 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i128> for &i128

§

type Output = <i128 as BitXor>::Output

1.0.0 · source§

impl BitXor<&i128> for i128

§

type Output = <i128 as BitXor>::Output

1.0.0 · source§

impl BitXor<&isize> for &isize

1.0.0 · source§

impl BitXor<&isize> for isize

1.0.0 · source§

impl BitXor<&u8> for &u8

§

type Output = <u8 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u8> for u8

§

type Output = <u8 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u16> for &u16

§

type Output = <u16 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u16> for u16

§

type Output = <u16 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u32> for &u32

§

type Output = <u32 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u32> for u32

§

type Output = <u32 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u64> for &u64

§

type Output = <u64 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u64> for u64

§

type Output = <u64 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u128> for &u128

§

type Output = <u128 as BitXor>::Output

1.0.0 · source§

impl BitXor<&u128> for u128

§

type Output = <u128 as BitXor>::Output

1.0.0 · source§

impl BitXor<&usize> for &usize

1.0.0 · source§

impl BitXor<&usize> for usize

1.74.0 · source§

impl BitXor<&Saturating<i8>> for &Saturating<i8>

1.74.0 · source§

impl BitXor<&Saturating<i8>> for Saturating<i8>

1.74.0 · source§

impl BitXor<&Saturating<i16>> for &Saturating<i16>

1.74.0 · source§

impl BitXor<&Saturating<i16>> for Saturating<i16>

1.74.0 · source§

impl BitXor<&Saturating<i32>> for &Saturating<i32>

1.74.0 · source§

impl BitXor<&Saturating<i32>> for Saturating<i32>

1.74.0 · source§

impl BitXor<&Saturating<i64>> for &Saturating<i64>

1.74.0 · source§

impl BitXor<&Saturating<i64>> for Saturating<i64>

1.74.0 · source§

impl BitXor<&Saturating<i128>> for &Saturating<i128>

1.74.0 · source§

impl BitXor<&Saturating<i128>> for Saturating<i128>

1.74.0 · source§

impl BitXor<&Saturating<isize>> for &Saturating<isize>

1.74.0 · source§

impl BitXor<&Saturating<isize>> for Saturating<isize>

1.74.0 · source§

impl BitXor<&Saturating<u8>> for &Saturating<u8>

1.74.0 · source§

impl BitXor<&Saturating<u8>> for Saturating<u8>

1.74.0 · source§

impl BitXor<&Saturating<u16>> for &Saturating<u16>

1.74.0 · source§

impl BitXor<&Saturating<u16>> for Saturating<u16>

1.74.0 · source§

impl BitXor<&Saturating<u32>> for &Saturating<u32>

1.74.0 · source§

impl BitXor<&Saturating<u32>> for Saturating<u32>

1.74.0 · source§

impl BitXor<&Saturating<u64>> for &Saturating<u64>

1.74.0 · source§

impl BitXor<&Saturating<u64>> for Saturating<u64>

1.74.0 · source§

impl BitXor<&Saturating<u128>> for &Saturating<u128>

1.74.0 · source§

impl BitXor<&Saturating<u128>> for Saturating<u128>

1.74.0 · source§

impl BitXor<&Saturating<usize>> for &Saturating<usize>

1.74.0 · source§

impl BitXor<&Saturating<usize>> for Saturating<usize>

1.14.0 · source§

impl BitXor<&Wrapping<i8>> for &Wrapping<i8>

1.14.0 · source§

impl BitXor<&Wrapping<i8>> for Wrapping<i8>

1.14.0 · source§

impl BitXor<&Wrapping<i16>> for &Wrapping<i16>

1.14.0 · source§

impl BitXor<&Wrapping<i16>> for Wrapping<i16>

1.14.0 · source§

impl BitXor<&Wrapping<i32>> for &Wrapping<i32>

1.14.0 · source§

impl BitXor<&Wrapping<i32>> for Wrapping<i32>

1.14.0 · source§

impl BitXor<&Wrapping<i64>> for &Wrapping<i64>

1.14.0 · source§

impl BitXor<&Wrapping<i64>> for Wrapping<i64>

1.14.0 · source§

impl BitXor<&Wrapping<i128>> for &Wrapping<i128>

1.14.0 · source§

impl BitXor<&Wrapping<i128>> for Wrapping<i128>

1.14.0 · source§

impl BitXor<&Wrapping<isize>> for &Wrapping<isize>

1.14.0 · source§

impl BitXor<&Wrapping<isize>> for Wrapping<isize>

1.14.0 · source§

impl BitXor<&Wrapping<u8>> for &Wrapping<u8>

1.14.0 · source§

impl BitXor<&Wrapping<u8>> for Wrapping<u8>

1.14.0 · source§

impl BitXor<&Wrapping<u16>> for &Wrapping<u16>

1.14.0 · source§

impl BitXor<&Wrapping<u16>> for Wrapping<u16>

1.14.0 · source§

impl BitXor<&Wrapping<u32>> for &Wrapping<u32>

1.14.0 · source§

impl BitXor<&Wrapping<u32>> for Wrapping<u32>

1.14.0 · source§

impl BitXor<&Wrapping<u64>> for &Wrapping<u64>

1.14.0 · source§

impl BitXor<&Wrapping<u64>> for Wrapping<u64>

1.14.0 · source§

impl BitXor<&Wrapping<u128>> for &Wrapping<u128>

1.14.0 · source§

impl BitXor<&Wrapping<u128>> for Wrapping<u128>

1.14.0 · source§

impl BitXor<&Wrapping<usize>> for &Wrapping<usize>

1.14.0 · source§

impl BitXor<&Wrapping<usize>> for Wrapping<usize>

source§

impl BitXor<&BigInt> for &BigInt

source§

impl BitXor<&BigInt> for BigInt

source§

impl BitXor<&BigUint> for &multiversx_sc_snippets::imports::RustBigUint

source§

impl BitXor<&BigUint> for multiversx_sc_snippets::imports::RustBigUint

source§

impl BitXor<B0> for B1

Xor between 1 and 0 ( 1 ^ 0 = 1)

§

type Output = B1

source§

impl BitXor<B1> for B0

Xor between 0 and 1 ( 0 ^ 1 = 1)

§

type Output = B1

source§

impl BitXor<BigInt> for &BigInt

source§

impl BitXor<BigUint> for &multiversx_sc_snippets::imports::RustBigUint

1.0.0 · source§

impl<'a> BitXor<bool> for &'a bool

§

type Output = <bool as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<i8> for &'a i8

§

type Output = <i8 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<i16> for &'a i16

§

type Output = <i16 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<i32> for &'a i32

§

type Output = <i32 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<i64> for &'a i64

§

type Output = <i64 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<i128> for &'a i128

§

type Output = <i128 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<isize> for &'a isize

1.0.0 · source§

impl<'a> BitXor<u8> for &'a u8

§

type Output = <u8 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<u16> for &'a u16

§

type Output = <u16 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<u32> for &'a u32

§

type Output = <u32 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<u64> for &'a u64

§

type Output = <u64 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<u128> for &'a u128

§

type Output = <u128 as BitXor>::Output

1.0.0 · source§

impl<'a> BitXor<usize> for &'a usize

1.74.0 · source§

impl<'a> BitXor<Saturating<i8>> for &'a Saturating<i8>

1.74.0 · source§

impl<'a> BitXor<Saturating<i16>> for &'a Saturating<i16>

1.74.0 · source§

impl<'a> BitXor<Saturating<i32>> for &'a Saturating<i32>

1.74.0 · source§

impl<'a> BitXor<Saturating<i64>> for &'a Saturating<i64>

1.74.0 · source§

impl<'a> BitXor<Saturating<i128>> for &'a Saturating<i128>

1.74.0 · source§

impl<'a> BitXor<Saturating<isize>> for &'a Saturating<isize>

1.74.0 · source§

impl<'a> BitXor<Saturating<u8>> for &'a Saturating<u8>

1.74.0 · source§

impl<'a> BitXor<Saturating<u16>> for &'a Saturating<u16>

1.74.0 · source§

impl<'a> BitXor<Saturating<u32>> for &'a Saturating<u32>

1.74.0 · source§

impl<'a> BitXor<Saturating<u64>> for &'a Saturating<u64>

1.74.0 · source§

impl<'a> BitXor<Saturating<u128>> for &'a Saturating<u128>

1.74.0 · source§

impl<'a> BitXor<Saturating<usize>> for &'a Saturating<usize>

1.14.0 · source§

impl<'a> BitXor<Wrapping<i8>> for &'a Wrapping<i8>

1.14.0 · source§

impl<'a> BitXor<Wrapping<i16>> for &'a Wrapping<i16>

1.14.0 · source§

impl<'a> BitXor<Wrapping<i32>> for &'a Wrapping<i32>

1.14.0 · source§

impl<'a> BitXor<Wrapping<i64>> for &'a Wrapping<i64>

1.14.0 · source§

impl<'a> BitXor<Wrapping<i128>> for &'a Wrapping<i128>

1.14.0 · source§

impl<'a> BitXor<Wrapping<isize>> for &'a Wrapping<isize>

1.14.0 · source§

impl<'a> BitXor<Wrapping<u8>> for &'a Wrapping<u8>

1.14.0 · source§

impl<'a> BitXor<Wrapping<u16>> for &'a Wrapping<u16>

1.14.0 · source§

impl<'a> BitXor<Wrapping<u32>> for &'a Wrapping<u32>

1.14.0 · source§

impl<'a> BitXor<Wrapping<u64>> for &'a Wrapping<u64>

1.14.0 · source§

impl<'a> BitXor<Wrapping<u128>> for &'a Wrapping<u128>

1.14.0 · source§

impl<'a> BitXor<Wrapping<usize>> for &'a Wrapping<usize>

source§

impl<'a, 'b, M> BitXor<&'b BigUint<M>> for &'a multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<'a, M> BitXor<u32> for &'a multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<'a, M> BitXor<u64> for &'a multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<'a, T> BitXor for &'a Set<T>
where T: Eq + Hash + Ord + Clone + 'a,

§

type Output = Set<T>

source§

impl<'b, M> BitXor<&'b BigUint<M>> for multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<'lhs, 'rhs, T, const N: usize> BitXor<&'rhs Simd<T, N>> for &'lhs Simd<T, N>
where T: SimdElement, Simd<T, N>: BitXor<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

§

type Output = Simd<T, N>

source§

impl<M> BitXor for multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<M> BitXor<u32> for multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

source§

impl<M> BitXor<u64> for multiversx_sc_snippets::imports::BigUint<M>
where M: ManagedTypeApi,

§

type Output = BigUint<M>

1.0.0 · source§

impl<T, A> BitXor<&BTreeSet<T, A>> for &BTreeSet<T, A>
where T: Ord + Clone, A: Allocator + Clone,

§

type Output = BTreeSet<T, A>

source§

impl<T, S1, S2> BitXor<&IndexSet<T, S2>> for &IndexSet<T, S1>
where T: Eq + Hash + Clone, S1: BuildHasher + Default, S2: BuildHasher,

§

type Output = IndexSet<T, S1>

1.0.0 · source§

impl<T, S> BitXor<&HashSet<T, S>> for &std::collections::hash::set::HashSet<T, S>
where T: Eq + Hash + Clone, S: BuildHasher + Default,

§

type Output = HashSet<T, S>

source§

impl<T, S> BitXor<&HashSet<T, S>> for &hashbrown::set::HashSet<T, S>
where T: Eq + Hash + Clone, S: BuildHasher + Default,

§

type Output = HashSet<T, S>

source§

impl<T, const N: usize> BitXor for Mask<T, N>

§

type Output = Mask<T, N>

source§

impl<T, const N: usize> BitXor<&Simd<T, N>> for Simd<T, N>
where T: SimdElement, Simd<T, N>: BitXor<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

§

type Output = Simd<T, N>

source§

impl<T, const N: usize> BitXor<bool> for Mask<T, N>

§

type Output = Mask<T, N>

source§

impl<T, const N: usize> BitXor<Mask<T, N>> for bool

§

type Output = Mask<T, N>

source§

impl<T, const N: usize> BitXor<Simd<T, N>> for &Simd<T, N>
where T: SimdElement, Simd<T, N>: BitXor<Output = Simd<T, N>>, LaneCount<N>: SupportedLaneCount,

§

type Output = Simd<T, N>

source§

impl<Ul, Bl, Ur> BitXor<Ur> for UInt<Ul, Bl>
where Ul: Unsigned, Bl: Bit, Ur: Unsigned, UInt<Ul, Bl>: PrivateXor<Ur>, <UInt<Ul, Bl> as PrivateXor<Ur>>::Output: Trim,

Xoring unsigned integers. We use our PrivateXor operator and then Trim the output.

§

type Output = <<UInt<Ul, Bl> as PrivateXor<Ur>>::Output as Trim>::Output

source§

impl<Ur> BitXor<Ur> for UTerm
where Ur: Unsigned,

0 ^ X = X

§

type Output = Ur

source§

impl<const N: usize> BitXor for Simd<i8, N>

§

type Output = Simd<i8, N>

source§

impl<const N: usize> BitXor for Simd<i16, N>

§

type Output = Simd<i16, N>

source§

impl<const N: usize> BitXor for Simd<i32, N>

§

type Output = Simd<i32, N>

source§

impl<const N: usize> BitXor for Simd<i64, N>

§

type Output = Simd<i64, N>

source§

impl<const N: usize> BitXor for Simd<isize, N>

§

type Output = Simd<isize, N>

source§

impl<const N: usize> BitXor for Simd<u8, N>

§

type Output = Simd<u8, N>

source§

impl<const N: usize> BitXor for Simd<u16, N>

§

type Output = Simd<u16, N>

source§

impl<const N: usize> BitXor for Simd<u32, N>

§

type Output = Simd<u32, N>

source§

impl<const N: usize> BitXor for Simd<u64, N>

§

type Output = Simd<u64, N>

source§

impl<const N: usize> BitXor for Simd<usize, N>

§

type Output = Simd<usize, N>