]> www.ginac.de Git - cln.git/blobdiff - include/cln/object.h
Replace CL_REQUIRE/CL_PROVIDE(cl_I_ring) with portable code.
[cln.git] / include / cln / object.h
index b7353dcbc00fcf0e55bc8bc860736c28a96219f2..8ac0aed738e2e086dea2fb5dccc5b6be1c2f0a2f 100644 (file)
@@ -22,10 +22,10 @@ namespace cln {
 #if defined(__m68k__)
   #define cl_word_alignment  2
 #endif
-#if defined(__i386__) || defined(__mips__) || defined(__mipsel__) || defined(__sparc__) || defined(__hppa__) || defined(__arm__) || defined(__rs6000__) || defined(__m88k__) || defined(__convex__) || defined(__s390__)
+#if defined(__i386__) || defined(__mips__) || defined(__mipsel__) || (defined(__sparc__) && !defined(__sparc64__)) || defined(__hppa__) || defined(__arm__) || defined(__rs6000__) || defined(__m88k__) || defined(__convex__) || defined(__s390__)
   #define cl_word_alignment  4
 #endif
-#if defined(__alpha__) || defined(__mips64__) || defined(__sparc64__) || defined(__ia64__) || defined(__x86_64__)
+#if defined(__alpha__) || defined(__ia64__) || defined(__mips64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__x86_64__)
   #define cl_word_alignment  8
 #endif
 #if !defined(cl_word_alignment)
@@ -71,13 +71,13 @@ typedef uintP  cl_uint;  // This ought to be called `cl_word'.
 #endif
 
 // Distinguish immediate data from pointers.
-inline cl_boolean cl_pointer_p (cl_uint word)
+inline bool cl_pointer_p (cl_uint word)
 {
-       return (cl_boolean)((word & (cl_word_alignment-1)) == 0);
+       return (word & (cl_word_alignment-1)) == 0;
 }
-inline cl_boolean cl_immediate_p (cl_uint word)
+inline bool cl_immediate_p (cl_uint word)
 {
-       return (cl_boolean)((word & (cl_word_alignment-1)) != 0);
+       return (word & (cl_word_alignment-1)) != 0;
 }
 
 // Immediate data: Fixnum, Short Float, maybe Single Float.
@@ -92,11 +92,7 @@ inline cl_boolean cl_immediate_p (cl_uint word)
   #define cl_tag_len   3
 #endif
 #define cl_tag_shift   0
-#if (cl_pointer_size == 64)
-  #define cl_value_shift  32
-#else
-  #define cl_value_shift  (cl_tag_len+cl_tag_shift)
-#endif
+#define cl_value_shift  (cl_tag_len+cl_tag_shift)
 #define cl_value_len   (cl_pointer_size - cl_value_shift)
 #define cl_tag_mask    (((1UL << cl_tag_len) - 1) << cl_tag_shift)
 #define cl_value_mask  (((1UL << cl_value_len) - 1) << cl_value_shift)
@@ -177,6 +173,8 @@ typedef void (*cl_heap_destructor_function) (cl_heap* pointer);
                                              // elements belong to cl_number
 #define cl_class_flags_modint_ring       32  // all instances are rings whose
                                              // elements belong to cl_MI
+#define cl_class_flags_univpoly_ring     64  // all instances are rings whose
+                                             // elements belong to cl_UP
 // Function to print an object for debugging, to cerr.
 typedef void (*cl_heap_dprint_function) (cl_heap* pointer);
 
@@ -312,7 +310,7 @@ public:
 // Assignment operator.
        cl_gcobject& operator= (const cl_gcobject&);
 // Distinguish immediate data from pointer.
-       cl_boolean pointer_p() const
+       bool pointer_p() const
                { return cl_pointer_p(word); }
 // Reference counting.
        void inc_pointer_refcount () const
@@ -362,8 +360,8 @@ public:
 // Assignment operator.
        cl_gcpointer& operator= (const cl_gcpointer&);
 // Distinguish immediate data from pointer.
-       cl_boolean pointer_p() const
-               { return cl_true; }
+       bool pointer_p() const
+               { return true; }
 // Reference counting.
        void inc_pointer_refcount () const
                { cl_inc_pointer_refcount(heappointer); }
@@ -412,7 +410,7 @@ public:
 // Assignment operator.
        cl_rcobject& operator= (const cl_rcobject&);
 // Distinguish immediate data from pointer.
-       cl_boolean pointer_p() const
+       bool pointer_p() const
                { return cl_pointer_p(word); }
 // Reference counting.
        void inc_pointer_refcount () const
@@ -462,8 +460,8 @@ public:
 // Assignment operator.
        cl_rcpointer& operator= (const cl_rcpointer&);
 // Distinguish immediate data from pointer.
-       cl_boolean pointer_p() const
-               { return cl_true; }
+       bool pointer_p() const
+               { return true; }
 // Reference counting.
        void inc_pointer_refcount () const
                { cl_inc_pointer_refcount(heappointer); }
@@ -556,7 +554,7 @@ inline cl_private_thing as_cl_private_thing (const cl_rcpointer& x)
   #define CL_DEFINE_CONVERTER(target_class)  \
     operator const target_class & () const                             \
     {                                                                  \
-      if (sizeof(*this) != sizeof(target_class)) cl_abort();           \
+      typedef int assert1 [2*(sizeof(target_class)==sizeof(*this))-1]; \
       return * (const target_class *) (void*) this;                    \
     }