]> www.ginac.de Git - cln.git/blobdiff - src/modinteger/cl_MI.cc
2006-04-25 Bruno Haible <bruno@clisp.org>
[cln.git] / src / modinteger / cl_MI.cc
index 6be4179fc5db286d94467f3555c5ac939a7d7ccd..297718d2eece729e2611d4d275b5e7a9634df87c 100644 (file)
@@ -21,12 +21,22 @@ CL_PROVIDE(cl_MI)
 #include "cln/abort.h"
 #include "cl_alloca.h"
 
-# MacOS X does "#define _R 0x00040000L"
-# Grr...
+// MacOS X does "#define _R 0x00040000L"
+// Grr...
 #undef _R
 
 namespace cln {
 
+static void cl_modint_ring_destructor (cl_heap* pointer)
+{
+       (*(cl_heap_modint_ring*)pointer).~cl_heap_modint_ring();
+}
+
+cl_class cl_class_modint_ring = {
+       cl_modint_ring_destructor,
+       cl_class_flags_modint_ring
+};
+
 cl_heap_modint_ring::cl_heap_modint_ring (cl_I m, cl_modint_setops* setopv, cl_modint_addops* addopv, cl_modint_mulops* mulopv)
        : setops (setopv), addops (addopv), mulops (mulopv), modulus (m)
 {
@@ -34,13 +44,13 @@ cl_heap_modint_ring::cl_heap_modint_ring (cl_I m, cl_modint_setops* setopv, cl_m
        type = &cl_class_modint_ring;
        if (minusp(m)) cl_abort();
        if (!cln::zerop(m)) {
-               var uintL b = integer_length(m-1);
+               var uintC b = integer_length(m-1);
                // m <= 2^b, hence one needs b bits for a representative mod m.
                if (b <= 1) {
                        log2_bits = 0; bits = 1;
                } else if (b <= cl_word_size) {
                        var uintL bb;
-                       integerlength32(b-1,bb=); // b <= 2^bb with bb minimal
+                       integerlengthC(b-1,bb=); // b <= 2^bb with bb minimal
                        log2_bits = bb; bits = 1<<bb;
                } else {
                        log2_bits = -1; bits = -1;
@@ -50,20 +60,6 @@ cl_heap_modint_ring::cl_heap_modint_ring (cl_I m, cl_modint_setops* setopv, cl_m
        }
 }
 
-static void cl_modint_ring_destructor (cl_heap* pointer)
-{
-       (*(cl_heap_modint_ring*)pointer).~cl_heap_modint_ring();
-}
-
-cl_class cl_class_modint_ring = {
-       cl_modint_ring_destructor,
-       0
-};
-
-// This tells the compiler to put the `cl_heap_modint_ring' vtable
-// into this file.
-void cl_heap_modint_ring::dummy () {}
-
 
 static cl_boolean modint_equal (cl_heap_modint_ring* R, const _cl_MI& x, const _cl_MI& y)
 {
@@ -94,13 +90,13 @@ static inline cl_heap_modint_ring* make_modint_ring (const cl_I& m) // m >= 0
                return new cl_heap_modint_ring_int();
        // Now m > 0.
        {
-               var uintL log2_m = power2p(m);
+               var uintC log2_m = power2p(m);
                if (log2_m)
                        return new cl_heap_modint_ring_pow2(m,log2_m-1);
        }
        // Now m > 1.
        {
-               var uintL log2_m = integer_length(m); // = integerlength(m-1)
+               var uintC log2_m = integer_length(m); // = integerlength(m-1)
                if (log2_m < 16) // m < 0x10000
                        return new cl_heap_modint_ring_fix16(m);
                #if (cl_value_len <= 32)
@@ -114,12 +110,12 @@ static inline cl_heap_modint_ring* make_modint_ring (const cl_I& m) // m >= 0
                #endif
        }
        {
-               var uintL m1 = power2p(m+1);
+               var uintC m1 = power2p(m+1);
                if (m1)
                        return new cl_heap_modint_ring_pow2m1(m,m1-1);
        }
        {
-               var uintL m1 = power2p(m-1);
+               var uintC m1 = power2p(m-1);
                if (m1)
                        return new cl_heap_modint_ring_pow2p1(m,m1-1);
        }