]> www.ginac.de Git - cln.git/blobdiff - src/integer/bitwise/cl_I_logcount.cc
* Cumulative patch including Bruno's work on large fixnums on 64 bit machines.
[cln.git] / src / integer / bitwise / cl_I_logcount.cc
index 50bf4db71a237686efef817e15542c8ef5e29296..dd293bf45cddd48e72c62951438f4e4f57986bec 100644 (file)
@@ -4,7 +4,7 @@
 #include "cl_sysdep.h"
 
 // Specification.
-#include "cl_integer.h"
+#include "cln/integer.h"
 
 
 // Implementation.
 #include "cl_D.h"
 #include "cl_low.h"
 
+namespace cln {
+
 uintL logcount (const cl_I& x)
 {
        if (fixnump(x))
-         { var uint32 x32 = FN_to_L(x); // x als 32-Bit-Zahl
-           if (FN_L_minusp(x,(sint32)x32)) { x32 = ~ x32; } // falls <0, komplementieren
+         { var uintV x32 = FN_to_V(x); // x als intDsize-Bit-Zahl
+           if (FN_V_minusp(x,(sintV)x32)) { x32 = ~ x32; } // falls <0, komplementieren
+            #if (intVsize>32)
+            #define x64 x32
+            logcount_64(); // Bits von x32 zählen
+            #undef x64
+            #else
            logcount_32(); // Bits von x32 zählen
+            #endif
            return x32;
          }
           else
@@ -35,3 +43,5 @@ uintL logcount (const cl_I& x)
             return bitcount;
           }
 }
+
+}  // namespace cln