Skip to content

Commit 952f464

Browse files
committed
math.big: remove import math dependency (math.big only uses min/max/abs)
1 parent 6ef3dfd commit 952f464

4 files changed

Lines changed: 43 additions & 23 deletions

File tree

vlib/math/big/array_ops.v

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
module big
22

3-
import math
4-
53
// Compares the magnitude of the two unsigned integers represented the given
64
// digit arrays. Returns -1 if a < b, 0 if a == b and +1 if a > b. Here
75
// a is operand_a and b is operand_b (for brevity).
@@ -42,8 +40,8 @@ fn add_digit_array(operand_a []u32, operand_b []u32, mut sum []u32) {
4240
}
4341

4442
// First pass intersects with both operands
45-
smaller_limit := math.min(operand_a.len, operand_b.len)
46-
larger_limit := math.max(operand_a.len, operand_b.len)
43+
smaller_limit := imin(operand_a.len, operand_b.len)
44+
larger_limit := imax(operand_a.len, operand_b.len)
4745
mut a, mut b := if operand_a.len >= operand_b.len {
4846
operand_a, operand_b
4947
} else {
@@ -311,7 +309,7 @@ fn bitwise_or_digit_array(operand_a []u32, operand_b []u32, mut storage []u32) {
311309

312310
[direct_array_access]
313311
fn bitwise_and_digit_array(operand_a []u32, operand_b []u32, mut storage []u32) {
314-
lower := math.min(operand_a.len, operand_b.len)
312+
lower := imin(operand_a.len, operand_b.len)
315313
for index in 0 .. lower {
316314
storage[index] = operand_a[index] & operand_b[index]
317315
}

vlib/math/big/integer.v

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
module big
22

3-
import math
43
import math.bits
54
import strings
65
import strconv
76

8-
const (
9-
digit_array = '0123456789abcdefghijklmnopqrstuvwxyz'.bytes()
10-
)
7+
const digit_array = '0123456789abcdefghijklmnopqrstuvwxyz'.bytes()
118

129
// big.Integer
1310
// -----------
@@ -55,7 +52,7 @@ pub fn integer_from_int(value int) Integer {
5552
return zero_int
5653
}
5754
return Integer{
58-
digits: [u32(math.abs(value))]
55+
digits: [u32(iabs(value))]
5956
signum: int_signum(value)
6057
}
6158
}
@@ -327,7 +324,7 @@ pub fn (integer Integer) - (subtrahend Integer) Integer {
327324
fn (integer Integer) add(addend Integer) Integer {
328325
a := integer.digits
329326
b := addend.digits
330-
mut storage := []u32{len: math.max(a.len, b.len) + 1}
327+
mut storage := []u32{len: imax(a.len, b.len) + 1}
331328
add_digit_array(a, b, mut storage)
332329
return Integer{
333330
signum: integer.signum
@@ -585,7 +582,7 @@ pub fn (mut a Integer) set_bit(i u32, value bool) {
585582
pub fn (a Integer) bitwise_or(b Integer) Integer {
586583
check_sign(a)
587584
check_sign(b)
588-
mut result := []u32{len: math.max(a.digits.len, b.digits.len)}
585+
mut result := []u32{len: imax(a.digits.len, b.digits.len)}
589586
bitwise_or_digit_array(a.digits, b.digits, mut result)
590587
return Integer{
591588
digits: result
@@ -597,7 +594,7 @@ pub fn (a Integer) bitwise_or(b Integer) Integer {
597594
pub fn (a Integer) bitwise_and(b Integer) Integer {
598595
check_sign(a)
599596
check_sign(b)
600-
mut result := []u32{len: math.max(a.digits.len, b.digits.len)}
597+
mut result := []u32{len: imax(a.digits.len, b.digits.len)}
601598
bitwise_and_digit_array(a.digits, b.digits, mut result)
602599
return Integer{
603600
digits: result
@@ -620,7 +617,7 @@ pub fn (a Integer) bitwise_not() Integer {
620617
pub fn (a Integer) bitwise_xor(b Integer) Integer {
621618
check_sign(a)
622619
check_sign(b)
623-
mut result := []u32{len: math.max(a.digits.len, b.digits.len)}
620+
mut result := []u32{len: imax(a.digits.len, b.digits.len)}
624621
bitwise_xor_digit_array(a.digits, b.digits, mut result)
625622
return Integer{
626623
digits: result
@@ -941,7 +938,7 @@ fn gcd_binary(x Integer, y Integer) Integer {
941938

942939
mut az := a.msb()
943940
bz := b.msb()
944-
shift := math.min(az, bz)
941+
shift := umin(az, bz)
945942
b = b.rshift(bz)
946943

947944
for a.signum != 0 {

vlib/math/big/min_max.v

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module big
2+
3+
[inline]
4+
fn imax(a int, b int) int {
5+
return if a > b { a } else { b }
6+
}
7+
8+
[inline]
9+
fn imin(a int, b int) int {
10+
return if a < b { a } else { b }
11+
}
12+
13+
[inline]
14+
fn umax(a u32, b u32) u32 {
15+
return if a > b { a } else { b }
16+
}
17+
18+
[inline]
19+
fn umin(a u32, b u32) u32 {
20+
return if a < b { a } else { b }
21+
}
22+
23+
[inline]
24+
fn iabs(v int) int {
25+
return if v > 0 { v } else { -v }
26+
}

vlib/math/big/special_array_ops.v

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
module big
22

3-
import math
43
import math.bits
54
import strings
65

@@ -113,7 +112,7 @@ fn karatsuba_multiply_digit_array(operand_a []u32, operand_b []u32, mut storage
113112
}
114113

115114
// thanks to the base cases we can pass zero-length arrays to the mult func
116-
half := math.max(operand_a.len, operand_b.len) / 2
115+
half := imax(operand_a.len, operand_b.len) / 2
117116
a_l := operand_a[0..half]
118117
a_h := operand_a[half..]
119118
mut b_l := []u32{}
@@ -132,8 +131,8 @@ fn karatsuba_multiply_digit_array(operand_a []u32, operand_b []u32, mut storage
132131
mut p_3 := []u32{len: a_l.len + b_l.len + 1}
133132
multiply_digit_array(a_l, b_l, mut p_3)
134133

135-
mut tmp_1 := []u32{len: math.max(a_h.len, a_l.len) + 1}
136-
mut tmp_2 := []u32{len: math.max(b_h.len, b_l.len) + 1}
134+
mut tmp_1 := []u32{len: imax(a_h.len, a_l.len) + 1}
135+
mut tmp_2 := []u32{len: imax(b_h.len, b_l.len) + 1}
137136
add_digit_array(a_h, a_l, mut tmp_1)
138137
add_digit_array(b_h, b_l, mut tmp_2)
139138

@@ -288,8 +287,8 @@ fn rshift_digits_in_place(mut a []u32, amount int) {
288287
fn add_in_place(mut a []u32, b []u32) {
289288
len_a := a.len
290289
len_b := b.len
291-
max := math.max(len_a, len_b)
292-
min := math.min(len_a, len_b)
290+
max := imax(len_a, len_b)
291+
min := imin(len_a, len_b)
293292
mut carry := u64(0)
294293
for index in 0 .. min {
295294
partial := carry + a[index] + b[index]
@@ -316,8 +315,8 @@ fn add_in_place(mut a []u32, b []u32) {
316315
fn subtract_in_place(mut a []u32, b []u32) {
317316
len_a := a.len
318317
len_b := b.len
319-
max := math.max(len_a, len_b)
320-
min := math.min(len_a, len_b)
318+
max := imax(len_a, len_b)
319+
min := imin(len_a, len_b)
321320
mut carry := u32(0)
322321
mut new_carry := u32(0)
323322
for index in 0 .. min {

0 commit comments

Comments
 (0)