Skip to content

Commit 03d0642

Browse files
committed
Change to pass-by-value
1 parent 8362aa1 commit 03d0642

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

src/rounding.rs

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ use num_traits::{ConstZero, Euclid, FromPrimitive, NumCast, Signed, ToPrimitive}
1313
pub(crate) trait Roundable:
1414
Euclid + Div + PartialOrd + Signed + FromPrimitive + ToPrimitive + NumCast + ConstZero + Copy
1515
{
16-
fn is_exact(dividend: &Self, divisor: &Self) -> bool;
17-
fn compare_remainder(dividend: &Self, divisor: &Self) -> Option<Ordering>;
18-
fn is_even_cardinal(dividend: &Self, divisor: &Self) -> bool;
19-
fn result_floor(dividend: &Self, divisor: &Self) -> u64;
20-
fn result_ceil(dividend: &Self, divisor: &Self) -> u64;
21-
fn quotient_abs(dividend: &Self, divisor: &Self) -> Self {
16+
fn is_exact(dividend: Self, divisor: Self) -> bool;
17+
fn compare_remainder(dividend: Self, divisor: Self) -> Option<Ordering>;
18+
fn is_even_cardinal(dividend: Self, divisor: Self) -> bool;
19+
fn result_floor(dividend: Self, divisor: Self) -> u64;
20+
fn result_ceil(dividend: Self, divisor: Self) -> u64;
21+
fn quotient_abs(dividend: Self, divisor: Self) -> Self {
2222
// NOTE: Sanity debugs until proper unit tests to vet the below
23-
debug_assert!(
24-
<i128 as NumCast>::from((*dividend / *divisor).abs()) < Some(u64::MAX as i128)
25-
);
26-
(*dividend / *divisor).abs()
23+
debug_assert!(<i128 as NumCast>::from((dividend / divisor).abs()) < Some(u64::MAX as i128));
24+
(dividend / divisor).abs()
2725
}
2826
}
2927

@@ -64,7 +62,7 @@ impl<T: Roundable> Round for IncrementRounder<T> {
6462
fn round(&self, mode: TemporalRoundingMode) -> i128 {
6563
let unsigned_rounding_mode = mode.get_unsigned_round_mode(self.sign);
6664
let mut rounded =
67-
apply_unsigned_rounding_mode(&self.dividend, &self.divisor, unsigned_rounding_mode)
65+
apply_unsigned_rounding_mode(self.dividend, self.divisor, unsigned_rounding_mode)
6866
as i128;
6967
if !self.sign {
7068
rounded = rounded.neg();
@@ -77,57 +75,57 @@ impl<T: Roundable> Round for IncrementRounder<T> {
7775
fn round_as_positive(&self, mode: TemporalRoundingMode) -> u64 {
7876
let unsigned_rounding_mode = mode.get_unsigned_round_mode(self.sign);
7977
let rounded =
80-
apply_unsigned_rounding_mode(&self.dividend, &self.divisor, unsigned_rounding_mode);
78+
apply_unsigned_rounding_mode(self.dividend, self.divisor, unsigned_rounding_mode);
8179
// TODO: Add unit tests for the below
8280
rounded * <u64 as NumCast>::from(self.divisor).expect("increment is representable by a u64")
8381
}
8482
}
8583

8684
impl Roundable for i128 {
87-
fn is_exact(dividend: &Self, divisor: &Self) -> bool {
85+
fn is_exact(dividend: Self, divisor: Self) -> bool {
8886
dividend.rem_euclid(divisor) == 0
8987
}
9088

91-
fn compare_remainder(dividend: &Self, divisor: &Self) -> Option<Ordering> {
92-
Some(dividend.rem_euclid(divisor).cmp(&divisor.div_euclid(&2)))
89+
fn compare_remainder(dividend: Self, divisor: Self) -> Option<Ordering> {
90+
Some(dividend.rem_euclid(divisor).cmp(&divisor.div_euclid(2)))
9391
}
9492

95-
fn is_even_cardinal(dividend: &Self, divisor: &Self) -> bool {
93+
fn is_even_cardinal(dividend: Self, divisor: Self) -> bool {
9694
Roundable::result_floor(dividend, divisor).rem_euclid(2) == 0
9795
}
9896

99-
fn result_floor(dividend: &Self, divisor: &Self) -> u64 {
97+
fn result_floor(dividend: Self, divisor: Self) -> u64 {
10098
Roundable::quotient_abs(dividend, divisor) as u64
10199
}
102100

103-
fn result_ceil(dividend: &Self, divisor: &Self) -> u64 {
101+
fn result_ceil(dividend: Self, divisor: Self) -> u64 {
104102
Roundable::quotient_abs(dividend, divisor) as u64 + 1
105103
}
106104
}
107105

108106
impl Roundable for f64 {
109-
fn is_exact(dividend: &Self, divisor: &Self) -> bool {
107+
fn is_exact(dividend: Self, divisor: Self) -> bool {
110108
Roundable::quotient_abs(dividend, divisor)
111109
== Roundable::quotient_abs(dividend, divisor).floor()
112110
}
113111

114-
fn compare_remainder(dividend: &Self, divisor: &Self) -> Option<Ordering> {
112+
fn compare_remainder(dividend: Self, divisor: Self) -> Option<Ordering> {
115113
let quotient = Roundable::quotient_abs(dividend, divisor);
116114
let d1 = quotient - quotient.floor();
117115
let d2 = quotient.ceil() - quotient;
118116
d1.partial_cmp(&d2)
119117
}
120118

121-
fn is_even_cardinal(dividend: &Self, divisor: &Self) -> bool {
119+
fn is_even_cardinal(dividend: Self, divisor: Self) -> bool {
122120
let quotient = Roundable::quotient_abs(dividend, divisor);
123121
(quotient.floor() / (quotient.ceil() - quotient.floor()) % 2.0) == 0.0
124122
}
125123

126-
fn result_floor(dividend: &Self, divisor: &Self) -> u64 {
124+
fn result_floor(dividend: Self, divisor: Self) -> u64 {
127125
Roundable::quotient_abs(dividend, divisor).floor() as u64
128126
}
129127

130-
fn result_ceil(dividend: &Self, divisor: &Self) -> u64 {
128+
fn result_ceil(dividend: Self, divisor: Self) -> u64 {
131129
Roundable::quotient_abs(dividend, divisor).ceil() as u64
132130
}
133131
}
@@ -153,8 +151,8 @@ pub(crate) fn to_rounding_increment(increment: Option<f64>) -> TemporalResult<u6
153151

154152
/// Applies the unsigned rounding mode.
155153
fn apply_unsigned_rounding_mode<T: Roundable>(
156-
dividend: &T,
157-
divisor: &T,
154+
dividend: T,
155+
divisor: T,
158156
unsigned_rounding_mode: TemporalUnsignedRoundingMode,
159157
) -> u64 {
160158
// is_floor

0 commit comments

Comments
 (0)