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§
Required Methods§
Trait Implementations§
Source§impl<E, I> Metrics<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>> for Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> Metrics<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>> for Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> OutputMode<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>> for Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> OutputMode<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>> for Integer<E, I>where
E: Environment,
I: IntegerType,
type Case = (CircuitType<Integer<E, I>>, CircuitType<Integer<E, I>>)
Source§fn output_mode(
case: &<Integer<E, I> as OutputMode<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>>>::Case,
) -> Mode
fn output_mode( case: &<Integer<E, I> as OutputMode<dyn BitXor<Integer<E, I>, Output = Integer<E, I>>>>::Case, ) -> Mode
Returns the mode of the output.
Implementors§
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<i16>
impl BitXor for Saturating<i16>
type Output = Saturating<i16>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<i32>
impl BitXor for Saturating<i32>
type Output = Saturating<i32>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<i64>
impl BitXor for Saturating<i64>
type Output = Saturating<i64>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<i128>
impl BitXor for Saturating<i128>
type Output = Saturating<i128>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<isize>
impl BitXor for Saturating<isize>
type Output = Saturating<isize>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<u16>
impl BitXor for Saturating<u16>
type Output = Saturating<u16>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<u32>
impl BitXor for Saturating<u32>
type Output = Saturating<u32>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<u64>
impl BitXor for Saturating<u64>
type Output = Saturating<u64>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<u128>
impl BitXor for Saturating<u128>
type Output = Saturating<u128>
1.74.0 (const: unstable) · Source§impl BitXor for Saturating<usize>
impl BitXor for Saturating<usize>
type Output = Saturating<usize>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i8>> for &Saturating<i8>
impl BitXor<&Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i8>> for Saturating<i8>
impl BitXor<&Saturating<i8>> for Saturating<i8>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i16>> for &Saturating<i16>
impl BitXor<&Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i16>> for Saturating<i16>
impl BitXor<&Saturating<i16>> for Saturating<i16>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i32>> for &Saturating<i32>
impl BitXor<&Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i32>> for Saturating<i32>
impl BitXor<&Saturating<i32>> for Saturating<i32>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i64>> for &Saturating<i64>
impl BitXor<&Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i64>> for Saturating<i64>
impl BitXor<&Saturating<i64>> for Saturating<i64>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i128>> for &Saturating<i128>
impl BitXor<&Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<i128>> for Saturating<i128>
impl BitXor<&Saturating<i128>> for Saturating<i128>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<isize>> for &Saturating<isize>
impl BitXor<&Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<isize>> for Saturating<isize>
impl BitXor<&Saturating<isize>> for Saturating<isize>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u8>> for &Saturating<u8>
impl BitXor<&Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u8>> for Saturating<u8>
impl BitXor<&Saturating<u8>> for Saturating<u8>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u16>> for &Saturating<u16>
impl BitXor<&Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u16>> for Saturating<u16>
impl BitXor<&Saturating<u16>> for Saturating<u16>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u32>> for &Saturating<u32>
impl BitXor<&Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u32>> for Saturating<u32>
impl BitXor<&Saturating<u32>> for Saturating<u32>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u64>> for &Saturating<u64>
impl BitXor<&Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u64>> for Saturating<u64>
impl BitXor<&Saturating<u64>> for Saturating<u64>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u128>> for &Saturating<u128>
impl BitXor<&Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<u128>> for Saturating<u128>
impl BitXor<&Saturating<u128>> for Saturating<u128>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<usize>> for &Saturating<usize>
impl BitXor<&Saturating<usize>> for &Saturating<usize>
1.74.0 (const: unstable) · Source§impl BitXor<&Saturating<usize>> for Saturating<usize>
impl BitXor<&Saturating<usize>> for Saturating<usize>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i16>> for &core::num::wrapping::Wrapping<i16>
impl BitXor<&Wrapping<i16>> for &core::num::wrapping::Wrapping<i16>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i16>> for core::num::wrapping::Wrapping<i16>
impl BitXor<&Wrapping<i16>> for core::num::wrapping::Wrapping<i16>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i32>> for &core::num::wrapping::Wrapping<i32>
impl BitXor<&Wrapping<i32>> for &core::num::wrapping::Wrapping<i32>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i32>> for core::num::wrapping::Wrapping<i32>
impl BitXor<&Wrapping<i32>> for core::num::wrapping::Wrapping<i32>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i64>> for &core::num::wrapping::Wrapping<i64>
impl BitXor<&Wrapping<i64>> for &core::num::wrapping::Wrapping<i64>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i64>> for core::num::wrapping::Wrapping<i64>
impl BitXor<&Wrapping<i64>> for core::num::wrapping::Wrapping<i64>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
impl BitXor<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<i128>> for core::num::wrapping::Wrapping<i128>
impl BitXor<&Wrapping<i128>> for core::num::wrapping::Wrapping<i128>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl BitXor<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
impl BitXor<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u16>> for &core::num::wrapping::Wrapping<u16>
impl BitXor<&Wrapping<u16>> for &core::num::wrapping::Wrapping<u16>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u16>> for core::num::wrapping::Wrapping<u16>
impl BitXor<&Wrapping<u16>> for core::num::wrapping::Wrapping<u16>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u32>> for &core::num::wrapping::Wrapping<u32>
impl BitXor<&Wrapping<u32>> for &core::num::wrapping::Wrapping<u32>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u32>> for core::num::wrapping::Wrapping<u32>
impl BitXor<&Wrapping<u32>> for core::num::wrapping::Wrapping<u32>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u64>> for &core::num::wrapping::Wrapping<u64>
impl BitXor<&Wrapping<u64>> for &core::num::wrapping::Wrapping<u64>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u64>> for core::num::wrapping::Wrapping<u64>
impl BitXor<&Wrapping<u64>> for core::num::wrapping::Wrapping<u64>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
impl BitXor<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<u128>> for core::num::wrapping::Wrapping<u128>
impl BitXor<&Wrapping<u128>> for core::num::wrapping::Wrapping<u128>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl BitXor<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
1.14.0 (const: unstable) · Source§impl BitXor<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
impl BitXor<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<i8>> for &Saturating<i8>
impl BitXor<Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<i16>> for &Saturating<i16>
impl BitXor<Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<i32>> for &Saturating<i32>
impl BitXor<Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<i64>> for &Saturating<i64>
impl BitXor<Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<i128>> for &Saturating<i128>
impl BitXor<Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<isize>> for &Saturating<isize>
impl BitXor<Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<u8>> for &Saturating<u8>
impl BitXor<Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<u16>> for &Saturating<u16>
impl BitXor<Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<u32>> for &Saturating<u32>
impl BitXor<Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<u64>> for &Saturating<u64>
impl BitXor<Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<u128>> for &Saturating<u128>
impl BitXor<Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl BitXor<Saturating<usize>> for &Saturating<usize>
impl BitXor<Saturating<usize>> for &Saturating<usize>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<i16>> for &core::num::wrapping::Wrapping<i16>
impl BitXor<Wrapping<i16>> for &core::num::wrapping::Wrapping<i16>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<i32>> for &core::num::wrapping::Wrapping<i32>
impl BitXor<Wrapping<i32>> for &core::num::wrapping::Wrapping<i32>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<i64>> for &core::num::wrapping::Wrapping<i64>
impl BitXor<Wrapping<i64>> for &core::num::wrapping::Wrapping<i64>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
impl BitXor<Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl BitXor<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<u16>> for &core::num::wrapping::Wrapping<u16>
impl BitXor<Wrapping<u16>> for &core::num::wrapping::Wrapping<u16>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<u32>> for &core::num::wrapping::Wrapping<u32>
impl BitXor<Wrapping<u32>> for &core::num::wrapping::Wrapping<u32>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<u64>> for &core::num::wrapping::Wrapping<u64>
impl BitXor<Wrapping<u64>> for &core::num::wrapping::Wrapping<u64>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
impl BitXor<Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
1.14.0 (const: unstable) · Source§impl BitXor<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl BitXor<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
Source§impl<E> BitXor for snarkvm_circuit::modules::Boolean<E>where
E: Environment,
impl<E> BitXor for snarkvm_circuit::modules::Boolean<E>where
E: Environment,
Source§impl<E> BitXor for snarkvm_console_types_boolean::Boolean<E>where
E: Environment,
impl<E> BitXor for snarkvm_console_types_boolean::Boolean<E>where
E: Environment,
Source§impl<E> BitXor<&Boolean<E>> for snarkvm_console_types_boolean::Boolean<E>where
E: Environment,
impl<E> BitXor<&Boolean<E>> for snarkvm_console_types_boolean::Boolean<E>where
E: Environment,
Source§impl<E, I> BitXor for snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor for snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> BitXor for snarkvm_console_types_integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor for snarkvm_console_types_integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> BitXor<&Integer<E, I>> for &snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor<&Integer<E, I>> for &snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> BitXor<&Integer<E, I>> for snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor<&Integer<E, I>> for snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> BitXor<&Integer<E, I>> for snarkvm_console_types_integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor<&Integer<E, I>> for snarkvm_console_types_integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<E, I> BitXor<Integer<E, I>> for &snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
impl<E, I> BitXor<Integer<E, I>> for &snarkvm_circuit::modules::modules::integers::Integer<E, I>where
E: Environment,
I: IntegerType,
Source§impl<Ul, Bl, Ur> BitXor<Ur> for UInt<Ul, Bl>
Xoring unsigned integers.
We use our PrivateXor operator and then Trim the output.
impl<Ul, Bl, Ur> BitXor<Ur> for UInt<Ul, Bl>
Xoring unsigned integers.
We use our PrivateXor operator and then Trim the output.