Skip to content

Commit afb1cf7

Browse files
committed
py: Convert (u)int to mp_(u)int_t in mpz, and remove unused function.
1 parent e191d42 commit afb1cf7

File tree

3 files changed

+53
-60
lines changed

3 files changed

+53
-60
lines changed

py/mpz.c

Lines changed: 46 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@
5656
returns sign(i - j)
5757
assumes i, j are normalised
5858
*/
59-
STATIC int mpn_cmp(const mpz_dig_t *idig, uint ilen, const mpz_dig_t *jdig, uint jlen) {
59+
STATIC mp_int_t mpn_cmp(const mpz_dig_t *idig, mp_uint_t ilen, const mpz_dig_t *jdig, mp_uint_t jlen) {
6060
if (ilen < jlen) { return -1; }
6161
if (ilen > jlen) { return 1; }
6262

6363
for (idig += ilen, jdig += ilen; ilen > 0; --ilen) {
64-
int cmp = *(--idig) - *(--jdig);
64+
mp_int_t cmp = *(--idig) - *(--jdig);
6565
if (cmp < 0) { return -1; }
6666
if (cmp > 0) { return 1; }
6767
}
@@ -74,9 +74,9 @@ STATIC int mpn_cmp(const mpz_dig_t *idig, uint ilen, const mpz_dig_t *jdig, uint
7474
assumes enough memory in i; assumes normalised j; assumes n > 0
7575
can have i, j pointing to same memory
7676
*/
77-
STATIC uint mpn_shl(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
78-
uint n_whole = (n + DIG_SIZE - 1) / DIG_SIZE;
79-
uint n_part = n % DIG_SIZE;
77+
STATIC mp_uint_t mpn_shl(mpz_dig_t *idig, mpz_dig_t *jdig, mp_uint_t jlen, mp_uint_t n) {
78+
mp_uint_t n_whole = (n + DIG_SIZE - 1) / DIG_SIZE;
79+
mp_uint_t n_part = n % DIG_SIZE;
8080
if (n_part == 0) {
8181
n_part = DIG_SIZE;
8282
}
@@ -87,7 +87,7 @@ STATIC uint mpn_shl(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
8787

8888
// shift the digits
8989
mpz_dbl_dig_t d = 0;
90-
for (uint i = jlen; i > 0; i--, idig--, jdig--) {
90+
for (mp_uint_t i = jlen; i > 0; i--, idig--, jdig--) {
9191
d |= *jdig;
9292
*idig = (d >> (DIG_SIZE - n_part)) & DIG_MASK;
9393
d <<= DIG_SIZE;
@@ -113,9 +113,9 @@ STATIC uint mpn_shl(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
113113
assumes enough memory in i; assumes normalised j; assumes n > 0
114114
can have i, j pointing to same memory
115115
*/
116-
STATIC uint mpn_shr(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
117-
uint n_whole = n / DIG_SIZE;
118-
uint n_part = n % DIG_SIZE;
116+
STATIC mp_uint_t mpn_shr(mpz_dig_t *idig, mpz_dig_t *jdig, mp_uint_t jlen, mp_uint_t n) {
117+
mp_uint_t n_whole = n / DIG_SIZE;
118+
mp_uint_t n_part = n % DIG_SIZE;
119119

120120
if (n_whole >= jlen) {
121121
return 0;
@@ -124,7 +124,7 @@ STATIC uint mpn_shr(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
124124
jdig += n_whole;
125125
jlen -= n_whole;
126126

127-
for (uint i = jlen; i > 0; i--, idig++, jdig++) {
127+
for (mp_uint_t i = jlen; i > 0; i--, idig++, jdig++) {
128128
mpz_dbl_dig_t d = *jdig;
129129
if (i > 1) {
130130
d |= jdig[1] << DIG_SIZE;
@@ -145,7 +145,7 @@ STATIC uint mpn_shr(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, uint n) {
145145
assumes enough memory in i; assumes normalised j, k; assumes jlen >= klen
146146
can have i, j, k pointing to same memory
147147
*/
148-
STATIC uint mpn_add(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
148+
STATIC mp_uint_t mpn_add(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
149149
mpz_dig_t *oidig = idig;
150150
mpz_dbl_dig_t carry = 0;
151151

@@ -175,7 +175,7 @@ STATIC uint mpn_add(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz
175175
assumes enough memory in i; assumes normalised j, k; assumes j >= k
176176
can have i, j, k pointing to same memory
177177
*/
178-
STATIC uint mpn_sub(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
178+
STATIC mp_uint_t mpn_sub(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
179179
mpz_dig_t *oidig = idig;
180180
mpz_dbl_dig_signed_t borrow = 0;
181181

@@ -204,7 +204,7 @@ STATIC uint mpn_sub(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz
204204
assumes enough memory in i; assumes normalised j, k; assumes jlen >= klen
205205
can have i, j, k pointing to same memory
206206
*/
207-
STATIC uint mpn_and(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
207+
STATIC mp_uint_t mpn_and(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
208208
mpz_dig_t *oidig = idig;
209209

210210
for (; klen > 0; --klen, ++idig, ++jdig, ++kdig) {
@@ -223,7 +223,7 @@ STATIC uint mpn_and(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz
223223
assumes enough memory in i; assumes normalised j, k
224224
can have i, j, k pointing to same memory
225225
*/
226-
STATIC uint mpn_and_neg(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
226+
STATIC mp_uint_t mpn_and_neg(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
227227
mpz_dig_t *oidig = idig;
228228
mpz_dbl_dig_t carry = 1;
229229

@@ -255,7 +255,7 @@ STATIC uint mpn_and_neg(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const
255255
assumes enough memory in i; assumes normalised j, k; assumes jlen >= klen
256256
can have i, j, k pointing to same memory
257257
*/
258-
STATIC uint mpn_or(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
258+
STATIC mp_uint_t mpn_or(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
259259
mpz_dig_t *oidig = idig;
260260

261261
jlen -= klen;
@@ -276,7 +276,7 @@ STATIC uint mpn_or(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_
276276
assumes enough memory in i; assumes normalised j, k; assumes jlen >= klen
277277
can have i, j, k pointing to same memory
278278
*/
279-
STATIC uint mpn_xor(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t *kdig, uint klen) {
279+
STATIC mp_uint_t mpn_xor(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t jlen, const mpz_dig_t *kdig, mp_uint_t klen) {
280280
mpz_dig_t *oidig = idig;
281281

282282
jlen -= klen;
@@ -296,7 +296,7 @@ STATIC uint mpn_xor(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz
296296
returns number of digits in i
297297
assumes enough memory in i; assumes normalised i; assumes dmul != 0
298298
*/
299-
STATIC uint mpn_mul_dig_add_dig(mpz_dig_t *idig, uint ilen, mpz_dig_t dmul, mpz_dig_t dadd) {
299+
STATIC mp_uint_t mpn_mul_dig_add_dig(mpz_dig_t *idig, mp_uint_t ilen, mpz_dig_t dmul, mpz_dig_t dadd) {
300300
mpz_dig_t *oidig = idig;
301301
mpz_dbl_dig_t carry = dadd;
302302

@@ -318,15 +318,15 @@ STATIC uint mpn_mul_dig_add_dig(mpz_dig_t *idig, uint ilen, mpz_dig_t dmul, mpz_
318318
assumes enough memory in i; assumes i is zeroed; assumes normalised j, k
319319
can have j, k point to same memory
320320
*/
321-
STATIC uint mpn_mul(mpz_dig_t *idig, mpz_dig_t *jdig, uint jlen, mpz_dig_t *kdig, uint klen) {
321+
STATIC mp_uint_t mpn_mul(mpz_dig_t *idig, mpz_dig_t *jdig, mp_uint_t jlen, mpz_dig_t *kdig, mp_uint_t klen) {
322322
mpz_dig_t *oidig = idig;
323-
uint ilen = 0;
323+
mp_uint_t ilen = 0;
324324

325325
for (; klen > 0; --klen, ++idig, ++kdig) {
326326
mpz_dig_t *id = idig;
327327
mpz_dbl_dig_t carry = 0;
328328

329-
uint jl = jlen;
329+
mp_uint_t jl = jlen;
330330
for (mpz_dig_t *jd = jdig; jl > 0; --jl, ++jd, ++id) {
331331
carry += *id + *jd * *kdig; // will never overflow so long as DIG_SIZE <= WORD_SIZE / 2
332332
*id = carry & DIG_MASK;
@@ -359,7 +359,7 @@ STATIC void mpn_div(mpz_dig_t *num_dig, mp_uint_t *num_len, mpz_dig_t *den_dig,
359359

360360
// handle simple cases
361361
{
362-
int cmp = mpn_cmp(num_dig, *num_len, den_dig, den_len);
362+
mp_int_t cmp = mpn_cmp(num_dig, *num_len, den_dig, den_len);
363363
if (cmp == 0) {
364364
*num_len = 0;
365365
quo_dig[0] = 1;
@@ -507,7 +507,7 @@ void mpz_init_from_int(mpz_t *z, mp_int_t val) {
507507
mpz_set_from_int(z, val);
508508
}
509509

510-
void mpz_init_fixed_from_int(mpz_t *z, mpz_dig_t *dig, uint alloc, mp_int_t val) {
510+
void mpz_init_fixed_from_int(mpz_t *z, mpz_dig_t *dig, mp_uint_t alloc, mp_int_t val) {
511511
z->neg = 0;
512512
z->fixed_dig = 1;
513513
z->alloc = alloc;
@@ -540,7 +540,7 @@ mpz_t *mpz_from_ll(long long val) {
540540
return z;
541541
}
542542

543-
mpz_t *mpz_from_str(const char *str, uint len, bool neg, uint base) {
543+
mpz_t *mpz_from_str(const char *str, mp_uint_t len, bool neg, mp_uint_t base) {
544544
mpz_t *z = mpz_zero();
545545
mpz_set_from_str(z, str, len, neg, base);
546546
return z;
@@ -553,7 +553,7 @@ void mpz_free(mpz_t *z) {
553553
}
554554
}
555555

556-
STATIC void mpz_need_dig(mpz_t *z, uint need) {
556+
STATIC void mpz_need_dig(mpz_t *z, mp_uint_t need) {
557557
if (need < MIN_ALLOC) {
558558
need = MIN_ALLOC;
559559
}
@@ -633,7 +633,7 @@ void mpz_set_from_ll(mpz_t *z, long long val) {
633633
}
634634

635635
// returns number of bytes from str that were processed
636-
uint mpz_set_from_str(mpz_t *z, const char *str, uint len, bool neg, uint base) {
636+
mp_uint_t mpz_set_from_str(mpz_t *z, const char *str, mp_uint_t len, bool neg, mp_uint_t base) {
637637
assert(base < 36);
638638

639639
const char *cur = str;
@@ -649,8 +649,8 @@ uint mpz_set_from_str(mpz_t *z, const char *str, uint len, bool neg, uint base)
649649

650650
z->len = 0;
651651
for (; cur < top; ++cur) { // XXX UTF8 next char
652-
//uint v = char_to_numeric(cur#); // XXX UTF8 get char
653-
uint v = *cur;
652+
//mp_uint_t v = char_to_numeric(cur#); // XXX UTF8 get char
653+
mp_uint_t v = *cur;
654654
if ('0' <= v && v <= '9') {
655655
v -= '0';
656656
} else if ('A' <= v && v <= 'Z') {
@@ -689,8 +689,8 @@ bool mpz_is_even(const mpz_t *z) {
689689
return z->len == 0 || (z->dig[0] & 1) == 0;
690690
}
691691

692-
int mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
693-
int cmp = z2->neg - z1->neg;
692+
mp_int_t mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
693+
mp_int_t cmp = z2->neg - z1->neg;
694694
if (cmp != 0) {
695695
return cmp;
696696
}
@@ -704,8 +704,8 @@ int mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
704704
#if 0
705705
// obsolete
706706
// compares mpz with an integer that fits within DIG_SIZE bits
707-
int mpz_cmp_sml_int(const mpz_t *z, mp_int_t sml_int) {
708-
int cmp;
707+
mp_int_t mpz_cmp_sml_int(const mpz_t *z, mp_int_t sml_int) {
708+
mp_int_t cmp;
709709
if (z->neg == 0) {
710710
if (sml_int < 0) return 1;
711711
if (sml_int == 0) {
@@ -856,10 +856,10 @@ void mpz_shr_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs) {
856856
dest->neg = lhs->neg;
857857
if (dest->neg) {
858858
// arithmetic shift right, rounding to negative infinity
859-
uint n_whole = rhs / DIG_SIZE;
860-
uint n_part = rhs % DIG_SIZE;
859+
mp_uint_t n_whole = rhs / DIG_SIZE;
860+
mp_uint_t n_part = rhs % DIG_SIZE;
861861
mpz_dig_t round_up = 0;
862-
for (uint i = 0; i < lhs->len && i < n_whole; i++) {
862+
for (mp_uint_t i = 0; i < lhs->len && i < n_whole; i++) {
863863
if (lhs->dig[i] != 0) {
864864
round_up = 1;
865865
break;
@@ -1284,41 +1284,36 @@ mp_float_t mpz_as_float(const mpz_t *i) {
12841284
}
12851285
#endif
12861286

1287-
uint mpz_as_str_size(const mpz_t *i, uint base) {
1287+
mp_uint_t mpz_as_str_size(const mpz_t *i, mp_uint_t base, const char *prefix, char comma) {
12881288
if (base < 2 || base > 32) {
12891289
return 0;
12901290
}
12911291

1292-
return i->len * DIG_SIZE / log_base2_floor[base] + 2 + 1; // +1 for null byte termination
1293-
}
1294-
1295-
uint mpz_as_str_size_formatted(const mpz_t *i, uint base, const char *prefix, char comma) {
1296-
if (base < 2 || base > 32) {
1297-
return 0;
1298-
}
1299-
1300-
uint num_digits = i->len * DIG_SIZE / log_base2_floor[base] + 1;
1301-
uint num_commas = comma ? num_digits / 3: 0;
1302-
uint prefix_len = prefix ? strlen(prefix) : 0;
1292+
mp_uint_t num_digits = i->len * DIG_SIZE / log_base2_floor[base] + 1;
1293+
mp_uint_t num_commas = comma ? num_digits / 3: 0;
1294+
mp_uint_t prefix_len = prefix ? strlen(prefix) : 0;
13031295

13041296
return num_digits + num_commas + prefix_len + 2; // +1 for sign, +1 for null byte
13051297
}
13061298

1307-
char *mpz_as_str(const mpz_t *i, uint base) {
1308-
char *s = m_new(char, mpz_as_str_size(i, base));
1309-
mpz_as_str_inpl(i, base, "", 'a', 0, s);
1299+
#if 0
1300+
this function is unused
1301+
char *mpz_as_str(const mpz_t *i, mp_uint_t base) {
1302+
char *s = m_new(char, mpz_as_str_size(i, base, NULL, '\0'));
1303+
mpz_as_str_inpl(i, base, NULL, 'a', '\0', s);
13101304
return s;
13111305
}
1306+
#endif
13121307

13131308
// assumes enough space as calculated by mpz_as_str_size
13141309
// returns length of string, not including null byte
1315-
uint mpz_as_str_inpl(const mpz_t *i, uint base, const char *prefix, char base_char, char comma, char *str) {
1310+
mp_uint_t mpz_as_str_inpl(const mpz_t *i, mp_uint_t base, const char *prefix, char base_char, char comma, char *str) {
13161311
if (str == NULL || base < 2 || base > 32) {
13171312
str[0] = 0;
13181313
return 0;
13191314
}
13201315

1321-
uint ilen = i->len;
1316+
mp_uint_t ilen = i->len;
13221317

13231318
char *s = str;
13241319
if (ilen == 0) {

py/mpz.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,29 +45,29 @@ typedef struct _mpz_t {
4545

4646
void mpz_init_zero(mpz_t *z);
4747
void mpz_init_from_int(mpz_t *z, mp_int_t val);
48-
void mpz_init_fixed_from_int(mpz_t *z, mpz_dig_t *dig, uint dig_alloc, mp_int_t val);
48+
void mpz_init_fixed_from_int(mpz_t *z, mpz_dig_t *dig, mp_uint_t dig_alloc, mp_int_t val);
4949
void mpz_deinit(mpz_t *z);
5050

5151
mpz_t *mpz_zero();
5252
mpz_t *mpz_from_int(mp_int_t i);
5353
mpz_t *mpz_from_ll(long long i);
54-
mpz_t *mpz_from_str(const char *str, uint len, bool neg, uint base);
54+
mpz_t *mpz_from_str(const char *str, mp_uint_t len, bool neg, mp_uint_t base);
5555
void mpz_free(mpz_t *z);
5656

5757
mpz_t *mpz_clone(const mpz_t *src);
5858

5959
void mpz_set(mpz_t *dest, const mpz_t *src);
6060
void mpz_set_from_int(mpz_t *z, mp_int_t src);
6161
void mpz_set_from_ll(mpz_t *z, long long i);
62-
uint mpz_set_from_str(mpz_t *z, const char *str, uint len, bool neg, uint base);
62+
mp_uint_t mpz_set_from_str(mpz_t *z, const char *str, mp_uint_t len, bool neg, mp_uint_t base);
6363

6464
bool mpz_is_zero(const mpz_t *z);
6565
bool mpz_is_pos(const mpz_t *z);
6666
bool mpz_is_neg(const mpz_t *z);
6767
bool mpz_is_odd(const mpz_t *z);
6868
bool mpz_is_even(const mpz_t *z);
6969

70-
int mpz_cmp(const mpz_t *lhs, const mpz_t *rhs);
70+
mp_int_t mpz_cmp(const mpz_t *lhs, const mpz_t *rhs);
7171

7272
mpz_t *mpz_abs(const mpz_t *z);
7373
mpz_t *mpz_neg(const mpz_t *z);
@@ -102,7 +102,5 @@ bool mpz_as_uint_checked(const mpz_t *z, mp_uint_t *value);
102102
#if MICROPY_PY_BUILTINS_FLOAT
103103
mp_float_t mpz_as_float(const mpz_t *z);
104104
#endif
105-
uint mpz_as_str_size(const mpz_t *z, uint base);
106-
uint mpz_as_str_size_formatted(const mpz_t *i, uint base, const char *prefix, char comma);
107-
char *mpz_as_str(const mpz_t *z, uint base);
108-
uint mpz_as_str_inpl(const mpz_t *z, uint base, const char *prefix, char base_char, char comma, char *str);
105+
mp_uint_t mpz_as_str_size(const mpz_t *i, mp_uint_t base, const char *prefix, char comma);
106+
mp_uint_t mpz_as_str_inpl(const mpz_t *z, mp_uint_t base, const char *prefix, char base_char, char comma, char *str);

py/objint_mpz.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ char *mp_obj_int_formatted_impl(char **buf, int *buf_size, int *fmt_size, mp_con
8484
assert(MP_OBJ_IS_TYPE(self_in, &mp_type_int));
8585
const mp_obj_int_t *self = self_in;
8686

87-
uint needed_size = mpz_as_str_size_formatted(&self->mpz, base, prefix, comma);
87+
uint needed_size = mpz_as_str_size(&self->mpz, base, prefix, comma);
8888
if (needed_size > *buf_size) {
8989
*buf = m_new(char, needed_size);
9090
*buf_size = needed_size;

0 commit comments

Comments
 (0)