~mdw
/
catacomb-perl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
infra: Add a copy of the GPL.
[catacomb-perl]
/
pgen.xs
diff --git
a/pgen.xs
b/pgen.xs
index
8955bb8
..
dd413a6
100644
(file)
--- a/
pgen.xs
+++ b/
pgen.xs
@@
-1,6
+1,6
@@
# -*-fundamental-*-
#
# -*-fundamental-*-
#
-# $Id
: pgen.xs,v 1.1 2004/04/02 18:04:01 mdw Exp
$
+# $Id$
#
# Prime generation gubbins
#
#
# Prime generation gubbins
#
@@
-25,13
+25,6
@@
# along with Catacomb/Perl; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# along with Catacomb/Perl; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#----- Revision history -----------------------------------------------------
-#
-# $Log: pgen.xs,v $
-# Revision 1.1 2004/04/02 18:04:01 mdw
-# Initial checkin.
-#
-
MODULE = Catacomb PACKAGE = Catacomb::MP::Prime::Filter
MP_Prime_Filter *
MODULE = Catacomb PACKAGE = Catacomb::MP::Prime::Filter
MP_Prime_Filter *
@@
-67,9
+60,9
@@
muladd(pf, m, a)
U32 a
CODE:
if (m > MPW_MAX)
U32 a
CODE:
if (m > MPW_MAX)
- croak("multiplier too large
in Catacomb::MP::Prime::Filter::muladd
");
+ croak("multiplier too large");
if (a > MPW_MAX)
if (a > MPW_MAX)
- croak("step too large
in Catacomb::MP::Prime::Filter::muladd
");
+ croak("step too large");
RETVAL = CREATE(MP_Prime_Filter);
RETVAL->rc = pfilt_muladd(&RETVAL->pf, &pf->pf, m, a);
OUTPUT:
RETVAL = CREATE(MP_Prime_Filter);
RETVAL->rc = pfilt_muladd(&RETVAL->pf, &pf->pf, m, a);
OUTPUT:
@@
-81,7
+74,7
@@
step(pf, n)
U32 n
CODE:
if (n > MPW_MAX)
U32 n
CODE:
if (n > MPW_MAX)
- croak("step too large
in Catacomb::MP::Prime::Filter::step
");
+ croak("step too large");
RETVAL = pf->rc = pfilt_step(&pf->pf, n);
OUTPUT:
RETVAL
RETVAL = pf->rc = pfilt_step(&pf->pf, n);
OUTPUT:
RETVAL
@@
-135,12
+128,11
@@
new(me, x)
SV *me
mp *x
CODE:
SV *me
mp *x
CODE:
- if (x->f & MP_NEG)
- croak("Argument to Catacomb::MP::Prime::Rabin must be positive");
- if (x->v == x->vl || !(x->v[0] & 1u))
- croak("Argument to Catacomb::MP::Prime::Rabin must be odd");
RETVAL = CREATE(MP_Prime_Rabin);
RETVAL = CREATE(MP_Prime_Rabin);
- rabin_create(RETVAL, x);
+ if (rabin_create(RETVAL, x)) {
+ DESTROY(RETVAL);
+ RETVAL = 0;
+ }
OUTPUT:
RETVAL
OUTPUT:
RETVAL
@@
-157,6
+149,14
@@
rabin_test(r, g)
MP_Prime_Rabin *r
mp *g
MP_Prime_Rabin *r
mp *g
+mp *
+m(r)
+ MP_Prime_Rabin *r
+ CODE:
+ RETVAL = MP_COPY(r->mm.m);
+ OUTPUT:
+ RETVAL
+
int
rabin_iters(r)
MP_Prime_Rabin *r
int
rabin_iters(r)
MP_Prime_Rabin *r
@@
-164,7
+164,8
@@
rabin_iters(r)
mp_bits(r->mm.m)
int
mp_bits(r->mm.m)
int
-ntests(bits)
+ntests(me, bits)
+ SV *me
int bits
CODE:
RETVAL = rabin_iters(bits);
int bits
CODE:
RETVAL = rabin_iters(bits);
@@
-250,10
+251,26
@@
subev(me)
OUTPUT:
RETVAL
OUTPUT:
RETVAL
+int
+PG_BEGIN(me, ev)
+ SV *me
+ MP_Prime_Gen_Event *ev
+ ALIAS:
+ PG_TRY = 0
+ PG_PASS = 1
+ PG_FAIL = 2
+ PG_ABORT = 3
+ PG_DONE = 4
+ CODE:
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
MODULE = Catacomb PACKAGE = Catacomb::MP::Prime
mp *
MODULE = Catacomb PACKAGE = Catacomb::MP::Prime
mp *
-gen(name, m, steps, stepper, tests, tester, events = &PL_sv_undef)
+gen(me, name, m, steps, stepper, tests, tester, events = &PL_sv_undef)
+ SV *me
char *name
mp *m
MP_Prime_Gen_NullProc *events
char *name
mp *m
MP_Prime_Gen_NullProc *events
@@
-274,7
+291,8
@@
gen(name, m, steps, stepper, tests, tester, events = &PL_sv_undef)
RETVAL
void
RETVAL
void
-strongprime_setup(name, bits, r = &rand_global, n = 0, events = &PL_sv_undef)
+strongprime_setup(me, name, bits, r = &rand_global, n = 0, events = &PL_sv_undef)
+ SV *me
char *name
unsigned bits
grand *r
char *name
unsigned bits
grand *r
@@
-290,11
+308,9
@@
strongprime_setup(name, bits, r = &rand_global, n = 0, events = &PL_sv_undef)
j = CREATE(MP_Prime_Gen_JumpStepper);
d = strongprime_setup(name, MP_NEW, &j->pf, bits, r, n, ev, ectx);
EXTEND(SP, 2);
j = CREATE(MP_Prime_Gen_JumpStepper);
d = strongprime_setup(name, MP_NEW, &j->pf, bits, r, n, ev, ectx);
EXTEND(SP, 2);
- if (!d)
{
+ if (!d)
DESTROY(j);
DESTROY(j);
- PUSHs(&PL_sv_undef);
- PUSHs(&PL_sv_undef);
- } else {
+ else {
j->j.j = &j->pf;
j->mg.p = pgen_jump;
j->mg.ctx = &j->j;
j->j.j = &j->pf;
j->mg.p = pgen_jump;
j->mg.ctx = &j->j;
@@
-303,7
+319,8
@@
strongprime_setup(name, bits, r = &rand_global, n = 0, events = &PL_sv_undef)
}
void
}
void
-limlee(name, qbits, pbits, r = &rand_global, on = 0, oevents = &PL_sv_undef, ievents = &PL_sv_undef)
+limlee(me, name, qbits, pbits, r = &rand_global, on = 0, oevents = &PL_sv_undef, ievents = &PL_sv_undef)
+ SV *me
char *name
unsigned qbits
unsigned pbits
char *name
unsigned qbits
unsigned pbits
@@
-323,11
+340,13
@@
limlee(name, qbits, pbits, r = &rand_global, on = 0, oevents = &PL_sv_undef, iev
if (GIMME_V == G_SCALAR) {
x = limlee(name, MP_NEW, MP_NEW, qbits, pbits, r, on,
oev, oec, iev, iec, 0, 0);
if (GIMME_V == G_SCALAR) {
x = limlee(name, MP_NEW, MP_NEW, qbits, pbits, r, on,
oev, oec, iev, iec, 0, 0);
+ if (!x) return;
EXTEND(SP, 1);
PUSHs(RET_MP(x));
} else {
x = limlee(name, MP_NEW, MP_NEW, qbits, pbits, r, on,
oev, oec, iev, iec, &nf, &f);
EXTEND(SP, 1);
PUSHs(RET_MP(x));
} else {
x = limlee(name, MP_NEW, MP_NEW, qbits, pbits, r, on,
oev, oec, iev, iec, &nf, &f);
+ if (!x) return;
EXTEND(SP, 1 + nf);
PUSHs(RET_MP(x));
for (i = 0; i < nf; i++)
EXTEND(SP, 1 + nf);
PUSHs(RET_MP(x));
for (i = 0; i < nf; i++)
@@
-346,18
+365,38
@@
name(ev)
RETVAL
mp *
RETVAL
mp *
-m
p(ev, m = 0
)
+m
(ev, x = &PL_sv_undef
)
MP_Prime_Gen_Event *ev
MP_Prime_Gen_Event *ev
- mp *m
+ SV *x
+ PREINIT:
+ mp *y;
CODE:
RETVAL = mp_copy(ev->m);
CODE:
RETVAL = mp_copy(ev->m);
- if (items > 1) {
+ if (SvOK(x)) {
+ if ((y = mp_fromsv(x, "x", 0, 1)) == 0)
+ croak("bad integer");
mp_drop(ev->m);
mp_drop(ev->m);
- ev->m =
mp_copy(m)
;
+ ev->m =
y
;
}
OUTPUT:
RETVAL
}
OUTPUT:
RETVAL
+int
+steps(ev)
+ MP_Prime_Gen_Event *ev
+ CODE:
+ RETVAL = ev->steps;
+ OUTPUT:
+ RETVAL
+
+int
+tests(ev)
+ MP_Prime_Gen_Event *ev
+ CODE:
+ RETVAL = ev->tests;
+ OUTPUT:
+ RETVAL
+
SV *
rand(ev)
MP_Prime_Gen_Event *ev
SV *
rand(ev)
MP_Prime_Gen_Event *ev