Codebase list libcryptx-perl / fccd021
prepare for the next libtommath Karel Miko 4 years ago
1 changed file(s) with 292 addition(s) and 102 deletion(s). Raw diff Collapse all Expand all
66
77 Math::BigInt::LTM
88 _new(Class, SV *x)
9 CODE:
10 Newz(0, RETVAL, 1, mp_int);
11 mp_init(RETVAL);
9 PREINIT:
10 mp_err merr;
11 CODE:
12 Newz(0, RETVAL, 1, mp_int);
13 merr = mp_init(RETVAL);
14 #ifdef BN_MP_SET_INT_C
1215 if ((SvUOK(x) || SvIOK(x)) && (sizeof(UV) <= sizeof(unsigned long) || SvUV(x) == (unsigned long)SvUV(x))) {
1316 mp_set_int(RETVAL, (unsigned long)SvUV(x));
1417 }
15 else {
16 mp_read_radix(RETVAL, SvPV_nolen(x), 10);
17 }
18 #elif IVSIZE == 8
19 if (SvUOK(x)) {
20 mp_set_u64(RETVAL, (unsigned long long)SvUV(x));
21 }
22 else if (SvIOK(x)) {
23 mp_set_i64(RETVAL, (long long)SvIV(x));
24 }
25 #else
26 if (SvUOK(x)) {
27 mp_set_u32(RETVAL, (unsigned int)SvUV(x));
28 }
29 else if (SvIOK(x)) {
30 mp_set_i32(RETVAL, (int)SvIV(x));
31 }
32 #endif
33 else {
34 /* fallback - read the decimal number from string */
35 merr = mp_read_radix(RETVAL, SvPV_nolen(x), 10);
36 }
37 PERL_UNUSED_VAR(merr);
1838 OUTPUT:
1939 RETVAL
2040
2444 Math::BigInt::LTM
2545 _from_bin(Class, SV *x)
2646 PREINIT:
47 mp_err merr;
2748 char *str, *start;
2849 CODE:
2950 Newz(0, RETVAL, 1, mp_int);
30 mp_init(RETVAL);
51 merr = mp_init(RETVAL);
3152 str = SvPV_nolen(x);
3253 start = (strlen(str)>2 && str[0] == '0' && str[1] == 'b') ? str+2 : str;
33 mp_read_radix(RETVAL, start, 2);
54 merr = mp_read_radix(RETVAL, start, 2);
55 PERL_UNUSED_VAR(merr);
3456 OUTPUT:
3557 RETVAL
3658
4062 Math::BigInt::LTM
4163 _from_hex(Class, SV *x)
4264 PREINIT:
65 mp_err merr;
4366 char *str, *start;
4467 CODE:
4568 Newz(0, RETVAL, 1, mp_int);
46 mp_init(RETVAL);
69 merr = mp_init(RETVAL);
4770 str = SvPV_nolen(x);
4871 start = (strlen(str)>2 && str[0] == '0' && str[1] == 'x') ? str+2 : str;
49 mp_read_radix(RETVAL, start, 16);
72 merr = mp_read_radix(RETVAL, start, 16);
73 PERL_UNUSED_VAR(merr);
5074 OUTPUT:
5175 RETVAL
5276
5579
5680 Math::BigInt::LTM
5781 _from_oct(Class, SV *x)
58 CODE:
59 Newz(0, RETVAL, 1, mp_int);
60 mp_init(RETVAL);
61 mp_read_radix(RETVAL, SvPV_nolen(x), 8);
82 PREINIT:
83 mp_err merr;
84 CODE:
85 Newz(0, RETVAL, 1, mp_int);
86 merr = mp_init(RETVAL);
87 merr = mp_read_radix(RETVAL, SvPV_nolen(x), 8);
88 PERL_UNUSED_VAR(merr);
6289 OUTPUT:
6390 RETVAL
6491
6794
6895 Math::BigInt::LTM
6996 _from_base(Class, SV *x, int base)
70 CODE:
71 Newz(0, RETVAL, 1, mp_int);
72 mp_init(RETVAL);
73 mp_read_radix(RETVAL, SvPV_nolen(x), base);
97 PREINIT:
98 mp_err merr;
99 CODE:
100 Newz(0, RETVAL, 1, mp_int);
101 merr = mp_init(RETVAL);
102 merr = mp_read_radix(RETVAL, SvPV_nolen(x), base);
103 PERL_UNUSED_VAR(merr);
74104 OUTPUT:
75105 RETVAL
76106
80110 Math::BigInt::LTM
81111 _from_bytes(Class, SV *x)
82112 PREINIT:
113 mp_err merr;
83114 STRLEN buf_len;
84115 unsigned char *buf_ptr;
85116 CODE:
86117 Newz(0, RETVAL, 1, mp_int);
87 mp_init(RETVAL);
118 merr = mp_init(RETVAL);
88119 buf_ptr = (unsigned char *)SvPVbyte(x, buf_len);
89 mp_read_unsigned_bin(RETVAL, buf_ptr, buf_len);
120 merr = mp_read_unsigned_bin(RETVAL, buf_ptr, buf_len);
121 PERL_UNUSED_VAR(merr);
90122 OUTPUT:
91123 RETVAL
92124
95127
96128 void
97129 _set(Class, Math::BigInt::LTM n, SV *x)
98 CODE:
99 mp_set_int(n, (unsigned long)SvIV(x));
130 PREINIT:
131 mp_err merr;
132 CODE:
133 #ifdef BN_MP_SET_INT_C
134 if ((SvUOK(x) || SvIOK(x)) && (sizeof(UV) <= sizeof(unsigned long) || SvUV(x) == (unsigned long)SvUV(x))) {
135 mp_set_int(n, (unsigned long)SvIV(x));
136 }
137 #elif IVSIZE == 8
138 if (SvUOK(x)) {
139 mp_set_u64(n, (unsigned long long)SvUV(x));
140 }
141 else if (SvIOK(x)) {
142 mp_set_i64(n, (long long)SvIV(x));
143 }
144 #else
145 if (SvUOK(x)) {
146 mp_set_u32(n, (unsigned int)SvUV(x));
147 }
148 else if (SvIOK(x)) {
149 mp_set_i32(n, (int)SvIV(x));
150 }
151 #endif
152 else {
153 /* fallback - read the decimal number from string */
154 merr = mp_read_radix(n, SvPV_nolen(x), 10);
155 PERL_UNUSED_VAR(merr);
156 }
100157
101158 ##############################################################################
102159 # _zero()
103160
104161 Math::BigInt::LTM
105162 _zero(Class)
106 CODE:
107 Newz(0, RETVAL, 1, mp_int);
108 mp_init(RETVAL);
109 mp_set_int(RETVAL, 0);
163 PREINIT:
164 mp_err merr;
165 CODE:
166 Newz(0, RETVAL, 1, mp_int);
167 merr = mp_init(RETVAL);
168 mp_zero(RETVAL);
169 PERL_UNUSED_VAR(merr);
110170 OUTPUT:
111171 RETVAL
112172
115175
116176 Math::BigInt::LTM
117177 _one(Class)
118 CODE:
119 Newz(0, RETVAL, 1, mp_int);
120 mp_init(RETVAL);
178 PREINIT:
179 mp_err merr;
180 CODE:
181 Newz(0, RETVAL, 1, mp_int);
182 merr = mp_init(RETVAL);
183 #ifdef BN_MP_SET_INT_C
121184 mp_set_int(RETVAL, 1);
185 #else
186 mp_set_u32(RETVAL, 1);
187 #endif
188 PERL_UNUSED_VAR(merr);
122189 OUTPUT:
123190 RETVAL
124191
127194
128195 Math::BigInt::LTM
129196 _two(Class)
130 CODE:
131 Newz(0, RETVAL, 1, mp_int);
132 mp_init(RETVAL);
197 PREINIT:
198 mp_err merr;
199 CODE:
200 Newz(0, RETVAL, 1, mp_int);
201 merr = mp_init(RETVAL);
202 #ifdef BN_MP_SET_INT_C
133203 mp_set_int(RETVAL, 2);
204 #else
205 mp_set_u32(RETVAL, 2);
206 #endif
207 PERL_UNUSED_VAR(merr);
134208 OUTPUT:
135209 RETVAL
136210
139213
140214 Math::BigInt::LTM
141215 _ten(Class)
142 CODE:
143 Newz(0, RETVAL, 1, mp_int);
144 mp_init(RETVAL);
216 PREINIT:
217 mp_err merr;
218 CODE:
219 Newz(0, RETVAL, 1, mp_int);
220 merr = mp_init(RETVAL);
221 #ifdef BN_MP_SET_INT_C
145222 mp_set_int(RETVAL, 10);
223 #else
224 mp_set_u32(RETVAL, 10);
225 #endif
226 PERL_UNUSED_VAR(merr);
146227 OUTPUT:
147228 RETVAL
148229
151232
152233 Math::BigInt::LTM
153234 _1ex(Class, int x)
154 CODE:
155 Newz(0, RETVAL, 1, mp_int);
156 mp_init(RETVAL);
235 PREINIT:
236 mp_err merr;
237 CODE:
238 Newz(0, RETVAL, 1, mp_int);
239 merr = mp_init(RETVAL);
240 #ifdef BN_MP_SET_INT_C
157241 mp_set_int(RETVAL, 10);
158 mp_expt_d(RETVAL, x, RETVAL);
242 #else
243 mp_set_u32(RETVAL, 10);
244 #endif
245 merr = mp_expt_d(RETVAL, x, RETVAL);
246 PERL_UNUSED_VAR(merr);
159247 OUTPUT:
160248 RETVAL
161249
176264 SV *
177265 _str(Class, Math::BigInt::LTM n)
178266 PREINIT:
267 mp_err merr;
179268 int len;
180269 char *buf;
181270 CODE:
185274 else {
186275 len = mp_count_bits(n) / 3 + 3; /* decimal_size ~ (binary_size/3 + 1) +1 for sign +1 for NUL-byte */
187276 Newz(0, buf, len, char);
188 mp_toradix_n(n, buf, 10, len);
277 merr = mp_toradix_n(n, buf, 10, len);
189278 RETVAL = newSVpv(buf, 0);
190279 Safefree(buf);
191280 }
281 PERL_UNUSED_VAR(merr);
192282 OUTPUT:
193283 RETVAL
194284
198288 int
199289 _len(Class, Math::BigInt::LTM n)
200290 PREINIT:
291 mp_err merr;
201292 int len;
202293 char *buf;
203294 CODE:
207298 else {
208299 len = mp_count_bits(n) / 3 + 3; /* decimal_size ~ (binary_size/3 + 1) +1 for sign +1 for NUL-byte */
209300 Newz(0, buf, len, char);
210 mp_toradix_n(n, buf, 10, len);
301 merr = mp_toradix_n(n, buf, 10, len);
211302 RETVAL = (int)strlen(buf);
212303 Safefree(buf);
213304 }
305 PERL_UNUSED_VAR(merr);
214306 OUTPUT:
215307 RETVAL
216308
239331 int
240332 _zeros(Class, Math::BigInt::LTM n)
241333 PREINIT:
334 mp_err merr;
242335 int len;
243336 char *buf;
244337 CODE:
248341 else {
249342 len = mp_count_bits(n) / 3 + 3; /* decimal_size ~ (binary_size/3 + 1) +1 for sign +1 for NUL-byte */
250343 Newz(0, buf, len, char);
251 mp_toradix_n(n, buf, 10, len);
344 merr = mp_toradix_n(n, buf, 10, len);
252345 len = (int)strlen(buf);
253346 RETVAL = 0;
254347 while (len > 0) {
258351 }
259352 Safefree(buf);
260353 }
354 PERL_UNUSED_VAR(merr);
261355 OUTPUT:
262356 RETVAL
263357
267361 SV *
268362 _to_hex(Class, Math::BigInt::LTM n)
269363 PREINIT:
364 mp_err merr;
270365 int i, len;
271366 char *buf;
272367 CODE:
274369 RETVAL = newSV(len);
275370 SvPOK_on(RETVAL);
276371 buf = SvPVX(RETVAL);
277 mp_toradix(n, buf, 16); /* to hex */
372 merr = mp_toradix(n, buf, 16); /* to hex */
278373 for (i=0; i<len && buf[i]>0; i++) buf[i] = toLOWER(buf[i]);
279374 SvCUR_set(RETVAL, strlen(buf));
375 PERL_UNUSED_VAR(merr);
280376 OUTPUT:
281377 RETVAL
282378
286382 SV *
287383 _to_bin(Class, Math::BigInt::LTM n)
288384 PREINIT:
385 mp_err merr;
289386 int len;
290387 char *buf;
291388 CODE:
293390 RETVAL = newSV(len);
294391 SvPOK_on(RETVAL);
295392 buf = SvPVX(RETVAL);
296 mp_toradix(n, buf, 2); /* to binary */
393 merr = mp_toradix(n, buf, 2); /* to binary */
297394 SvCUR_set(RETVAL, strlen(buf));
395 PERL_UNUSED_VAR(merr);
298396 OUTPUT:
299397 RETVAL
300398
304402 SV *
305403 _to_oct(Class, Math::BigInt::LTM n)
306404 PREINIT:
405 mp_err merr;
307406 int len;
308407 char *buf;
309408 CODE:
311410 RETVAL = newSV(len);
312411 SvPOK_on(RETVAL);
313412 buf = SvPVX(RETVAL);
314 mp_toradix(n, buf, 8); /* to octal */
413 merr = mp_toradix(n, buf, 8); /* to octal */
315414 SvCUR_set(RETVAL, strlen(buf));
415 PERL_UNUSED_VAR(merr);
316416 OUTPUT:
317417 RETVAL
318418
322422 SV *
323423 _to_base(Class, Math::BigInt::LTM n, int base)
324424 PREINIT:
425 mp_err merr;
325426 int len;
326427 char *buf;
327428 CODE:
330431 SvPOK_on(RETVAL);
331432 buf = SvPVX(RETVAL);
332433 if (len > 0) {
333 mp_toradix_n(n, buf, base, len);
434 merr = mp_toradix_n(n, buf, base, len);
334435 SvCUR_set(RETVAL, strlen(buf));
335436 }
336437 else {
337438 buf[0] = '0';
338439 SvCUR_set(RETVAL, 1);
339440 }
441 PERL_UNUSED_VAR(merr);
340442 OUTPUT:
341443 RETVAL
342444
349451 ALIAS:
350452 _as_bytes = 1
351453 PREINIT:
454 mp_err merr;
352455 int len;
353456 unsigned char *buf;
354457 CODE:
358461 SvPOK_on(RETVAL);
359462 buf = (unsigned char*)SvPVX(RETVAL);
360463 if (len > 0) {
361 mp_to_unsigned_bin(n, buf);
464 merr = mp_to_unsigned_bin(n, buf);
362465 SvCUR_set(RETVAL, len);
363466 }
364467 else {
365468 buf[0] = 0;
366469 SvCUR_set(RETVAL, 1);
367470 }
471 PERL_UNUSED_VAR(merr);
368472 OUTPUT:
369473 RETVAL
370474
373477
374478 Math::BigInt::LTM
375479 _modpow(Class, Math::BigInt::LTM n, Math::BigInt::LTM exp, Math::BigInt::LTM mod)
376 CODE:
377 Newz(0, RETVAL, 1, mp_int);
378 mp_init(RETVAL);
480 PREINIT:
481 mp_err merr;
482 CODE:
483 Newz(0, RETVAL, 1, mp_int);
484 merr = mp_init(RETVAL);
379485 if (mp_cmp_d(mod, 1) == MP_EQ) {
380 mp_set_int(RETVAL, 0);
381 }
382 else {
383 mp_exptmod(n, exp, mod, RETVAL);
384 }
486 mp_zero(RETVAL);
487 }
488 else {
489 merr = mp_exptmod(n, exp, mod, RETVAL);
490 }
491 PERL_UNUSED_VAR(merr);
385492 OUTPUT:
386493 RETVAL
387494
391498 void
392499 _modinv(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
393500 PREINIT:
501 mp_err merr;
394502 int rc;
395503 SV* s;
396504 mp_int* RETVAL;
397505 PPCODE:
398506 Newz(0, RETVAL, 1, mp_int);
399 mp_init(RETVAL);
507 merr = mp_init(RETVAL);
400508 rc = mp_invmod(x, y, RETVAL);
401509 EXTEND(SP, 2); /* we return two values */
402510 if (rc != MP_OKAY) {
412520 sv_setpvn(s, "+", 1);
413521 PUSHs(s);
414522 }
523 PERL_UNUSED_VAR(merr);
415524
416525 ##############################################################################
417526 # _add() - add $y to $x in place
418527
419528 void
420529 _add(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
421 PPCODE:
422 mp_add(x, y, x);
530 PREINIT:
531 mp_err merr;
532 PPCODE:
533 merr = mp_add(x, y, x);
534 PERL_UNUSED_VAR(merr);
423535 XPUSHs(ST(1)); /* x */
424536
425537 ##############################################################################
427539
428540 void
429541 _inc(Class, Math::BigInt::LTM x)
430 PPCODE:
431 mp_add_d(x, 1, x);
542 PREINIT:
543 mp_err merr;
544 PPCODE:
545 merr = mp_add_d(x, 1, x);
546 PERL_UNUSED_VAR(merr);
432547 XPUSHs(ST(1)); /* x */
433548
434549 ##############################################################################
436551
437552 void
438553 _dec(Class, Math::BigInt::LTM x)
439 PPCODE:
440 mp_sub_d(x, 1, x);
554 PREINIT:
555 mp_err merr;
556 PPCODE:
557 merr = mp_sub_d(x, 1, x);
558 PERL_UNUSED_VAR(merr);
441559 XPUSHs(ST(1)); /* x */
442560
443561 ##############################################################################
446564
447565 void
448566 _sub(Class, Math::BigInt::LTM x, Math::BigInt::LTM y, ...)
567 PREINIT:
568 mp_err merr;
449569 PPCODE:
450570 if ( items == 4 && SvTRUE(ST(3)) ) {
451571 /* y -= x */
452 mp_sub(x, y, y);
572 merr = mp_sub(x, y, y);
453573 XPUSHs(ST(2)); /* y */
454574 }
455575 else {
456576 /* x -= y */
457 mp_sub(x, y, x);
577 merr = mp_sub(x, y, x);
458578 XPUSHs(ST(1)); /* x */
459579 }
580 PERL_UNUSED_VAR(merr);
460581
461582 ##############################################################################
462583 # _rsft()
464585 void
465586 _rsft(Class, Math::BigInt::LTM x, Math::BigInt::LTM y, unsigned long base_int)
466587 PREINIT:
588 mp_err merr;
467589 mp_int* BASE;
468590 PPCODE:
469591 Newz(0, BASE, 1, mp_int);
470 mp_init_set_int(BASE, base_int);
471 mp_expt_d(BASE, mp_get_long(y), BASE);
472 mp_div(x, BASE, x, NULL);
592 merr = mp_init(BASE);
593 #ifdef BN_MP_SET_INT_C
594 mp_set_int(BASE, base_int);
595 #else
596 mp_set_ul(BASE, base_int);
597 #endif
598 #ifdef BN_MP_GET_LONG_C
599 merr = mp_expt_d(BASE, mp_get_long(y), BASE);
600 #else
601 merr = mp_expt_d(BASE, mp_get_ul(y), BASE);
602 #endif
603 merr = mp_div(x, BASE, x, NULL);
604 PERL_UNUSED_VAR(merr);
473605 mp_clear(BASE);
474606 Safefree(BASE);
475607 XPUSHs(ST(1)); /* x */
480612 void
481613 _lsft(Class, Math::BigInt::LTM x, Math::BigInt::LTM y, unsigned long base_int)
482614 PREINIT:
615 mp_err merr;
483616 mp_int* BASE;
484617 PPCODE:
485618 Newz(0, BASE, 1, mp_int);
486 mp_init_set_int(BASE, base_int);
487 mp_expt_d(BASE, mp_get_long(y), BASE);
488 mp_mul(x, BASE, x);
619 merr = mp_init(BASE);
620 #ifdef BN_MP_SET_INT_C
621 mp_set_int(BASE, base_int);
622 #else
623 mp_set_ul(BASE, base_int);
624 #endif
625 #ifdef BN_MP_GET_LONG_C
626 merr = mp_expt_d(BASE, mp_get_long(y), BASE);
627 #else
628 merr = mp_expt_d(BASE, mp_get_ul(y), BASE);
629 #endif
630 merr = mp_mul(x, BASE, x);
631 PERL_UNUSED_VAR(merr);
489632 mp_clear(BASE);
490633 Safefree(BASE);
491634 XPUSHs(ST(1)); /* x */
495638
496639 void
497640 _mul(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
498 PPCODE:
499 mp_mul(x, y, x);
641 PREINIT:
642 mp_err merr;
643 PPCODE:
644 merr = mp_mul(x, y, x);
645 PERL_UNUSED_VAR(merr);
500646 XPUSHs(ST(1)); /* x */
501647
502648 ##############################################################################
505651 void
506652 _div(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
507653 PREINIT:
654 mp_err merr;
508655 mp_int * rem;
509656 PPCODE:
510657 if (GIMME_V == G_ARRAY) {
511658 Newz(0, rem, 1, mp_int);
512 mp_init(rem);
513 mp_div(x, y, x, rem);
659 merr = mp_init(rem);
660 merr = mp_div(x, y, x, rem);
514661 EXTEND(SP, 2);
515662 PUSHs(ST(1)); /* x */
516663 PUSHs(sv_2mortal(sv_from_mpi(rem)));
517664 }
518665 else {
519 mp_div(x, y, x, NULL);
666 merr = mp_div(x, y, x, NULL);
520667 XPUSHs(ST(1)); /* x */
521668 }
669 PERL_UNUSED_VAR(merr);
522670
523671 ##############################################################################
524672 # _mod() - x %= y
525673
526674 void
527675 _mod(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
528 PPCODE:
529 mp_mod(x, y, x);
676 PREINIT:
677 mp_err merr;
678 PPCODE:
679 merr = mp_mod(x, y, x);
680 PERL_UNUSED_VAR(merr);
530681 XPUSHs(ST(1)); /* x */
531682
532683 ##############################################################################
586737
587738 void
588739 _pow(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
589 PPCODE:
590 mp_expt_d(x, mp_get_long(y), x);
740 PREINIT:
741 mp_err merr;
742 PPCODE:
743 #ifdef BN_MP_GET_LONG_C
744 merr = mp_expt_d(x, mp_get_long(y), x);
745 #else
746 merr = mp_expt_d(x, mp_get_ul(y), x);
747 #endif
748 PERL_UNUSED_VAR(merr);
591749 XPUSHs(ST(1)); /* x */
592750
593751 ##############################################################################
595753
596754 Math::BigInt::LTM
597755 _gcd(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
598 CODE:
599 Newz(0, RETVAL, 1, mp_int);
600 mp_init(RETVAL);
601 mp_gcd(x, y, RETVAL);
756 PREINIT:
757 mp_err merr;
758 CODE:
759 Newz(0, RETVAL, 1, mp_int);
760 merr = mp_init(RETVAL);
761 merr = mp_gcd(x, y, RETVAL);
762 PERL_UNUSED_VAR(merr);
602763 OUTPUT:
603764 RETVAL
604765
607768
608769 void
609770 _and(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
610 PPCODE:
611 mp_and(x, y, x);
771 PREINIT:
772 mp_err merr;
773 PPCODE:
774 merr = mp_and(x, y, x);
775 PERL_UNUSED_VAR(merr);
612776 XPUSHs(ST(1)); /* x */
613777
614778 ##############################################################################
616780
617781 void
618782 _xor(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
619 PPCODE:
620 mp_xor(x, y, x);
783 PREINIT:
784 mp_err merr;
785 PPCODE:
786 merr = mp_xor(x, y, x);
787 PERL_UNUSED_VAR(merr);
621788 XPUSHs(ST(1)); /* x */
622789
623790 ##############################################################################
625792
626793 void
627794 _or(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
628 PPCODE:
629 mp_or(x, y, x);
795 PREINIT:
796 mp_err merr;
797 PPCODE:
798 merr = mp_or(x, y, x);
799 PERL_UNUSED_VAR(merr);
630800 XPUSHs(ST(1)); /* x */
631801
632802 ##############################################################################
634804
635805 Math::BigInt::LTM
636806 _copy(Class, Math::BigInt::LTM m)
637 CODE:
638 Newz(0, RETVAL, 1, mp_int);
639 mp_init(RETVAL);
640 mp_copy(m, RETVAL);
807 PREINIT:
808 mp_err merr;
809 CODE:
810 Newz(0, RETVAL, 1, mp_int);
811 merr = mp_init(RETVAL);
812 merr = mp_copy(m, RETVAL);
813 PERL_UNUSED_VAR(merr);
641814 OUTPUT:
642815 RETVAL
643816
666839
667840 void
668841 _sqrt(Class, Math::BigInt::LTM x)
669 PPCODE:
670 mp_sqrt(x, x);
842 PREINIT:
843 mp_err merr;
844 PPCODE:
845 merr = mp_sqrt(x, x);
846 PERL_UNUSED_VAR(merr);
671847 XPUSHs(ST(1)); /* x */
672848
673849 ##############################################################################
675851
676852 void
677853 _root(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
678 PPCODE:
679 mp_n_root(x, mp_get_long(y), x);
854 PREINIT:
855 mp_err merr;
856 PPCODE:
857 #ifdef BN_MP_GET_LONG_C
858 merr = mp_n_root(x, mp_get_long(y), x);
859 #else
860 merr = mp_n_root(x, mp_get_ul(y), x);
861 #endif
862 PERL_UNUSED_VAR(merr);
680863 XPUSHs(ST(1)); /* x */
681864
682865 ##############################################################################
683866 # _lcm() - least common multiple
684867 void
685868 _lcm(Class, Math::BigInt::LTM x, Math::BigInt::LTM y)
686 PPCODE:
687 mp_lcm(x, y, x) ;
869 PREINIT:
870 mp_err merr;
871 PPCODE:
872 merr = mp_lcm(x, y, x) ;
873 PERL_UNUSED_VAR(merr);
688874 XPUSHs(ST(1)); /* x */
689875
690876 ##############################################################################
696882 SV *cloning = NO_INIT
697883 SV *serialized
698884 PREINIT:
885 mp_err merr;
699886 SV *target;
700887 mp_int *mpi;
701888 PPCODE:
702889 PERL_UNUSED_VAR(cloning);
703890 if (SvROK(blank_obj) && sv_isa(blank_obj, "Math::BigInt::LTM")) {
704891 Newz(0, mpi, 1, mp_int);
705 mp_init(mpi);
706 mp_read_radix(mpi, SvPV_nolen(serialized), 10);
892 merr = mp_init(mpi);
893 merr = mp_read_radix(mpi, SvPV_nolen(serialized), 10);
894 PERL_UNUSED_VAR(merr);
707895 target = SvRV(blank_obj);
708896 SvIV_set(target, PTR2IV(mpi));
709897 SvIOK_on(target);
718906 Math::BigInt::LTM self
719907 SV *cloning = NO_INIT
720908 PREINIT:
909 mp_err merr;
721910 unsigned long len;
722911 char *buf;
723912 CODE:
728917 else {
729918 len = mp_count_bits(self) / 3 + 3; /* decimal_size ~ (binary_size/3 + 1) +1 for sign +1 for NUL-byte */
730919 Newz(0, buf, len, char);
731 mp_toradix_n(self, buf, 10, len);
920 merr = mp_toradix_n(self, buf, 10, len);
921 PERL_UNUSED_VAR(merr);
732922 RETVAL = newSVpv(buf, 0);
733923 Safefree(buf);
734924 }