@@ -1291,24 +1291,66 @@ rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
1291
1291
///
1292
1292
/// # Examples
1293
1293
///
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.
1296
1295
///
1297
1296
/// ```
1298
1297
/// use std::ops::BitAndAssign;
1299
1298
///
1300
- /// struct Foo;
1299
+ /// #[derive(Debug, PartialEq)]
1300
+ /// struct Scalar(bool);
1301
1301
///
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)
1305
1306
/// }
1306
1307
/// }
1307
1308
///
1308
- /// # #[allow(unused_assignments)]
1309
1309
/// 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);
1312
1354
/// }
1313
1355
/// ```
1314
1356
#[ lang = "bitand_assign" ]
0 commit comments