@@ -1291,24 +1291,66 @@ rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
12911291///
12921292/// # Examples
12931293///
1294- /// A trivial implementation of `BitAndAssign`. When `Foo &= Foo` happens, it ends up
1295- /// calling `bitand_assign`, and therefore, `main` prints `Bitwise And-ing!`.
1294+ /// In this example, the `&=` operator is lifted to a trivial `Scalar` type.
12961295///
12971296/// ```
12981297/// use std::ops::BitAndAssign;
12991298///
1300- /// struct Foo;
1299+ /// #[derive(Debug, PartialEq)]
1300+ /// struct Scalar(bool);
13011301///
1302- /// impl BitAndAssign for Foo {
1303- /// fn bitand_assign(&mut self, _rhs: Foo) {
1304- /// println!("Bitwise And-ing!");
1302+ /// impl BitAndAssign for Scalar {
1303+ /// // rhs is the "right-hand side" of the expression `a &= b`
1304+ /// fn bitand_assign(&mut self, rhs: Self) {
1305+ /// *self = Scalar(self.0 & rhs.0)
13051306/// }
13061307/// }
13071308///
1308- /// # #[allow(unused_assignments)]
13091309/// fn main() {
1310- /// let mut foo = Foo;
1311- /// foo &= Foo;
1310+ /// let mut scalar = Scalar(true);
1311+ /// scalar &= Scalar(true);
1312+ /// assert_eq!(scalar, Scalar(true));
1313+ ///
1314+ /// let mut scalar = Scalar(true);
1315+ /// scalar &= Scalar(false);
1316+ /// assert_eq!(scalar, Scalar(false));
1317+ ///
1318+ /// let mut scalar = Scalar(false);
1319+ /// scalar &= Scalar(true);
1320+ /// assert_eq!(scalar, Scalar(false));
1321+ ///
1322+ /// let mut scalar = Scalar(false);
1323+ /// scalar &= Scalar(false);
1324+ /// assert_eq!(scalar, Scalar(false));
1325+ /// }
1326+ /// ```
1327+ ///
1328+ /// In this example, the `BitAndAssign` trait is implemented for a
1329+ /// `BooleanVector` struct.
1330+ ///
1331+ /// ```
1332+ /// use std::ops::BitAndAssign;
1333+ ///
1334+ /// #[derive(Debug, PartialEq)]
1335+ /// struct BooleanVector(Vec<bool>);
1336+ ///
1337+ /// impl BitAndAssign for BooleanVector {
1338+ /// // rhs is the "right-hand side" of the expression `a &= b`
1339+ /// fn bitand_assign(&mut self, rhs: Self) {
1340+ /// assert_eq!(self.0.len(), rhs.0.len());
1341+ /// *self = BooleanVector(self.0
1342+ /// .iter()
1343+ /// .zip(rhs.0.iter())
1344+ /// .map(|(x, y)| *x && *y)
1345+ /// .collect());
1346+ /// }
1347+ /// }
1348+ ///
1349+ /// fn main() {
1350+ /// let mut bv = BooleanVector(vec![true, true, false, false]);
1351+ /// bv &= BooleanVector(vec![true, false, true, false]);
1352+ /// let expected = BooleanVector(vec![true, false, false, false]);
1353+ /// assert_eq!(bv, expected);
13121354/// }
13131355/// ```
13141356#[ lang = "bitand_assign" ]
0 commit comments