@@ -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