Skip to content

Commit

Permalink
Auto merge of rust-lang#121952 - JarvisCraft:master, r=workingjubilee
Browse files Browse the repository at this point in the history
feat: implement `{Div,Rem}Assign<NonZero<X>>` on `X`

# Description

This PR implements `DivAssign<X>` and `RemAssign<X>` on `X` as suggested in rust-lang/libs-team#346.

Since this is just a trait implementation on an already stable type, for which non-assign operator traits are already stable, I suggest that it is an insta-stable feature.
  • Loading branch information
bors committed Mar 18, 2024
2 parents 5608c7f + e7d3970 commit 80e5694
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion library/core/src/num/nonzero.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::fmt;
use crate::hash::{Hash, Hasher};
use crate::intrinsics;
use crate::marker::{Freeze, StructuralPartialEq};
use crate::ops::{BitOr, BitOrAssign, Div, Neg, Rem};
use crate::ops::{BitOr, BitOrAssign, Div, DivAssign, Neg, Rem, RemAssign};
use crate::panic::{RefUnwindSafe, UnwindSafe};
use crate::ptr;
use crate::str::FromStr;
Expand Down Expand Up @@ -849,6 +849,16 @@ macro_rules! nonzero_integer_signedness_dependent_impls {
}
}

#[stable(feature = "nonzero_div_assign", since = "CURRENT_RUSTC_VERSION")]
impl DivAssign<$Ty> for $Int {
/// This operation rounds towards zero,
/// truncating any fractional part of the exact result, and cannot panic.
#[inline]
fn div_assign(&mut self, other: $Ty) {
*self = *self / other;
}
}

#[stable(feature = "nonzero_div", since = "1.51.0")]
impl Rem<$Ty> for $Int {
type Output = $Int;
Expand All @@ -861,6 +871,15 @@ macro_rules! nonzero_integer_signedness_dependent_impls {
unsafe { intrinsics::unchecked_rem(self, other.get()) }
}
}

#[stable(feature = "nonzero_div_assign", since = "CURRENT_RUSTC_VERSION")]
impl RemAssign<$Ty> for $Int {
/// This operation satisfies `n % d == n - (n / d) * d`, and cannot panic.
#[inline]
fn rem_assign(&mut self, other: $Ty) {
*self = *self % other;
}
}
};

// Impls for signed nonzero types only.
Expand Down

0 comments on commit 80e5694

Please sign in to comment.