Skip to content

Commit b6ea053

Browse files
committed
Add some missing method wrappers to std::num
1 parent 4cc3bbb commit b6ea053

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/libstd/num/num.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,23 @@ pub trait Orderable: Ord {
4545
fn clamp(&self, mn: &Self, mx: &Self) -> Self;
4646
}
4747

48-
#[inline(always)] pub fn min<T: Orderable>(a: T, b: T) -> T { a.min(&b) }
49-
#[inline(always)] pub fn max<T: Orderable>(a: T, b: T) -> T { a.max(&b) }
48+
#[inline(always)] pub fn min<T: Orderable>(x: T, y: T) -> T { x.min(&y) }
49+
#[inline(always)] pub fn max<T: Orderable>(x: T, y: T) -> T { x.max(&y) }
50+
#[inline(always)] pub fn clamp<T: Orderable>(value: T, mn: T, mx: T) -> T { value.clamp(&mn, &mx) }
5051

5152
pub trait Zero {
5253
fn zero() -> Self; // FIXME (#5527): This should be an associated constant
5354
fn is_zero(&self) -> bool;
5455
}
5556

57+
#[inline(always)] pub fn zero<T: Zero>() -> T { Zero::zero() }
58+
5659
pub trait One {
5760
fn one() -> Self; // FIXME (#5527): This should be an associated constant
5861
}
5962

63+
#[inline(always)] pub fn one<T: One>() -> T { One::one() }
64+
6065
pub trait Signed: Num
6166
+ Neg<Self> {
6267
fn abs(&self) -> Self;
@@ -68,6 +73,7 @@ pub trait Signed: Num
6873
}
6974

7075
#[inline(always)] pub fn abs<T: Signed>(value: T) -> T { value.abs() }
76+
#[inline(always)] pub fn abs_sub<T: Signed>(x: T, y: T) -> T { x.abs_sub(&y) }
7177
#[inline(always)] pub fn signum<T: Signed>(value: T) -> T { value.signum() }
7278

7379
pub trait Unsigned: Num {}
@@ -90,6 +96,9 @@ pub trait Integer: Num
9096
fn is_odd(&self) -> bool;
9197
}
9298

99+
#[inline(always)] pub fn gcd<T: Integer>(x: T, y: T) -> T { x.gcd(&y) }
100+
#[inline(always)] pub fn lcm<T: Integer>(x: T, y: T) -> T { x.lcm(&y) }
101+
93102
pub trait Round {
94103
fn floor(&self) -> Self;
95104
fn ceil(&self) -> Self;
@@ -113,15 +122,21 @@ pub trait Algebraic {
113122
fn hypot(&self, other: &Self) -> Self;
114123
}
115124

125+
#[inline(always)] pub fn pow<T: Algebraic>(value: T, n: T) -> T { value.pow(&n) }
116126
#[inline(always)] pub fn sqrt<T: Algebraic>(value: T) -> T { value.sqrt() }
127+
#[inline(always)] pub fn rsqrt<T: Algebraic>(value: T) -> T { value.rsqrt() }
128+
#[inline(always)] pub fn cbrt<T: Algebraic>(value: T) -> T { value.cbrt() }
129+
#[inline(always)] pub fn hypot<T: Algebraic>(x: T, y: T) -> T { x.hypot(&y) }
117130

118131
pub trait Trigonometric {
119132
fn sin(&self) -> Self;
120133
fn cos(&self) -> Self;
121134
fn tan(&self) -> Self;
135+
122136
fn asin(&self) -> Self;
123137
fn acos(&self) -> Self;
124138
fn atan(&self) -> Self;
139+
125140
fn atan2(&self, other: &Self) -> Self;
126141
fn sin_cos(&self) -> (Self, Self);
127142
}
@@ -135,10 +150,12 @@ pub trait Trigonometric {
135150
#[inline(always)] pub fn atan<T: Trigonometric>(value: T) -> T { value.atan() }
136151

137152
#[inline(always)] pub fn atan2<T: Trigonometric>(x: T, y: T) -> T { x.atan2(&y) }
153+
#[inline(always)] pub fn sin_cos<T: Trigonometric>(value: T) -> (T, T) { value.sin_cos() }
138154

139155
pub trait Exponential {
140156
fn exp(&self) -> Self;
141157
fn exp2(&self) -> Self;
158+
142159
fn ln(&self) -> Self;
143160
fn log(&self, base: &Self) -> Self;
144161
fn log2(&self) -> Self;
@@ -157,6 +174,7 @@ pub trait Hyperbolic: Exponential {
157174
fn sinh(&self) -> Self;
158175
fn cosh(&self) -> Self;
159176
fn tanh(&self) -> Self;
177+
160178
fn asinh(&self) -> Self;
161179
fn acosh(&self) -> Self;
162180
fn atanh(&self) -> Self;
@@ -326,6 +344,10 @@ pub trait Float: Real
326344
}
327345

328346
///
347+
#[inline(always)] pub fn exp_m1<T: Float>(value: T) -> T { value.exp_m1() }
348+
#[inline(always)] pub fn ln_1p<T: Float>(value: T) -> T { value.ln_1p() }
349+
#[inline(always)] pub fn mul_add<T: Float>(a: T, b: T, c: T) -> T { a.mul_add(b, c) }
350+
329351
/// Cast from one machine scalar to another
330352
///
331353
/// # Example

0 commit comments

Comments
 (0)