Much wider support for Catacomb in all its glory.
[catacomb-perl] / gf.xs
diff --git a/gf.xs b/gf.xs
index 3ea6464..270d69c 100644 (file)
--- a/gf.xs
+++ b/gf.xs
@@ -34,7 +34,7 @@ new(me, sv = 0, radix = 0)
        SV *sv
        int radix
        CODE:
-       RETVAL = sv ? mp_fromsv(sv, "sv", "Catacomb::GF", radix, 1) : MP_ZERO;
+       RETVAL = sv ? mp_fromsv(sv, "sv", radix, 1) : MP_ZERO;
        OUTPUT:
        RETVAL
 
@@ -72,70 +72,6 @@ loadl(me, sv)
        OUTPUT:
        RETVAL
 
-int
-metrics(m)
-       gf *m
-       INTERFACE_MACRO:
-       XSINTERFACE_FUNC
-       XSINTERFACE_FUNC_SETMP
-       INTERFACE:
-       octets bits
-
-SV *
-storeb(m, i = -1)
-       gf *m
-       int i
-       PREINIT:
-       size_t sz;
-       CODE:
-       sz = (i < 0) ? mp_octets(m) : i;
-       RETVAL = NEWSV(0, sz ? sz : 1);
-       mp_storeb(m, SvPVX(RETVAL), sz);
-       SvCUR_set(RETVAL, sz);
-       SvPOK_on(RETVAL);
-       OUTPUT:
-       RETVAL
-
-SV *
-storel(m, i = -1)
-       gf *m
-       int i
-       PREINIT:
-       size_t sz;
-       CODE:
-       sz = (i < 0) ? mp_octets(m) : i;
-       RETVAL = NEWSV(0, sz ? sz : 1);
-       mp_storel(m, SvPVX(RETVAL), sz);
-       SvCUR_set(RETVAL, sz);
-       SvPOK_on(RETVAL);
-       OUTPUT:
-       RETVAL
-
-SV *
-tostring(m, radix = 16)
-       gf *m
-       int radix
-       CODE:
-       RETVAL = NEWSV(0, 0);
-       mp_writesv(m, RETVAL, radix);
-       OUTPUT:
-       RETVAL
-
-SV *
-toint(m)
-       gf *m
-       CODE:
-       RETVAL = newSViv(mp_toiv(m));
-       OUTPUT:
-       RETVAL
-
-SV *
-DESTROY(m)
-       gf *m
-       CODE:
-       mp_drop(m);
-       XSRETURN_UNDEF;
-
 mp *
 gf_sqr(a)
        gf *a
@@ -159,9 +95,32 @@ binop(a, b)
        INTERFACE:
        add sub mul
 
+mp *
+logop(a, b)
+       gf *a
+       gf *b
+       C_ARGS:
+       MP_NEW, a, b
+       INTERFACE_MACRO:
+       XSINTERFACE_FUNC
+       XSINTERFACE_FUNC_SETMP
+       INTERFACE:
+       and or xor nand nor
+
+mp *
+unop(a)
+       gf *a
+       C_ARGS:
+       MP_NEW, a
+       INTERFACE_MACRO:
+       XSINTERFACE_FUNC
+       XSINTERFACE_FUNC_SETMP
+       INTERFACE:
+       not
+
 gf *
 shiftop(a, n)
-       mp *a
+       gf *a
        int n
        C_ARGS:
        MP_NEW, a, n
@@ -171,14 +130,17 @@ shiftop(a, n)
        INTERFACE:
        lsl lsr
 
-int
-gf_eq(a, b)
+gf *
+flipbits(a, n)
        gf *a
-       gf *b
-       CODE:
-       RETVAL = mp_eq(a, b);
-       OUTPUT:
-       RETVAL
+       unsigned long n
+       C_ARGS:
+       MP_NEW, a, n
+       INTERFACE_MACRO:
+       XSINTERFACE_FUNC
+       XSINTERFACE_FUNC_SETMP
+       INTERFACE:
+       setbit clearbit
 
 int
 gf_irreduciblep(a)
@@ -235,15 +197,6 @@ gcd(a, b)
            break;
        }
 
-GF_Reduce *
-makereduce(x)
-       gf *x
-       CODE:
-       RETVAL = CREATE(GF_Reduce);
-       gfreduce_create(RETVAL, x);
-       OUTPUT:
-       RETVAL
-
 MODULE = Catacomb PACKAGE = Catacomb::GF::Reduce PREFIX = gfreduce_
 
 GF_Reduce *