Skip to content

Commit 1c0dc18

Browse files
committedDec 28, 2021
Add {Add,Sub,Mul,Div,Rem,BitXor,BitOr,BitAnd}{,Assign}<$t> to Saturating<$t>
1 parent e91ad5f commit 1c0dc18

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed
 

‎library/core/src/num/saturating.rs

+187
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,18 @@ macro_rules! saturating_impl {
217217
forward_ref_binop! { impl Add, add for Saturating<$t>, Saturating<$t>,
218218
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
219219

220+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
221+
impl Add<$t> for Saturating<$t> {
222+
type Output = Saturating<$t>;
223+
224+
#[inline]
225+
fn add(self, other: $t) -> Saturating<$t> {
226+
Saturating(self.0.saturating_add(other))
227+
}
228+
}
229+
forward_ref_binop! { impl Add, add for Saturating<$t>, $t,
230+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
231+
220232
#[unstable(feature = "saturating_int_impl", issue = "87920")]
221233
impl AddAssign for Saturating<$t> {
222234
#[inline]
@@ -226,6 +238,15 @@ macro_rules! saturating_impl {
226238
}
227239
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, Saturating<$t> }
228240

241+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
242+
impl AddAssign<$t> for Saturating<$t> {
243+
#[inline]
244+
fn add_assign(&mut self, other: $t) {
245+
*self = *self + other;
246+
}
247+
}
248+
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, $t }
249+
229250
#[unstable(feature = "saturating_int_impl", issue = "87920")]
230251
impl Sub for Saturating<$t> {
231252
type Output = Saturating<$t>;
@@ -238,6 +259,18 @@ macro_rules! saturating_impl {
238259
forward_ref_binop! { impl Sub, sub for Saturating<$t>, Saturating<$t>,
239260
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
240261

262+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
263+
impl Sub<$t> for Saturating<$t> {
264+
type Output = Saturating<$t>;
265+
266+
#[inline]
267+
fn sub(self, other: $t) -> Saturating<$t> {
268+
Saturating(self.0.saturating_sub(other))
269+
}
270+
}
271+
forward_ref_binop! { impl Sub, sub for Saturating<$t>, $t,
272+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
273+
241274
#[unstable(feature = "saturating_int_impl", issue = "87920")]
242275
impl SubAssign for Saturating<$t> {
243276
#[inline]
@@ -247,6 +280,15 @@ macro_rules! saturating_impl {
247280
}
248281
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, Saturating<$t> }
249282

283+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
284+
impl SubAssign<$t> for Saturating<$t> {
285+
#[inline]
286+
fn sub_assign(&mut self, other: $t) {
287+
*self = *self - other;
288+
}
289+
}
290+
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, $t }
291+
250292
#[unstable(feature = "saturating_int_impl", issue = "87920")]
251293
impl Mul for Saturating<$t> {
252294
type Output = Saturating<$t>;
@@ -259,6 +301,18 @@ macro_rules! saturating_impl {
259301
forward_ref_binop! { impl Mul, mul for Saturating<$t>, Saturating<$t>,
260302
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
261303

304+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
305+
impl Mul<$t> for Saturating<$t> {
306+
type Output = Saturating<$t>;
307+
308+
#[inline]
309+
fn mul(self, other: $t) -> Saturating<$t> {
310+
Saturating(self.0.saturating_mul(other))
311+
}
312+
}
313+
forward_ref_binop! { impl Mul, mul for Saturating<$t>, $t,
314+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
315+
262316
#[unstable(feature = "saturating_int_impl", issue = "87920")]
263317
impl MulAssign for Saturating<$t> {
264318
#[inline]
@@ -268,6 +322,15 @@ macro_rules! saturating_impl {
268322
}
269323
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, Saturating<$t> }
270324

325+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
326+
impl MulAssign<$t> for Saturating<$t> {
327+
#[inline]
328+
fn mul_assign(&mut self, other: $t) {
329+
*self = *self * other;
330+
}
331+
}
332+
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, $t }
333+
271334
/// # Examples
272335
///
273336
/// Basic usage:
@@ -299,6 +362,37 @@ macro_rules! saturating_impl {
299362
forward_ref_binop! { impl Div, div for Saturating<$t>, Saturating<$t>,
300363
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
301364

365+
/// # Examples
366+
///
367+
/// Basic usage:
368+
///
369+
/// ```
370+
/// #![feature(saturating_int_impl, saturating_int_assign_impl)]
371+
/// use std::num::Saturating;
372+
///
373+
#[doc = concat!("assert_eq!(Saturating(2", stringify!($t), "), Saturating(5", stringify!($t), ") / 2);")]
374+
#[doc = concat!("assert_eq!(Saturating(", stringify!($t), "::MAX), Saturating(", stringify!($t), "::MAX) / 1);")]
375+
#[doc = concat!("assert_eq!(Saturating(", stringify!($t), "::MIN), Saturating(", stringify!($t), "::MIN) / 1);")]
376+
/// ```
377+
///
378+
/// ```should_panic
379+
/// #![feature(saturating_int_impl, saturating_int_assign_impl)]
380+
/// use std::num::Saturating;
381+
///
382+
#[doc = concat!("let _ = Saturating(0", stringify!($t), ") / 0;")]
383+
/// ```
384+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
385+
impl Div<$t> for Saturating<$t> {
386+
type Output = Saturating<$t>;
387+
388+
#[inline]
389+
fn div(self, other: $t) -> Saturating<$t> {
390+
Saturating(self.0.saturating_div(other))
391+
}
392+
}
393+
forward_ref_binop! { impl Div, div for Saturating<$t>, $t,
394+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
395+
302396
#[unstable(feature = "saturating_int_impl", issue = "87920")]
303397
impl DivAssign for Saturating<$t> {
304398
#[inline]
@@ -308,6 +402,15 @@ macro_rules! saturating_impl {
308402
}
309403
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, Saturating<$t> }
310404

405+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
406+
impl DivAssign<$t> for Saturating<$t> {
407+
#[inline]
408+
fn div_assign(&mut self, other: $t) {
409+
*self = *self / other;
410+
}
411+
}
412+
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, $t }
413+
311414
#[unstable(feature = "saturating_int_impl", issue = "87920")]
312415
impl Rem for Saturating<$t> {
313416
type Output = Saturating<$t>;
@@ -320,6 +423,18 @@ macro_rules! saturating_impl {
320423
forward_ref_binop! { impl Rem, rem for Saturating<$t>, Saturating<$t>,
321424
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
322425

426+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
427+
impl Rem<$t> for Saturating<$t> {
428+
type Output = Saturating<$t>;
429+
430+
#[inline]
431+
fn rem(self, other: $t) -> Saturating<$t> {
432+
Saturating(self.0.rem(other))
433+
}
434+
}
435+
forward_ref_binop! { impl Rem, rem for Saturating<$t>, $t,
436+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
437+
323438
#[unstable(feature = "saturating_int_impl", issue = "87920")]
324439
impl RemAssign for Saturating<$t> {
325440
#[inline]
@@ -329,6 +444,15 @@ macro_rules! saturating_impl {
329444
}
330445
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, Saturating<$t> }
331446

447+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
448+
impl RemAssign<$t> for Saturating<$t> {
449+
#[inline]
450+
fn rem_assign(&mut self, other: $t) {
451+
*self = *self % other;
452+
}
453+
}
454+
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, $t }
455+
332456
#[unstable(feature = "saturating_int_impl", issue = "87920")]
333457
impl Not for Saturating<$t> {
334458
type Output = Saturating<$t>;
@@ -353,6 +477,18 @@ macro_rules! saturating_impl {
353477
forward_ref_binop! { impl BitXor, bitxor for Saturating<$t>, Saturating<$t>,
354478
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
355479

480+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
481+
impl BitXor<$t> for Saturating<$t> {
482+
type Output = Saturating<$t>;
483+
484+
#[inline]
485+
fn bitxor(self, other: $t) -> Saturating<$t> {
486+
Saturating(self.0 ^ other)
487+
}
488+
}
489+
forward_ref_binop! { impl BitXor, bitxor for Saturating<$t>, $t,
490+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
491+
356492
#[unstable(feature = "saturating_int_impl", issue = "87920")]
357493
impl BitXorAssign for Saturating<$t> {
358494
#[inline]
@@ -362,6 +498,15 @@ macro_rules! saturating_impl {
362498
}
363499
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, Saturating<$t> }
364500

501+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
502+
impl BitXorAssign<$t> for Saturating<$t> {
503+
#[inline]
504+
fn bitxor_assign(&mut self, other: $t) {
505+
*self = *self ^ other;
506+
}
507+
}
508+
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, $t }
509+
365510
#[unstable(feature = "saturating_int_impl", issue = "87920")]
366511
impl BitOr for Saturating<$t> {
367512
type Output = Saturating<$t>;
@@ -374,6 +519,18 @@ macro_rules! saturating_impl {
374519
forward_ref_binop! { impl BitOr, bitor for Saturating<$t>, Saturating<$t>,
375520
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
376521

522+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
523+
impl BitOr<$t> for Saturating<$t> {
524+
type Output = Saturating<$t>;
525+
526+
#[inline]
527+
fn bitor(self, other: $t) -> Saturating<$t> {
528+
Saturating(self.0 | other)
529+
}
530+
}
531+
forward_ref_binop! { impl BitOr, bitor for Saturating<$t>, $t,
532+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
533+
377534
#[unstable(feature = "saturating_int_impl", issue = "87920")]
378535
impl BitOrAssign for Saturating<$t> {
379536
#[inline]
@@ -383,6 +540,15 @@ macro_rules! saturating_impl {
383540
}
384541
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, Saturating<$t> }
385542

543+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
544+
impl BitOrAssign<$t> for Saturating<$t> {
545+
#[inline]
546+
fn bitor_assign(&mut self, other: $t) {
547+
*self = *self | other;
548+
}
549+
}
550+
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, $t }
551+
386552
#[unstable(feature = "saturating_int_impl", issue = "87920")]
387553
impl BitAnd for Saturating<$t> {
388554
type Output = Saturating<$t>;
@@ -395,6 +561,18 @@ macro_rules! saturating_impl {
395561
forward_ref_binop! { impl BitAnd, bitand for Saturating<$t>, Saturating<$t>,
396562
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
397563

564+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
565+
impl BitAnd<$t> for Saturating<$t> {
566+
type Output = Saturating<$t>;
567+
568+
#[inline]
569+
fn bitand(self, other: $t) -> Saturating<$t> {
570+
Saturating(self.0 & other)
571+
}
572+
}
573+
forward_ref_binop! { impl BitAnd, bitand for Saturating<$t>, $t,
574+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")] }
575+
398576
#[unstable(feature = "saturating_int_impl", issue = "87920")]
399577
impl BitAndAssign for Saturating<$t> {
400578
#[inline]
@@ -404,6 +582,15 @@ macro_rules! saturating_impl {
404582
}
405583
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, Saturating<$t> }
406584

585+
#[unstable(feature = "saturating_int_assign_impl", issue = "92354")]
586+
impl BitAndAssign<$t> for Saturating<$t> {
587+
#[inline]
588+
fn bitand_assign(&mut self, other: $t) {
589+
*self = *self & other;
590+
}
591+
}
592+
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, $t }
593+
407594
)*)
408595
}
409596

0 commit comments

Comments
 (0)
Please sign in to comment.