gmp.xs

来自「a very popular packet of cryptography to」· XS 代码 · 共 2,874 行 · 第 1/5 页

XS
2,874
字号
inttstbit (z, bit)    mpz_coerce   z    ulong_coerce bitCODE:    RETVAL = mpz_tstbit (z, bit);OUTPUT:    RETVAL#------------------------------------------------------------------------------MODULE = GMP         PACKAGE = GMP::Mpqmpqmpq (...)ALIAS:    GMP::Mpq::new = 1CODE:    TRACE (printf ("%s new, ix=%ld, items=%d\n", mpq_class, ix, (int) items));    RETVAL = new_mpq();    switch (items) {    case 0:      mpq_set_ui (RETVAL->m, 0L, 1L);      break;    case 1:      {        mpq_ptr rp = RETVAL->m;        mpq_ptr cp = coerce_mpq (rp, ST(0));        if (cp != rp)          mpq_set (rp, cp);      }      break;    case 2:      {        mpz_ptr rp, cp;        rp = mpq_numref (RETVAL->m);        cp = coerce_mpz (rp, ST(0));        if (cp != rp)          mpz_set (rp, cp);        rp = mpq_denref (RETVAL->m);        cp = coerce_mpz (rp, ST(1));        if (cp != rp)          mpz_set (rp, cp);      }      break;    default:      croak ("%s new: invalid arguments", mpq_class);    }OUTPUT:    RETVALvoidoverload_constant (str, pv, d1, ...)    const_string_assume str    SV                  *pv    dummy               d1PREINIT:    SV  *sv;    mpq q;PPCODE:    TRACE (printf ("%s constant: %s\n", mpq_class, str));    q = new_mpq();    if (mpq_set_str (q->m, str, 0) == 0)      { sv = sv_bless (sv_setref_pv (sv_newmortal(), NULL, q), mpq_class_hv); }    else      { free_mpq (q); sv = pv; }    XPUSHs(sv);mpqoverload_copy (q, d1, d2)    mpq_assume q    dummy      d1    dummy      d2CODE:    RETVAL = new_mpq();    mpq_set (RETVAL->m, q->m);OUTPUT:    RETVALvoidDESTROY (q)    mpq_assume qCODE:    TRACE (printf ("%s DESTROY %p\n", mpq_class, q));    free_mpq (q);malloced_stringoverload_string (q, d1, d2)    mpq_assume q    dummy      d1    dummy      d2CODE:    TRACE (printf ("%s overload_string %p\n", mpq_class, q));    RETVAL = mpq_get_str (NULL, 10, q->m);OUTPUT:    RETVALmpqoverload_add (xv, yv, order)    SV *xv    SV *yv    SV *orderALIAS:    GMP::Mpq::overload_sub   = 1    GMP::Mpq::overload_mul   = 2    GMP::Mpq::overload_div   = 3PREINIT:    static_functable const struct {      void (*op) (mpq_ptr, mpq_srcptr, mpq_srcptr);    } table[] = {      { mpq_add }, /* 0 */      { mpq_sub }, /* 1 */      { mpq_mul }, /* 2 */      { mpq_div }, /* 3 */    };CODE:    TRACE (printf ("%s binary\n", mpf_class));    assert_table (ix);    if (order == &PL_sv_yes)      SV_PTR_SWAP (xv, yv);    RETVAL = new_mpq();    (*table[ix].op) (RETVAL->m,                     coerce_mpq (tmp_mpq_0, xv),                     coerce_mpq (tmp_mpq_1, yv));OUTPUT:    RETVALvoidoverload_addeq (x, y, o)    mpq_assume   x    mpq_coerce   y    order_noswap oALIAS:    GMP::Mpq::overload_subeq = 1    GMP::Mpq::overload_muleq = 2    GMP::Mpq::overload_diveq = 3PREINIT:    static_functable const struct {      void (*op) (mpq_ptr, mpq_srcptr, mpq_srcptr);    } table[] = {      { mpq_add    }, /* 0 */      { mpq_sub    }, /* 1 */      { mpq_mul    }, /* 2 */      { mpq_div    }, /* 3 */    };PPCODE:    assert_table (ix);    (*table[ix].op) (x->m, x->m, y);    XPUSHs(ST(0));mpqoverload_lshift (qv, nv, order)    SV *qv    SV *nv    SV *orderALIAS:    GMP::Mpq::overload_rshift   = 1    GMP::Mpq::overload_pow      = 2PREINIT:    static_functable const struct {      void (*op) (mpq_ptr, mpq_srcptr, unsigned long);    } table[] = {      { mpq_mul_2exp }, /* 0 */      { mpq_div_2exp }, /* 1 */      { x_mpq_pow_ui }, /* 2 */    };CODE:    assert_table (ix);    if (order == &PL_sv_yes)      SV_PTR_SWAP (qv, nv);    RETVAL = new_mpq();    (*table[ix].op) (RETVAL->m, coerce_mpq (RETVAL->m, qv), coerce_ulong (nv));OUTPUT:    RETVALvoidoverload_lshifteq (q, n, o)    mpq_assume   q    ulong_coerce n    order_noswap oALIAS:    GMP::Mpq::overload_rshifteq   = 1    GMP::Mpq::overload_poweq      = 2PREINIT:    static_functable const struct {      void (*op) (mpq_ptr, mpq_srcptr, unsigned long);    } table[] = {      { mpq_mul_2exp }, /* 0 */      { mpq_div_2exp }, /* 1 */      { x_mpq_pow_ui }, /* 2 */    };PPCODE:    assert_table (ix);    (*table[ix].op) (q->m, q->m, n);    XPUSHs(ST(0));voidoverload_inc (q, d1, d2)    mpq_assume q    dummy      d1    dummy      d2ALIAS:    GMP::Mpq::overload_dec = 1PREINIT:    static_functable const struct {      void (*op) (mpz_ptr, mpz_srcptr, mpz_srcptr);    } table[] = {      { mpz_add }, /* 0 */      { mpz_sub }, /* 1 */    };CODE:    assert_table (ix);    (*table[ix].op) (mpq_numref(q->m), mpq_numref(q->m), mpq_denref(q->m));mpqoverload_abs (q, d1, d2)    mpq_assume q    dummy      d1    dummy      d2ALIAS:    GMP::Mpq::overload_neg = 1PREINIT:    static_functable const struct {      void (*op) (mpq_ptr w, mpq_srcptr x);    } table[] = {      { mpq_abs }, /* 0 */      { mpq_neg }, /* 1 */    };CODE:    assert_table (ix);    RETVAL = new_mpq();    (*table[ix].op) (RETVAL->m, q->m);OUTPUT:    RETVALintoverload_spaceship (x, y, order)    mpq_assume x    mpq_coerce y    SV         *orderCODE:    RETVAL = mpq_cmp (x->m, y);    RETVAL = SGN (RETVAL);    if (order == &PL_sv_yes)      RETVAL = -RETVAL;OUTPUT:    RETVALbooloverload_bool (q, d1, d2)    mpq_assume q    dummy      d1    dummy      d2ALIAS:    GMP::Mpq::overload_not = 1CODE:    RETVAL = (mpq_sgn (q->m) != 0) ^ ix;OUTPUT:    RETVALbooloverload_eq (x, yv, d)    mpq_assume x    SV         *yv    dummy      dALIAS:    GMP::Mpq::overload_ne = 1PREINIT:    int  use;CODE:    use = use_sv (yv);    switch (use) {    case USE_IVX:    case USE_UVX:    case USE_MPZ:      RETVAL = 0;      if (x_mpq_integer_p (x->m))        {          switch (use) {          case USE_IVX:            RETVAL = (mpz_cmp_si (mpq_numref(x->m), SvIVX(yv)) == 0);            break;          case USE_UVX:            RETVAL = (mpz_cmp_ui (mpq_numref(x->m), SvUVX(yv)) == 0);            break;          case USE_MPZ:            RETVAL = (mpz_cmp (mpq_numref(x->m), SvMPZ(yv)->m) == 0);            break;          }        }      break;    case USE_MPQ:      RETVAL = (mpq_equal (x->m, SvMPQ(yv)->m) != 0);      break;    default:      RETVAL = (mpq_equal (x->m, coerce_mpq_using (tmp_mpq_0, yv, use)) != 0);      break;    }    RETVAL ^= ix;OUTPUT:    RETVALvoidcanonicalize (q)    mpq qCODE:    mpq_canonicalize (q->m);mpqinv (q)    mpq_coerce qCODE:    RETVAL = new_mpq();    mpq_inv (RETVAL->m, q);OUTPUT:    RETVALmpznum (q)    mpq qALIAS:    GMP::Mpq::den = 1CODE:    RETVAL = new_mpz();    mpz_set (RETVAL->m, (ix == 0 ? mpq_numref(q->m) : mpq_denref(q->m)));OUTPUT:    RETVAL#------------------------------------------------------------------------------MODULE = GMP         PACKAGE = GMP::Mpfmpfmpf (...)ALIAS:    GMP::Mpf::new = 1PREINIT:    unsigned long  prec;CODE:    TRACE (printf ("%s new\n", mpf_class));    if (items > 2)      croak ("%s new: invalid arguments", mpf_class);    prec = (items == 2 ? coerce_ulong (ST(1)) : mpf_get_default_prec());    RETVAL = new_mpf (prec);    if (items >= 1)      {        SV *sv = ST(0);        my_mpf_set_sv_using (RETVAL, sv, use_sv(sv));      }OUTPUT:    RETVALmpfoverload_constant (sv, d1, d2, ...)    SV     *sv    dummy  d1    dummy  d2CODE:    assert (SvPOK (sv));    TRACE (printf ("%s constant: %s\n", mpq_class, SvPVX(sv)));    RETVAL = new_mpf (mpf_get_default_prec());    my_mpf_set_svstr (RETVAL, sv);OUTPUT:    RETVALmpfoverload_copy (f, d1, d2)    mpf_assume f    dummy      d1    dummy      d2CODE:    TRACE (printf ("%s copy\n", mpf_class));    RETVAL = new_mpf (mpf_get_prec (f));    mpf_set (RETVAL, f);OUTPUT:    RETVALvoidDESTROY (f)    mpf_assume fCODE:    TRACE (printf ("%s DESTROY %p\n", mpf_class, f));    mpf_clear (f);    Safefree (f);    assert_support (mpf_count--);    TRACE_ACTIVE ();mpfoverload_add (x, y, order)    mpf_assume     x    mpf_coerce_st0 y    SV             *orderALIAS:    GMP::Mpf::overload_sub   = 1    GMP::Mpf::overload_mul   = 2    GMP::Mpf::overload_div   = 3PREINIT:    static_functable const struct {      void (*op) (mpf_ptr, mpf_srcptr, mpf_srcptr);    } table[] = {      { mpf_add }, /* 0 */      { mpf_sub }, /* 1 */      { mpf_mul }, /* 2 */      { mpf_div }, /* 3 */    };CODE:    assert_table (ix);    RETVAL = new_mpf (mpf_get_prec (x));    if (order == &PL_sv_yes)      MPF_PTR_SWAP (x, y);    (*table[ix].op) (RETVAL, x, y);OUTPUT:    RETVALvoidoverload_addeq (x, y, o)    mpf_assume     x    mpf_coerce_st0 y    order_noswap   oALIAS:    GMP::Mpf::overload_subeq = 1    GMP::Mpf::overload_muleq = 2    GMP::Mpf::overload_diveq = 3PREINIT:    static_functable const struct {      void (*op) (mpf_ptr, mpf_srcptr, mpf_srcptr);    } table[] = {      { mpf_add }, /* 0 */      { mpf_sub }, /* 1 */      { mpf_mul }, /* 2 */      { mpf_div }, /* 3 */    };PPCODE:    assert_table (ix);    (*table[ix].op) (x, x, y);    XPUSHs(ST(0));mpfoverload_lshift (fv, nv, order)    SV *fv    SV *nv    SV *orderALIAS:    GMP::Mpf::overload_rshift = 1    GMP::Mpf::overload_pow    = 2PREINIT:    static_functable const struct {      void (*op) (mpf_ptr, mpf_srcptr, unsigned long);    } table[] = {      { mpf_mul_2exp }, /* 0 */      { mpf_div_2exp }, /* 1 */      { mpf_pow_ui   }, /* 2 */    };    mpf f;    unsigned long prec;CODE:    assert_table (ix);    MPF_ASSUME (f, fv);    prec = mpf_get_prec (f);    if (order == &PL_sv_yes)      SV_PTR_SWAP (fv, nv);    f = coerce_mpf (tmp_mpf_0, fv, prec);    RETVAL = new_mpf (prec);    (*table[ix].op) (RETVAL, f, coerce_ulong (nv));OUTPUT:    RETVALvoidoverload_lshifteq (f, n, o)    mpf_assume   f    ulong_coerce n    order_noswap oALIAS:    GMP::Mpf::overload_rshifteq   = 1    GMP::Mpf::overload_poweq      = 2PREINIT:    static_functable const struct {      void (*op) (mpf_ptr, mpf_srcptr, unsigned long);    } table[] = {      { mpf_mul_2exp }, /* 0 */      { mpf_div_2exp }, /* 1 */      { mpf_pow_ui   }, /* 2 */    };PPCODE:    assert_table (ix);    (*table[ix].op) (f, f, n);    XPUSHs(ST(0));mpfoverload_abs (f, d1, d2)    mpf_assume f    dummy      d1    dummy      d2ALIAS:    GMP::Mpf::overload_neg   = 1    GMP::Mpf::overload_sqrt  = 2PREINIT:    static_functable const struct {      void (*op) (mpf_ptr w, mpf_srcptr x);    } table[] = {      { mpf_abs  }, /* 0 */      { mpf_neg  }, /* 1 */      { mpf_sqrt }, /* 2 */    };CODE:    assert_table (ix);    RETVAL = new_mpf (mpf_get_prec (f));    (*table[ix].op) (RETVAL, f);OUTPUT:    RETVALvoidoverload_inc (f, d1, d2)    mpf_assume f    dummy      d1    dummy      d2ALIAS:    GMP::Mpf::overload_dec = 1PREINIT:    static_functable const struct {      void (*op) (mpf_ptr w, mpf_srcptr x, unsigned long y);    } table[] = {      { mpf_add_ui }, /* 0 */      { mpf_sub_ui }, /* 1 */    };CODE:    assert_table (ix);    (*table[ix].op) (f, f, 1L);intoverload_spaceship (xv, yv, order)    SV *xv    SV *yv    SV *orderPREINIT:    mpf x;CODE:    MPF_ASSUME (x, xv);    switch (use_sv (yv)) {    case USE_IVX

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?