mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-16 13:05:18 +03:00
Move saturating operator methods into Int
This commit is contained in:
+1
-1
@@ -62,7 +62,7 @@ trait defined in this module. For loops can be viewed as a syntactical expansion
|
||||
use cmp;
|
||||
use cmp::{PartialEq, PartialOrd, Ord};
|
||||
use mem;
|
||||
use num::{Zero, One, CheckedAdd, CheckedSub, Saturating, ToPrimitive, Int};
|
||||
use num::{Zero, One, CheckedAdd, CheckedSub, ToPrimitive, Int};
|
||||
use ops::{Add, Mul, Sub};
|
||||
use option::{Option, Some, None};
|
||||
use uint;
|
||||
|
||||
+22
-37
@@ -525,6 +525,28 @@ fn to_be(self) -> Self { // or not to be?
|
||||
fn to_le(self) -> Self {
|
||||
if cfg!(target_endian = "little") { self } else { self.swap_bytes() }
|
||||
}
|
||||
|
||||
/// Saturating addition. Returns `self + other`, saturating at the
|
||||
/// numeric bounds instead of overflowing.
|
||||
#[inline]
|
||||
fn saturating_add(self, other: Self) -> Self {
|
||||
match self.checked_add(&other) {
|
||||
Some(x) => x,
|
||||
None if other >= Zero::zero() => Bounded::max_value(),
|
||||
None => Bounded::min_value(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Saturating subtraction. Returns `self - other`, saturating at the
|
||||
/// numeric bounds instead of overflowing.
|
||||
#[inline]
|
||||
fn saturating_sub(self, other: Self) -> Self {
|
||||
match self.checked_sub(&other) {
|
||||
Some(x) => x,
|
||||
None if other >= Zero::zero() => Bounded::min_value(),
|
||||
None => Bounded::max_value(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! int_impl {
|
||||
@@ -1150,43 +1172,6 @@ fn from<N: ToPrimitive>(n: N) -> Option<$T> {
|
||||
impl_num_cast!(f32, to_f32)
|
||||
impl_num_cast!(f64, to_f64)
|
||||
|
||||
/// Saturating math operations
|
||||
pub trait Saturating {
|
||||
/// Saturating addition operator.
|
||||
/// Returns a+b, saturating at the numeric bounds instead of overflowing.
|
||||
fn saturating_add(self, v: Self) -> Self;
|
||||
|
||||
/// Saturating subtraction operator.
|
||||
/// Returns a-b, saturating at the numeric bounds instead of overflowing.
|
||||
fn saturating_sub(self, v: Self) -> Self;
|
||||
}
|
||||
|
||||
impl<T: CheckedAdd + CheckedSub + Zero + PartialOrd + Bounded> Saturating for T {
|
||||
#[inline]
|
||||
fn saturating_add(self, v: T) -> T {
|
||||
match self.checked_add(&v) {
|
||||
Some(x) => x,
|
||||
None => if v >= Zero::zero() {
|
||||
Bounded::max_value()
|
||||
} else {
|
||||
Bounded::min_value()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn saturating_sub(self, v: T) -> T {
|
||||
match self.checked_sub(&v) {
|
||||
Some(x) => x,
|
||||
None => if v >= Zero::zero() {
|
||||
Bounded::min_value()
|
||||
} else {
|
||||
Bounded::max_value()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Performs addition that returns `None` instead of wrapping around on overflow.
|
||||
pub trait CheckedAdd: Add<Self, Self> {
|
||||
/// Adds two numbers, checking for overflow. If overflow happens, `None` is returned.
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
use cmp;
|
||||
use default::Default;
|
||||
use iter::*;
|
||||
use num::{CheckedAdd, Saturating, div_rem};
|
||||
use num::{CheckedAdd, Int, div_rem};
|
||||
use ops;
|
||||
use option::{None, Option, Some};
|
||||
use ptr;
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@
|
||||
use iter::{DoubleEndedIterator, ExactSize};
|
||||
use iter::range;
|
||||
use kinds::Sized;
|
||||
use num::{CheckedMul, Saturating};
|
||||
use num::{CheckedMul, Int};
|
||||
use option::{Option, None, Some};
|
||||
use raw::Repr;
|
||||
use slice::{mod, SlicePrelude};
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
pub use core::num::{Num, div_rem, Zero, zero, One, one};
|
||||
pub use core::num::{Signed, abs, signum};
|
||||
pub use core::num::{Unsigned, pow, Bounded};
|
||||
pub use core::num::{Primitive, Int, UnsignedInt, Saturating};
|
||||
pub use core::num::{Primitive, Int, UnsignedInt};
|
||||
pub use core::num::{CheckedAdd, CheckedSub, CheckedMul, CheckedDiv};
|
||||
pub use core::num::{cast, FromPrimitive, NumCast, ToPrimitive};
|
||||
pub use core::num::{next_power_of_two, is_power_of_two};
|
||||
|
||||
@@ -106,7 +106,6 @@ enum NamePadding { PadNone, PadOnLeft, PadOnRight }
|
||||
|
||||
impl TestDesc {
|
||||
fn padded_name(&self, column_count: uint, align: NamePadding) -> String {
|
||||
use std::num::Saturating;
|
||||
let mut name = String::from_str(self.name.as_slice());
|
||||
let fill = column_count.saturating_sub(name.len());
|
||||
let mut pad = " ".repeat(fill);
|
||||
|
||||
Reference in New Issue
Block a user