@@ -1564,24 +1564,66 @@ rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
1564
1564
///
1565
1565
/// # Examples
1566
1566
///
1567
- /// A trivial implementation of `BitAndAssign`. When `Foo &= Foo` happens, it ends up
1568
- /// calling `bitand_assign`, and therefore, `main` prints `Bitwise And-ing!`.
1567
+ /// In this example, the `&=` operator is lifted to a trivial `Scalar` type.
1569
1568
///
1570
1569
/// ```
1571
1570
/// use std::ops::BitAndAssign;
1572
1571
///
1573
- /// struct Foo;
1572
+ /// #[derive(Debug, PartialEq)]
1573
+ /// struct Scalar(bool);
1574
1574
///
1575
- /// impl BitAndAssign for Foo {
1576
- /// fn bitand_assign(&mut self, _rhs: Foo) {
1577
- /// println!("Bitwise And-ing!");
1575
+ /// impl BitAndAssign for Scalar {
1576
+ /// // rhs is the "right-hand side" of the expression `a &= b`
1577
+ /// fn bitand_assign(&mut self, rhs: Self) {
1578
+ /// *self = Scalar(self.0 & rhs.0)
1578
1579
/// }
1579
1580
/// }
1580
1581
///
1581
- /// # #[allow(unused_assignments)]
1582
1582
/// fn main() {
1583
- /// let mut foo = Foo;
1584
- /// foo &= Foo;
1583
+ /// let mut scalar = Scalar(true);
1584
+ /// scalar &= Scalar(true);
1585
+ /// assert_eq!(scalar, Scalar(true));
1586
+ ///
1587
+ /// let mut scalar = Scalar(true);
1588
+ /// scalar &= Scalar(false);
1589
+ /// assert_eq!(scalar, Scalar(false));
1590
+ ///
1591
+ /// let mut scalar = Scalar(false);
1592
+ /// scalar &= Scalar(true);
1593
+ /// assert_eq!(scalar, Scalar(false));
1594
+ ///
1595
+ /// let mut scalar = Scalar(false);
1596
+ /// scalar &= Scalar(false);
1597
+ /// assert_eq!(scalar, Scalar(false));
1598
+ /// }
1599
+ /// ```
1600
+ ///
1601
+ /// In this example, the `BitAndAssign` trait is implemented for a
1602
+ /// `BooleanVector` struct.
1603
+ ///
1604
+ /// ```
1605
+ /// use std::ops::BitAndAssign;
1606
+ ///
1607
+ /// #[derive(Debug, PartialEq)]
1608
+ /// struct BooleanVector(Vec<bool>);
1609
+ ///
1610
+ /// impl BitAndAssign for BooleanVector {
1611
+ /// // rhs is the "right-hand side" of the expression `a &= b`
1612
+ /// fn bitand_assign(&mut self, rhs: Self) {
1613
+ /// assert_eq!(self.0.len(), rhs.0.len());
1614
+ /// *self = BooleanVector(self.0
1615
+ /// .iter()
1616
+ /// .zip(rhs.0.iter())
1617
+ /// .map(|(x, y)| *x && *y)
1618
+ /// .collect());
1619
+ /// }
1620
+ /// }
1621
+ ///
1622
+ /// fn main() {
1623
+ /// let mut bv = BooleanVector(vec![true, true, false, false]);
1624
+ /// bv &= BooleanVector(vec![true, false, true, false]);
1625
+ /// let expected = BooleanVector(vec![true, false, false, false]);
1626
+ /// assert_eq!(bv, expected);
1585
1627
/// }
1586
1628
/// ```
1587
1629
#[ lang = "bitand_assign" ]
0 commit comments