Skip to content

Commit 3296660

Browse files
KmolYuanbluss
authored andcommitted
Simplify macros.
1 parent 35f99b4 commit 3296660

File tree

1 file changed

+48
-72
lines changed

1 file changed

+48
-72
lines changed

src/impl_float_maths.rs

Lines changed: 48 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,33 @@ use num_traits::Float;
55
use crate::imp_prelude::*;
66

77
macro_rules! boolean_op {
8-
($(#[$meta1:meta])* fn $id1:ident $(#[$meta2:meta])* fn $id2:ident -> $func:ident) => {
9-
$(#[$meta1])*
8+
($($(#[$meta1:meta])* fn $id1:ident $(#[$meta2:meta])* fn $id2:ident -> $func:ident)+) => {
9+
$($(#[$meta1])*
1010
pub fn $id1(&self) -> Array<bool, D> {
1111
self.mapv(A::$func)
1212
}
1313
$(#[$meta2])*
1414
pub fn $id2(&self) -> bool {
1515
self.mapv(A::$func).iter().any(|&b|b)
16-
}
16+
})+
1717
};
1818
}
1919

2020
macro_rules! unary_op {
21-
($(#[$meta:meta])* fn $id:ident) => {
22-
$(#[$meta])*
21+
($($(#[$meta:meta])* fn $id:ident)+) => {
22+
$($(#[$meta])*
2323
pub fn $id(&self) -> Array<A, D> {
2424
self.mapv(A::$id)
25-
}
25+
})+
2626
};
2727
}
2828

2929
macro_rules! binary_op {
30-
($(#[$meta:meta])* fn $id:ident($ty:ty)) => {
31-
$(#[$meta])*
30+
($($(#[$meta:meta])* fn $id:ident($ty:ty))+) => {
31+
$($(#[$meta])*
3232
pub fn $id(&self, rhs: $ty) -> Array<A, D> {
3333
self.mapv(|v| A::$id(v, rhs))
34-
}
34+
})+
3535
};
3636
}
3737

@@ -49,8 +49,7 @@ where
4949
fn is_nan
5050
/// Return `true` if any element is `NaN` (not a number).
5151
fn is_nan_any -> is_nan
52-
}
53-
boolean_op! {
52+
5453
/// If the number is infinity, then `true` is returned for each element.
5554
fn is_infinite
5655
/// Return `true` if any element is infinity.
@@ -59,111 +58,88 @@ where
5958
unary_op! {
6059
/// The largest integer less than or equal to each element.
6160
fn floor
62-
}
63-
unary_op! {
61+
6462
/// The smallest integer less than or equal to each element.
6563
fn ceil
66-
}
67-
unary_op! {
64+
6865
/// The nearest integer of each element.
6966
fn round
70-
}
71-
unary_op! {
67+
7268
/// The integer part of each element.
7369
fn trunc
74-
}
75-
unary_op! {
70+
7671
/// The fractional part of each element.
7772
fn fract
78-
}
79-
unary_op! {
73+
8074
/// Absolute of each element.
8175
fn abs
82-
}
83-
unary_op! {
76+
8477
/// Sign number of each element.
8578
///
8679
/// + `1.0` for all positive numbers.
8780
/// + `-1.0` for all negative numbers.
8881
/// + `NaN` for all `NaN` (not a number).
8982
fn signum
90-
}
91-
unary_op! {
83+
9284
/// The reciprocal (inverse) of each element, `1/x`.
9385
fn recip
94-
}
95-
binary_op! {
96-
/// Integer power of each element.
97-
///
98-
/// This function is generally faster than using float power.
99-
fn powi(i32)
100-
}
101-
binary_op! {
102-
/// Float power of each element.
103-
fn powf(A)
104-
}
105-
106-
/// Square of each element.
107-
pub fn square(&self) -> Array<A, D> {
108-
self.mapv(|v| v * v)
109-
}
11086

111-
unary_op! {
11287
/// Square root of each element.
11388
fn sqrt
114-
}
115-
unary_op! {
89+
11690
/// `e^x` of each element. (Exponential function)
11791
fn exp
118-
}
119-
unary_op! {
92+
12093
/// `2^x` of each element.
12194
fn exp2
122-
}
123-
unary_op! {
95+
12496
/// Natural logarithm of each element.
12597
fn ln
126-
}
127-
binary_op! {
128-
/// Logarithm of each element with respect to an arbitrary base.
129-
fn log(A)
130-
}
131-
unary_op! {
98+
13299
/// Base 2 logarithm of each element.
133100
fn log2
134-
}
135-
unary_op! {
101+
136102
/// Base 10 logarithm of each element.
137103
fn log10
138-
}
139-
binary_op! {
140-
/// The positive difference between given number and each element.
141-
fn abs_sub(A)
142-
}
143-
unary_op! {
104+
144105
/// Cubic root of each element.
145106
fn cbrt
146-
}
147-
unary_op! {
107+
148108
/// Sine of each element. (in radians)
149109
fn sin
150-
}
151-
unary_op! {
110+
152111
/// Cosine of each element. (in radians)
153112
fn cos
154-
}
155-
unary_op! {
113+
156114
/// Tangent of each element. (in radians)
157115
fn tan
158-
}
159-
unary_op! {
116+
160117
/// Converts radians to degrees for each element.
161118
fn to_degrees
162-
}
163-
unary_op! {
119+
164120
/// Converts degrees to radians for each element.
165121
fn to_radians
166122
}
123+
binary_op! {
124+
/// Integer power of each element.
125+
///
126+
/// This function is generally faster than using float power.
127+
fn powi(i32)
128+
129+
/// Float power of each element.
130+
fn powf(A)
131+
132+
/// Logarithm of each element with respect to an arbitrary base.
133+
fn log(A)
134+
135+
/// The positive difference between given number and each element.
136+
fn abs_sub(A)
137+
}
138+
139+
/// Square of each element.
140+
pub fn square(&self) -> Array<A, D> {
141+
self.mapv(|v| v * v)
142+
}
167143

168144
/// Limit the values for each element.
169145
///

0 commit comments

Comments
 (0)