@@ -217,6 +217,18 @@ macro_rules! saturating_impl {
217
217
forward_ref_binop! { impl Add , add for Saturating <$t>, Saturating <$t>,
218
218
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
219
219
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
+
220
232
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
221
233
impl AddAssign for Saturating <$t> {
222
234
#[ inline]
@@ -226,6 +238,15 @@ macro_rules! saturating_impl {
226
238
}
227
239
forward_ref_op_assign! { impl AddAssign , add_assign for Saturating <$t>, Saturating <$t> }
228
240
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
+
229
250
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
230
251
impl Sub for Saturating <$t> {
231
252
type Output = Saturating <$t>;
@@ -238,6 +259,18 @@ macro_rules! saturating_impl {
238
259
forward_ref_binop! { impl Sub , sub for Saturating <$t>, Saturating <$t>,
239
260
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
240
261
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
+
241
274
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
242
275
impl SubAssign for Saturating <$t> {
243
276
#[ inline]
@@ -247,6 +280,15 @@ macro_rules! saturating_impl {
247
280
}
248
281
forward_ref_op_assign! { impl SubAssign , sub_assign for Saturating <$t>, Saturating <$t> }
249
282
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
+
250
292
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
251
293
impl Mul for Saturating <$t> {
252
294
type Output = Saturating <$t>;
@@ -259,6 +301,18 @@ macro_rules! saturating_impl {
259
301
forward_ref_binop! { impl Mul , mul for Saturating <$t>, Saturating <$t>,
260
302
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
261
303
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
+
262
316
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
263
317
impl MulAssign for Saturating <$t> {
264
318
#[ inline]
@@ -268,6 +322,15 @@ macro_rules! saturating_impl {
268
322
}
269
323
forward_ref_op_assign! { impl MulAssign , mul_assign for Saturating <$t>, Saturating <$t> }
270
324
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
+
271
334
/// # Examples
272
335
///
273
336
/// Basic usage:
@@ -299,6 +362,37 @@ macro_rules! saturating_impl {
299
362
forward_ref_binop! { impl Div , div for Saturating <$t>, Saturating <$t>,
300
363
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
301
364
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
+
302
396
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
303
397
impl DivAssign for Saturating <$t> {
304
398
#[ inline]
@@ -308,6 +402,15 @@ macro_rules! saturating_impl {
308
402
}
309
403
forward_ref_op_assign! { impl DivAssign , div_assign for Saturating <$t>, Saturating <$t> }
310
404
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
+
311
414
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
312
415
impl Rem for Saturating <$t> {
313
416
type Output = Saturating <$t>;
@@ -320,6 +423,18 @@ macro_rules! saturating_impl {
320
423
forward_ref_binop! { impl Rem , rem for Saturating <$t>, Saturating <$t>,
321
424
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
322
425
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
+
323
438
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
324
439
impl RemAssign for Saturating <$t> {
325
440
#[ inline]
@@ -329,6 +444,15 @@ macro_rules! saturating_impl {
329
444
}
330
445
forward_ref_op_assign! { impl RemAssign , rem_assign for Saturating <$t>, Saturating <$t> }
331
446
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
+
332
456
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
333
457
impl Not for Saturating <$t> {
334
458
type Output = Saturating <$t>;
@@ -353,6 +477,18 @@ macro_rules! saturating_impl {
353
477
forward_ref_binop! { impl BitXor , bitxor for Saturating <$t>, Saturating <$t>,
354
478
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
355
479
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
+
356
492
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
357
493
impl BitXorAssign for Saturating <$t> {
358
494
#[ inline]
@@ -362,6 +498,15 @@ macro_rules! saturating_impl {
362
498
}
363
499
forward_ref_op_assign! { impl BitXorAssign , bitxor_assign for Saturating <$t>, Saturating <$t> }
364
500
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
+
365
510
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
366
511
impl BitOr for Saturating <$t> {
367
512
type Output = Saturating <$t>;
@@ -374,6 +519,18 @@ macro_rules! saturating_impl {
374
519
forward_ref_binop! { impl BitOr , bitor for Saturating <$t>, Saturating <$t>,
375
520
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
376
521
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
+
377
534
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
378
535
impl BitOrAssign for Saturating <$t> {
379
536
#[ inline]
@@ -383,6 +540,15 @@ macro_rules! saturating_impl {
383
540
}
384
541
forward_ref_op_assign! { impl BitOrAssign , bitor_assign for Saturating <$t>, Saturating <$t> }
385
542
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
+
386
552
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
387
553
impl BitAnd for Saturating <$t> {
388
554
type Output = Saturating <$t>;
@@ -395,6 +561,18 @@ macro_rules! saturating_impl {
395
561
forward_ref_binop! { impl BitAnd , bitand for Saturating <$t>, Saturating <$t>,
396
562
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ] }
397
563
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
+
398
576
#[ unstable( feature = "saturating_int_impl" , issue = "87920" ) ]
399
577
impl BitAndAssign for Saturating <$t> {
400
578
#[ inline]
@@ -404,6 +582,15 @@ macro_rules! saturating_impl {
404
582
}
405
583
forward_ref_op_assign! { impl BitAndAssign , bitand_assign for Saturating <$t>, Saturating <$t> }
406
584
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
+
407
594
) * )
408
595
}
409
596
0 commit comments