]> www.ginac.de Git - cln.git/commitdiff
Fix linking problems on some platforms caused by inline/non-inline versions
authorRichard Kreckel <kreckel@ginac.de>
Fri, 18 Jan 2008 22:59:06 +0000 (22:59 +0000)
committerRichard Kreckel <kreckel@ginac.de>
Fri, 18 Jan 2008 22:59:06 +0000 (22:59 +0000)
of same functions (obsoletes MAYBE_INLINE) [by Alexei Sheplyakov].

123 files changed:
ChangeLog
src/base/cl_inline.h [new file with mode: 0644]
src/base/cl_inline2.h [new file with mode: 0644]
src/base/cl_macros.h
src/base/cl_maybe_inline.h [new file with mode: 0644]
src/base/string/cl_st_concat1.cc
src/base/string/cl_st_concat2.cc
src/base/string/cl_st_concat3.cc
src/base/string/cl_st_make0.cc
src/complex/algebraic/cl_C_abs.cc
src/complex/algebraic/cl_C_abs_aux.cc
src/complex/algebraic/cl_C_signum.cc
src/complex/algebraic/cl_DF_hypot.cc
src/complex/algebraic/cl_FF_hypot.cc
src/complex/algebraic/cl_LF_hypot.cc
src/complex/algebraic/cl_SF_hypot.cc
src/complex/transcendental/cl_C_acosh.cc
src/complex/transcendental/cl_C_asinh_aux.cc
src/complex/transcendental/cl_C_atanh_aux.cc
src/float/dfloat/division/cl_DF_fceil.cc
src/float/dfloat/elem/cl_DF_div.cc
src/float/dfloat/elem/cl_DF_ffloor.cc
src/float/dfloat/elem/cl_DF_minusp.cc
src/float/dfloat/elem/cl_DF_mul.cc
src/float/dfloat/elem/cl_DF_plusp.cc
src/float/dfloat/elem/cl_DF_zerop.cc
src/float/dfloat/misc/cl_DF_abs.cc
src/float/dfloat/misc/cl_DF_digits.cc
src/float/dfloat/misc/cl_DF_eqhashcode.cc
src/float/dfloat/misc/cl_DF_exponent.cc
src/float/dfloat/misc/cl_DF_idecode.cc
src/float/dfloat/misc/cl_DF_precision.cc
src/float/dfloat/misc/cl_DF_sign.cc
src/float/dfloat/misc/cl_DF_signum.cc
src/float/elem/cl_F_minusp.cc
src/float/elem/cl_F_plusp.cc
src/float/elem/cl_F_zerop.cc
src/float/ffloat/division/cl_FF_fceil.cc
src/float/ffloat/elem/cl_FF_div.cc
src/float/ffloat/elem/cl_FF_ffloor.cc
src/float/ffloat/elem/cl_FF_minusp.cc
src/float/ffloat/elem/cl_FF_mul.cc
src/float/ffloat/elem/cl_FF_plusp.cc
src/float/ffloat/elem/cl_FF_zerop.cc
src/float/ffloat/misc/cl_FF_abs.cc
src/float/ffloat/misc/cl_FF_digits.cc
src/float/ffloat/misc/cl_FF_eqhashcode.cc
src/float/ffloat/misc/cl_FF_exponent.cc
src/float/ffloat/misc/cl_FF_idecode.cc
src/float/ffloat/misc/cl_FF_precision.cc
src/float/ffloat/misc/cl_FF_sign.cc
src/float/ffloat/misc/cl_FF_signum.cc
src/float/lfloat/division/cl_LF_fceil.cc
src/float/lfloat/elem/cl_LF_compare.cc
src/float/lfloat/elem/cl_LF_ffloor.cc
src/float/lfloat/elem/cl_LF_minusp.cc
src/float/lfloat/elem/cl_LF_plusp.cc
src/float/lfloat/elem/cl_LF_to_I.cc
src/float/lfloat/elem/cl_LF_zerop.cc
src/float/lfloat/misc/cl_LF_abs.cc
src/float/lfloat/misc/cl_LF_digits.cc
src/float/lfloat/misc/cl_LF_eqhashcode.cc
src/float/lfloat/misc/cl_LF_exponent.cc
src/float/lfloat/misc/cl_LF_idecode.cc
src/float/lfloat/misc/cl_LF_precision.cc
src/float/lfloat/misc/cl_LF_shortenrel.cc
src/float/lfloat/misc/cl_LF_shortenwith.cc
src/float/lfloat/misc/cl_LF_sign.cc
src/float/lfloat/misc/cl_LF_signum.cc
src/float/misc/cl_F_abs.cc
src/float/misc/cl_F_digits.cc
src/float/misc/cl_F_eqhashcode.cc
src/float/misc/cl_F_exponent.cc
src/float/misc/cl_F_idecode.cc
src/float/misc/cl_F_precision.cc
src/float/misc/cl_F_sign.cc
src/float/misc/cl_F_signum.cc
src/float/sfloat/division/cl_SF_fceil.cc
src/float/sfloat/division/cl_SF_ffloor.cc
src/float/sfloat/elem/cl_SF_compare.cc
src/float/sfloat/elem/cl_SF_minus.cc
src/float/sfloat/elem/cl_SF_minusp.cc
src/float/sfloat/elem/cl_SF_plusp.cc
src/float/sfloat/elem/cl_SF_uminus.cc
src/float/sfloat/elem/cl_SF_zerop.cc
src/float/sfloat/misc/cl_SF_abs.cc
src/float/sfloat/misc/cl_SF_digits.cc
src/float/sfloat/misc/cl_SF_eqhashcode.cc
src/float/sfloat/misc/cl_SF_exponent.cc
src/float/sfloat/misc/cl_SF_idecode.cc
src/float/sfloat/misc/cl_SF_precision.cc
src/float/sfloat/misc/cl_SF_sign.cc
src/float/sfloat/misc/cl_SF_signum.cc
src/float/transcendental/cl_F_atanhx.cc
src/float/transcendental/cl_F_atanx.cc
src/float/transcendental/cl_F_exp.cc
src/float/transcendental/cl_F_expx.cc
src/float/transcendental/cl_F_lnx.cc
src/float/transcendental/cl_F_sinhx.cc
src/float/transcendental/cl_F_sinx.cc
src/float/transcendental/cl_F_tan.cc
src/float/transcendental/cl_F_tanh.cc
src/integer/conv/cl_I_from_DS.cc
src/integer/conv/cl_I_from_NDS.cc
src/integer/conv/cl_I_from_NUDS.cc
src/integer/conv/cl_I_from_UDS.cc
src/integer/misc/cl_I_eqhashcode.cc
src/integer/misc/cl_I_signum.cc
src/integer/ring/cl_I_ring.cc
src/rational/elem/cl_RA_minusp.cc
src/rational/misc/Makeflags
src/rational/misc/cl_RA_eqhashcode.cc
src/rational/misc/cl_RA_signum.cc
src/rational/ring/cl_RA_ring.cc
src/real/algebraic/cl_RA_sqrt.cc
src/real/algebraic/cl_R_sqrt.cc
src/real/conv/cl_F_from_R_def.cc
src/real/elem/cl_R_minusp.cc
src/real/elem/cl_R_zerop.cc
src/real/misc/cl_R_eqhashcode.cc
src/real/misc/cl_R_signum.cc
src/real/transcendental/cl_R_tan.cc
src/real/transcendental/cl_R_tanh.cc

index a2cf3065a495d3e7e528ba3d7a7f73d128a2eaf0..7637fbf64601e3ea30ac035eddb81aca597bafc9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,131 @@
+2007-01-18  Alexei Sheplyakov  <varg@theor.jinr.ru>
+
+       Fix linking problems on some platforms caused by inline/non-inline
+       versions of same functions (obsoletes MAYBE_INLINE):
+       * src/base/cl_maybe_inline.h: New file.
+       * src/base/cl_inline2.h: New file.
+       * src/base/cl_inline.h: New file.
+       * src/base/cl_macros.h: Pull in cl_maybe_inline.h.
+       * src/base/string/cl_st_concat1.cc: Use new CL_INLINE macros and the
+       new *_inline functions.
+       * src/base/string/cl_st_concat2.cc: Likewise.
+       * src/base/string/cl_st_concat3.cc: Likewise.
+       * src/complex/algebraic/cl_C_abs.cc: Likewise.
+       * src/complex/algebraic/cl_C_abs_aux.cc: Likewise.
+       * src/complex/algebraic/cl_C_signum.cc: Likewise.
+       * src/complex/algebraic/cl_DF_hypot.cc: Likewise.
+       * src/complex/algebraic/cl_FF_hypot.cc: Likewise.
+       * src/complex/algebraic/cl_LF_hypot.cc: Likewise.
+       * src/complex/algebraic/cl_SF_hypot.cc: Likewise.
+       * src/complex/transcendental/cl_C_acosh.cc: Likewise.
+       * src/complex/transcendental/cl_C_asinh_aux.cc: Likewise.
+       * src/complex/transcendental/cl_C_atanh_aux.cc: Likewise.
+       * src/float/dfloat/division/cl_DF_fceil.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_div.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_ffloor.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_minusp.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_mul.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_plusp.cc: Likewise.
+       * src/float/dfloat/elem/cl_DF_zerop.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_abs.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_digits.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_eqhashcode.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_exponent.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_idecode.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_precision.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_sign.cc: Likewise.
+       * src/float/dfloat/misc/cl_DF_signum.cc: Likewise.
+       * src/float/elem/cl_F_minusp.cc: Likewise.
+       * src/float/elem/cl_F_plusp.cc: Likewise.
+       * src/float/elem/cl_F_zerop.cc: Likewise.
+       * src/float/ffloat/division/cl_FF_fceil.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_div.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_ffloor.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_minusp.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_mul.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_plusp.cc: Likewise.
+       * src/float/ffloat/elem/cl_FF_zerop.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_abs.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_digits.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_eqhashcode.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_exponent.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_idecode.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_precision.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_sign.cc: Likewise.
+       * src/float/ffloat/misc/cl_FF_signum.cc: Likewise.
+       * src/float/lfloat/division/cl_LF_fceil.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_compare.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_ffloor.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_minusp.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_plusp.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_to_I.cc: Likewise.
+       * src/float/lfloat/elem/cl_LF_zerop.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_abs.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_digits.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_eqhashcode.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_exponent.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_idecode.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_precision.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_shortenrel.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_shortenwith.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_sign.cc: Likewise.
+       * src/float/lfloat/misc/cl_LF_signum.cc: Likewise.
+       * src/float/misc/cl_F_abs.cc: Likewise.
+       * src/float/misc/cl_F_digits.cc: Likewise.
+       * src/float/misc/cl_F_eqhashcode.cc: Likewise.
+       * src/float/misc/cl_F_exponent.cc: Likewise.
+       * src/float/misc/cl_F_idecode.cc: Likewise.
+       * src/float/misc/cl_F_precision.cc: Likewise.
+       * src/float/misc/cl_F_sign.cc: Likewise.
+       * src/float/misc/cl_F_signum.cc: Likewise.
+       * src/float/sfloat/division/cl_SF_fceil.cc: Likewise.
+       * src/float/sfloat/division/cl_SF_ffloor.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_compare.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_minus.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_minusp.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_plusp.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_uminus.cc: Likewise.
+       * src/float/sfloat/elem/cl_SF_zerop.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_abs.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_digits.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_eqhashcode.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_exponent.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_idecode.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_precision.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_sign.cc: Likewise.
+       * src/float/sfloat/misc/cl_SF_signum.cc: Likewise.
+       * src/float/transcendental/cl_F_atanhx.cc: Likewise.
+       * src/float/transcendental/cl_F_atanx.cc: Likewise.
+       * src/float/transcendental/cl_F_exp.cc: Likewise.
+       * src/float/transcendental/cl_F_expx.cc: Likewise.
+       * src/float/transcendental/cl_F_lnx.cc: Likewise.
+       * src/float/transcendental/cl_F_sinhx.cc: Likewise.
+       * src/float/transcendental/cl_F_sinx.cc: Likewise.
+       * src/float/transcendental/cl_F_tan.cc: Likewise.
+       * src/float/transcendental/cl_F_tanh.cc: Likewise.
+       * src/integer/conv/cl_I_from_DS.cc: Likewise.
+       * src/integer/conv/cl_I_from_NDS.cc: Likewise.
+       * src/integer/conv/cl_I_from_NUDS.cc: Likewise.
+       * src/integer/conv/cl_I_from_UDS.cc: Likewise.
+       * src/integer/misc/cl_I_eqhashcode.cc: Likewise.
+       * src/integer/misc/cl_I_signum.cc: Likewise.
+       * src/integer/ring/cl_I_ring.cc: Likewise.
+       * src/rational/elem/cl_RA_minusp.cc: Likewise.
+       * src/rational/misc/cl_RA_eqhashcode.cc: Likewise.
+       * src/rational/misc/cl_RA_signum.cc: Likewise.
+       * src/rational/ring/cl_RA_ring.cc: Likewise.
+       * src/real/algebraic/cl_RA_sqrt.cc: Likewise.
+       * src/real/algebraic/cl_R_sqrt.cc: Likewise.
+       * src/real/conv/cl_F_from_R_def.cc: Likewise.
+       * src/real/elem/cl_R_minusp.cc: Likewise.
+       * src/real/elem/cl_R_zerop.cc: Likewise.
+       * src/real/misc/cl_R_eqhashcode.cc: Likewise.
+       * src/real/misc/cl_R_signum.cc: Likewise.
+       * src/real/transcendental/cl_R_tan.cc: Likewise.
+       * src/real/transcendental/cl_R_tanh.cc: Likewise.
+       * src/base/string/cl_st_make0.cc: Remove obsolete MAYBE_INLINE.
+       * src/rational/misc/Makeflags: Help compiler include cl_I_eqhashcode.cc.
+
 2008-01-15  Bruno Haible  <bruno@clisp.org>
 
        * doc/cln.texi: Renamed from doc/cln.tex. Add @node lines and @menu
diff --git a/src/base/cl_inline.h b/src/base/cl_inline.h
new file mode 100644 (file)
index 0000000..ffe5044
--- /dev/null
@@ -0,0 +1,8 @@
+/*
+ * Selectively inline a function in *some* translation units.
+ * See cl_maybe_inline.h file for the explanation.
+ */
+#undef CL_INLINE
+#undef CL_INLINE_DECL
+#define CL_INLINE static inline
+#define CL_INLINE_DECL(fcn) CL_INLINE_HINT fcn ## _inline
diff --git a/src/base/cl_inline2.h b/src/base/cl_inline2.h
new file mode 100644 (file)
index 0000000..c00bf57
--- /dev/null
@@ -0,0 +1,8 @@
+/*
+ * Selectively inline a function in *some* translation units.
+ * See cl_maybe_inline.h file for the explanation.
+ */
+#undef CL_INLINE2
+#undef CL_INLINE2_DECL
+#define CL_INLINE2 static inline
+#define CL_INLINE2_DECL(fcn) CL_INLINE_HINT fcn ## _inline
index a041e771a017748a0f49d05501811c940075f2c2..60a39e956bf19d0caf59fe77cd9a9efb4d28913f 100644 (file)
@@ -265,9 +265,6 @@ public:                                                                     \
 // it's a shame!)
 #define init1(type,lvalue)  (void) new (&(lvalue)) type
 
-// MAYBE_INLINE normally expands to nothing.
-// Useful for including the implementation of some file inline into another.
-  #define MAYBE_INLINE
-  #define MAYBE_INLINE2
+#include "cl_maybe_inline.h"
 
 #endif /* _CL_MACROS_H */
diff --git a/src/base/cl_maybe_inline.h b/src/base/cl_maybe_inline.h
new file mode 100644 (file)
index 0000000..316cc5b
--- /dev/null
@@ -0,0 +1,131 @@
+// CLN internal inlining hints
+
+#ifndef _CL_MAYBE_INLINE_H
+#define _CL_MAYBE_INLINE_H
+
+/*
+ * Selectively inline a function in *some* translation units.
+ *
+ * The need to inline a function in some places and not in others came from
+ * three situations:
+ *
+ * 1) Some functions, like cl_SF_zerop or cl_FF_zerop, are just a single
+ * machine instruction when inlined. Putting their definitions into a public
+ * header would expose too many internals of the library, leading violation
+ * of abstraction and increased compilation times. Still, it would be nice
+ * to use the inline version of these functions in the library itself.
+ *
+ * 2) Some functions, like cl_{SF,FF,DF,LF}_idecode, are usually only
+ * invoked through a dispatcher cl_F_idecode that does nothing but dispatch
+ * the call to the right function. Here inlining is used, regardless of
+ * the size of the inlined functions, because it removes one function call
+ * from the chain of function calls. A compiler cannot know that this
+ * caller is the main caller for the 4 inlined functions.
+ *
+ * 3) Similarly, cl_I_from_NDS would be a bottleneck if not inlined: every
+ * creation of a new cl_I goes through this function. A compiler cannot
+ * know a priori the bottlenecks.
+ *
+ * Hence, there is a set of macros which help to create inline and
+ * non-inline versions of a function without duplicating the code.
+ *
+ * Usage:
+ *
+ * 1. In the public header, declare function as usual:
+ *
+ * extern cl_bar cl_foo(const cl_baz&);
+ *
+ * 2. Put the definition into a separate file, say, cl_foo.cc, in the
+ * following way:
+ *
+ * // cl_foo.cc
+ *
+ * #include "cl_macros.h"
+ * #include "whatever/you/need.h"
+ *
+ * CL_INLINE cl_bar CL_INLINE_DECL(cl_foo)(const cl_baz& x)
+ * {
+ *   // the actual code goes here
+ * }
+ *
+ * This provides normal (non-inline) version of a function cl_foo.
+ *
+ * 3. In order to use the inline version, do
+ *
+ * // cl_blah.cc
+ *
+ * #include "cl_inline.h"
+ * #include "path/to/cl_foo.cc"
+ *
+ * This will declare and define function cl_foo_inline, which is an inline
+ * version of cl_foo.
+ *
+ * XXX:
+ * The name of the inline version *really* has to be different, since ISO C++
+ * demands (in 7.1.2.4)
+ *
+ * "If a function with external linkage is declared inline in one translation
+ * unit, it shall be declared inline in all translation units in which it
+ * appears; no diagnostic is required."
+ *
+ * Feel free to implement this functionality in a better *standard-compliant*
+ * way. Or submit a DR (defect report) to the standard committee.
+ */
+#define CL_INLINE
+#define CL_INLINE_DECL(fcn) fcn
+
+/*
+ * Use these macros to provide inline and non-inline versions of a function
+ * which uses an inline version of other function(s). 
+ */
+#define CL_INLINE2
+#define CL_INLINE2_DECL(fcn) fcn
+
+/*
+ * Some functions (zerop, signum, etc) just dispatch the call to the
+ * appropriate type-specific functions. It would be nice to have these
+ * type-specific functions inlined. However, the compiler can not know that,
+ * unless one gives it a hint.
+ *
+ * Usage:
+ *
+ * const cl_foo CL_FLATTEN cl_bar(const cl_R& x)
+ * {
+ *   // the actual code
+ * }
+ *
+ * Please note: 
+ *
+ * 1. This is only a *hint*, it's always up to the compiler to NOT inline
+ *    a function.
+ * 2. It's ignored if the optimization is switched off.
+ */
+#ifdef __GNUC__
+#define CL_FLATTEN __attribute__((flatten))
+#else
+#define CL_FLATTEN
+#endif
+
+/*
+ * Tell the compiler to inline a function more aggressively, i.e. even if the
+ * optimization is switched off.
+ *
+ * Usage:
+ *
+ * cl_blah CL_INLINE_HINT cl_foo(const cl_baz& x)
+ * {
+ *   // the actual code
+ * }
+ *
+ * Notes:
+ * 1. This is only a hint, it does NOT guarantee the function will be
+ *    actually always inlined.
+ * 2. CL_INLINE and CL_INLINE2 macros set this attribute automagically.
+ */
+#ifdef __GNUC__
+#define CL_INLINE_HINT __attribute__((always_inline))
+#else
+#define CL_INLINE_HINT
+#endif
+
+#endif /* _CL_MAYBE_INLINE_H */
index 44d0e6d5dd2e33029cf02fe46a566a3a76a7bf5a..ff3c19afde599582ae3cfc6d8cf9a27549184c93 100644 (file)
@@ -8,10 +8,7 @@
 
 
 // Implementation.
-
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
-#include "cl_st_make0.cc"
+#include "cl_st_make0.h"
 
 namespace cln {
 
index e14fdbe1ae5886637fc228c87c96013715809b31..165ea2873d24376278d37f205a5e9f93ea7388be 100644 (file)
@@ -8,10 +8,7 @@
 
 
 // Implementation.
-
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
-#include "cl_st_make0.cc"
+#include "cl_st_make0.h"
 
 namespace cln {
 
index a27a75354d2b7916f5f3e243aa8f3e2e5fffdbdd..262b481e329b6f215c872e6c0e580f9173ef14ec 100644 (file)
@@ -8,10 +8,7 @@
 
 
 // Implementation.
-
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
-#include "cl_st_make0.cc"
+#include "cl_st_make0.h"
 
 namespace cln {
 
index 1628d42b6fd67e066a780844f11a53f01fd0acca..8b29342d434727912e2ed908f3ea83931ef7413c 100644 (file)
@@ -14,7 +14,6 @@
 
 namespace cln {
 
-MAYBE_INLINE
 cl_heap_string* cl_make_heap_string (unsigned long len)
 {
        var cl_heap_string* str = (cl_heap_string*) malloc_hook(offsetofa(cl_heap_string,data)+sizeof(char)*(len+1));
index c7c57f51da20cbd3056c6d7462c964c862e0a8e1..0e12551034bc38353b551a4b9a4501d0a5a4156a 100644 (file)
@@ -12,8 +12,7 @@
 #include "cl_C.h"
 #include "cln/real.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_C_abs_aux.cc"
 
 namespace cln {
@@ -28,7 +27,7 @@ const cl_R abs (const cl_N& x)
                return abs(x);
        } else {
                DeclareType(cl_C,x);
-               return abs(x);
+               return abs_inline(x);
        }
 }
 
index adb83adaccb69ca3e86b837e3a7e9fb90062f54a..8ea3d6fa14bc119cbf446f434ce040ccc560d9e6 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_R abs (const cl_C& x)
+CL_INLINE const cl_R CL_INLINE_DECL(abs) (const cl_C& x)
 {
        var const cl_R& a = realpart(x);
        var const cl_R& b = imagpart(x);
index d059f32ed17554bea6a0df3e035074945389f605..357d7db224ed940f1fae59baa7178d65618e08bc 100644 (file)
 #include "cl_C.h"
 #include "cln/real.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_C_abs_aux.cc"
 
 namespace cln {
 
-const cl_N signum (const cl_N& x)
+const cl_N CL_FLATTEN signum (const cl_N& x)
 {
 // Methode:
 // x reell -> klar.
@@ -31,7 +30,7 @@ const cl_N signum (const cl_N& x)
                if (zerop(x))
                        return x;
                else
-                       return x / abs(x);
+                       return x / abs_inline(x);
        }
 }
 
index 2c569517f0bfe0c195fbcd9d58112df93217dae3..09f0db576797abe88f6c2bf3a4dc80bef294265c 100644 (file)
@@ -12,8 +12,8 @@
 #include "cln/dfloat.h"
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
@@ -37,7 +37,7 @@ const cl_DF cl_hypot (const cl_DF& a, const cl_DF& b)
                var uintL uexp = DF_uexp(TheDfloat(a)->dfloat_value_semhi);
                if (uexp == 0)
                        // a=0.0 -> liefere (abs b) :
-                       return (minusp(b) ? -b : b);
+                       return (minusp_inline(b) ? -b : b);
                a_exp = (sintL)(uexp - DF_exp_mid);
        }
        {
@@ -45,7 +45,7 @@ const cl_DF cl_hypot (const cl_DF& a, const cl_DF& b)
                var uintL uexp = DF_uexp(TheDfloat(b)->dfloat_value_semhi);
                if (uexp == 0)
                        // b=0.0 -> liefere (abs a) :
-                       return (minusp(a) ? -a : a);
+                       return (minusp_inline(a) ? -a : a);
                b_exp = (sintL)(uexp - DF_exp_mid);
        }
        // Nun a_exp = float_exponent(a), b_exp = float_exponent(b).
index c6224ef9fe69460a525b3c128ca8567b2847f483..e66366ca379a73f76cf595864b1801bd406c3700 100644 (file)
@@ -12,8 +12,8 @@
 #include "cln/ffloat.h"
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 
 namespace cln {
@@ -37,7 +37,7 @@ const cl_FF cl_hypot (const cl_FF& a, const cl_FF& b)
                var uintL uexp = FF_uexp(cl_ffloat_value(a));
                if (uexp == 0)
                        // a=0.0 -> liefere (abs b) :
-                       return (minusp(b) ? -b : b);
+                       return (minusp_inline(b) ? -b : b);
                a_exp = (sintL)(uexp - FF_exp_mid);
        }
        {
@@ -45,7 +45,7 @@ const cl_FF cl_hypot (const cl_FF& a, const cl_FF& b)
                var uintL uexp = FF_uexp(cl_ffloat_value(b));
                if (uexp == 0)
                        // b=0.0 -> liefere (abs a) :
-                       return (minusp(a) ? -a : a);
+                       return (minusp_inline(a) ? -a : a);
                b_exp = (sintL)(uexp - FF_exp_mid);
        }
        // Nun a_exp = float_exponent(a), b_exp = float_exponent(b).
index 1273488e2d787a51dbf6c9de9dbfe17faee27c45..4959e116a57d2c685814bf1dca3d44667a5543a9 100644 (file)
@@ -13,8 +13,8 @@
 #include "cl_LF.h"
 #include "cl_LF_impl.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
@@ -53,7 +53,7 @@ const cl_LF cl_hypot (const cl_LF& a, const cl_LF& b)
                var uintE uexp = TheLfloat(a)->expo;
                if (uexp == 0)
                        // a=0.0 -> liefere (abs b) :
-                       return (minusp(b) ? -b : b);
+                       return (minusp_inline(b) ? -b : b);
                a_exp = (sintE)(uexp - LF_exp_mid);
        }
        {
@@ -61,7 +61,7 @@ const cl_LF cl_hypot (const cl_LF& a, const cl_LF& b)
                var uintE uexp = TheLfloat(b)->expo;
                if (uexp == 0)
                        // b=0.0 -> liefere (abs a) :
-                       return (minusp(a) ? -a : a);
+                       return (minusp_inline(a) ? -a : a);
                b_exp = (sintE)(uexp - LF_exp_mid);
        }
        // Nun a_exp = float_exponent(a), b_exp = float_exponent(b).
index bcf742f1642cfd1e774a017576ce52924ede0515..88c3df7ec413acb4c4bd29e4b528b397d0dc1af1 100644 (file)
@@ -12,8 +12,8 @@
 #include "cln/sfloat.h"
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline copy of minusp */
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
@@ -37,7 +37,7 @@ const cl_SF cl_hypot (const cl_SF& a, const cl_SF& b)
                var uintL uexp = SF_uexp(a);
                if (uexp == 0)
                        // a=0.0 -> liefere (abs b) :
-                       return (minusp(b) ? -b : b);
+                       return (minusp_inline(b) ? -b : b);
                a_exp = (sintL)(uexp - SF_exp_mid);
        }
        {
@@ -45,7 +45,7 @@ const cl_SF cl_hypot (const cl_SF& a, const cl_SF& b)
                var uintL uexp = SF_uexp(b);
                if (uexp == 0)
                        // b=0.0 -> liefere (abs a) :
-                       return (minusp(a) ? -a : a);
+                       return (minusp_inline(a) ? -a : a);
                b_exp = (sintL)(uexp - SF_exp_mid);
        }
        // Nun a_exp = float_exponent(a), b_exp = float_exponent(b).
index 2fb952f82cffddb6add8b848012892f794de7ed1..32c204d6b3d6532e9ffbf9ab0eea6dcc519ffbb0 100644 (file)
@@ -16,8 +16,8 @@
 #include "cl_RA.h"
 #include "cln/float.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* Use inline version of cl_float -- cl_float_inline */
+#include "cl_inline.h"
 #include "cl_F_from_R_def.cc"
 
 namespace cln {
@@ -78,7 +78,7 @@ const cl_N acosh (const cl_N& z)
                }
                if (x < cl_I(-1)) {
                        // x < -1
-                       var cl_F xf = cl_float(x);
+                       var cl_F xf = cl_float_inline(x);
                        var cl_F& x = xf;
                        // x Float <= -1
                        // log(sqrt(x^2-1)-x), ein Float >=0, Imaginärteil pi
index 623ab30944127e036d49c76abf3b97f6c71447cd..ffc43ef97f268b0da2d89600fb714fde41e290f5 100644 (file)
@@ -16,8 +16,8 @@
 #include "cl_RA.h"
 #include "cln/float.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* Use the inline version of cl_float */
+#include "cl_inline.h"
 #include "cl_F_from_R_def.cc"
 
 namespace cln {
@@ -89,7 +89,7 @@ const cl_C_R asinh (const cl_R& x, const cl_R& y)
                                        return cl_C_R(0,scale_float(pi(),-1));
                                if (eq(y,-1)) // x=0, y=-1 -> v = -pi/2
                                        return cl_C_R(0,-scale_float(pi(),-1));
-                               yf = cl_float(y); // y in Float umwandeln
+                               yf = cl_float_inline(y); // y in Float umwandeln
                        } else {
                                DeclareType(cl_RT,y);
                                // y Ratio
@@ -99,7 +99,7 @@ const cl_C_R asinh (const cl_R& x, const cl_R& y)
                                        if (eq(numerator(y),-1)) // x=0, y=-1/2 -> v = -pi/6
                                                return cl_C_R(0,-(pi()/6));
                                }
-                               yf = cl_float(y); // y in Float umwandeln
+                               yf = cl_float_inline(y); // y in Float umwandeln
                        }
                } else {
                        DeclareType(cl_F,y);
@@ -135,7 +135,7 @@ const cl_C_R asinh (const cl_R& x, const cl_R& y)
        }
        if (eq(y,0)) {
                // y=0
-               var cl_F xf = cl_float(x); // x in Float umwandeln
+               var cl_F xf = cl_float_inline(x); // x in Float umwandeln
                var cl_F& x = xf;
                // x Float
                if (zerop(x))
index 2435495d1061c4c7dea3809a02ebdb0a4fd36a5c..92d58f010e532bdc0bcb9b9a4ea37e565389e286 100644 (file)
 #include "cl_F_tran.h"
 #include "cl_R.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* Use the inline version of cl_float */
+#include "cl_inline.h"
 #include "cl_F_from_R_def.cc"
 
 namespace cln {
 
 // Hilfsfunktion für atanh und atan: u+iv := artanh(x+iy). Liefert cl_C_R(u,v).
 
-const cl_C_R atanh (const cl_R& x, const cl_R& y)
+const cl_C_R CL_FLATTEN atanh (const cl_R& x, const cl_R& y)
 {
 // Methode:
 // Wert und Branch Cuts nach der Formel CLTL2, S. 315:
@@ -56,7 +56,7 @@ const cl_C_R atanh (const cl_R& x, const cl_R& y)
                // x=0 -> u=0, v=atan(X=1,Y=y) (Fall y=0 ist inbegriffen)
                return cl_C_R(0, atan(1,y));
        if (eq(y,0)) {
-               var cl_F xf = cl_float(x); // (float x)
+               var cl_F xf = cl_float_inline(x); // (float x)
                var cl_F& x = xf;
                // x Float
                if (zerop(x))
@@ -92,7 +92,7 @@ const cl_C_R atanh (const cl_R& x, const cl_R& y)
        var cl_F yf;
        if (rationalp(x)) {
                DeclareType(cl_RA,x);
-               yf = cl_float(y);
+               yf = cl_float_inline(y);
                xf = cl_float(x,yf);
        } else {
                DeclareType(cl_F,x);
index dfd577ba89b88d6ab5a8b08c4ded8cdd2d9cf495..3e6116ddf0fe452c24cae48d9779c25f80bf43b4 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-const cl_DF fceiling (const cl_DF& x)
+const cl_DF CL_FLATTEN fceiling (const cl_DF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return ftruncate(x);
        else
                return futruncate(x);
index e1da6844a4850b51c59684ed46e5972e432748ee..c8211d414780adc60238dfd39bd58e4b7c210afb 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_DS.h"
 #include "cl_ieee.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
@@ -47,9 +46,9 @@ const cl_DF operator/ (const cl_DF& x1, const cl_DF& x2)
 #if defined(FAST_DOUBLE) && !defined(__i386__)
       double_to_DF(DF_to_double(x1) / DF_to_double(x2), return ,
                    TRUE, TRUE, // Overflow und subnormale Zahl abfangen
-                   !zerop(x1), // ein Ergebnis +/- 0.0
+                   !zerop_inline(x1), // ein Ergebnis +/- 0.0
                                // ist genau dann in Wirklichkeit ein Underflow
-                   zerop(x2), // Division durch Null abfangen
+                   zerop_inline(x2), // Division durch Null abfangen
                    FALSE // kein NaN als Ergebnis möglich
                   );
 #else
index 18a508ca2f235a90319b47c43d924dff5b354f75..6dc3c088b9831f49e999617d4ef6c1c63f63d8b3 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-const cl_DF ffloor (const cl_DF& x)
+const cl_DF CL_FLATTEN ffloor (const cl_DF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return futruncate(x);
        else
                return ftruncate(x);
index 77f4ffa82484796ab7ba6663049b32e2a7d9a8ff..0eff54e9183c9fa9b9e16bad976c02ced2fac828 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool minusp (const cl_DF& x)
+CL_INLINE bool CL_INLINE_DECL(minusp) (const cl_DF& x)
 {
 #if (cl_word_size==64)
        return (sint64)TheDfloat(x)->dfloat_value_semhi < 0;
index efe1ecba026e9e0c1eb0822d2f2bda7b0a01e262..762b7799de61ad116271480a732cd39753403611 100644 (file)
@@ -15,8 +15,7 @@
 #include "cl_DS.h"
 #include "cl_ieee.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
@@ -43,7 +42,7 @@ const cl_DF operator* (const cl_DF& x1, const cl_DF& x2)
 #ifdef FAST_DOUBLE
       double_to_DF(DF_to_double(x1) * DF_to_double(x2), return ,
                    TRUE, TRUE, // Overflow und subnormale Zahl abfangen
-                   !(zerop(x1) || zerop(x2)), // ein Ergebnis +/- 0.0
+                   !(zerop_inline(x1) || zerop_inline(x2)), // ein Ergebnis +/- 0.0
                                // ist genau dann in Wirklichkeit ein Underflow
                    FALSE, FALSE // keine Singularität, kein NaN als Ergebnis möglich
                   );
index 78238aca0d0b721484285a077a3fd89d6cf7a44a..aab936938c0e5cd09d7340b7a27071a22f123624 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-bool plusp (const cl_DF& x)
+CL_INLINE2 bool CL_INLINE2_DECL(plusp) (const cl_DF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return false; // x<0 -> nein
-       elif (zerop(x))
+       elif (zerop_inline(x))
                return false; // x=0 -> nein
        else
                return true; // sonst ist x>0.
index 37bf62ab3f88d4e868ee90284e77acd006380579..8af6b73d91992008ba391283e70a81b97a33d962 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool zerop (const cl_DF& x)
+CL_INLINE bool CL_INLINE_DECL(zerop) (const cl_DF& x)
 {
 #if 0
        return DF_uexp(TheDfloat(x)->dfloat_value_semhi) == 0;
index f29d5960ef11e00e2c58c5fa1fe95f76a79baf66..8a2f725b1e4a24397fd4a1c1f4f2e6623694b302 100644 (file)
@@ -9,13 +9,12 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-const cl_DF abs (const cl_DF& x)
+const cl_DF CL_FLATTEN abs (const cl_DF& x)
 {
 // x<0 -> (- x), x>=0 -> x
        if (minusp(x)) return -x; else return x;
index 97b9fed6b5efabd797a22c44d46b6580774b7884..a8457f3eef4f70a76da40ea664a0300053497590 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uintC float_digits (const cl_DF& x)
+CL_INLINE uintC CL_INLINE_DECL(float_digits) (const cl_DF& x)
 {
        unused x;
        return DF_mant_len+1; // 53
index c3907be4e4083a55666f6994d0abddc15075488b..cef05b9f489642e8167d2fa84aad0c2190c90525 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uint32 equal_hashcode (const cl_DF& x)
+CL_INLINE uint32 CL_INLINE_DECL(equal_hashcode) (const cl_DF& x)
 {
        var cl_signean sign;
        var sintL exp;
index c4058e3bc8b60032884386fd2692fb742c7be4a9..677bd19008b7ab92526a0fb140b7d735b05fb979 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-sintE float_exponent (const cl_DF& x)
+CL_INLINE sintE CL_INLINE_DECL(float_exponent) (const cl_DF& x)
 {
        var uintL uexp = DF_uexp(TheDfloat(x)->dfloat_value_semhi);
        if (uexp==0) { return 0; }
index b69fc03bdbcc3004245eeac88b5239033f153dab..44b6b21fdc68c7e7bbffa770610d91401664566d 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_idecoded_float integer_decode_float (const cl_DF& x)
+CL_INLINE const cl_idecoded_float CL_INLINE_DECL(integer_decode_float) (const cl_DF& x)
 {
        // x entpacken:
        var cl_signean sign;
index 0e6b28964d664e9aec880ad6062b28699b6942e6..46178a82b5caba7980d8373083da58c7e398320c 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-uintC float_precision (const cl_DF& x)
+CL_INLINE2 uintC CL_INLINE2_DECL(float_precision) (const cl_DF& x)
 {
-       if (zerop(x)) return 0;
+       if (zerop_inline(x)) return 0;
        return DF_mant_len+1; // 53
 }
 
index 42847c423b25e56ee60f382dbd8fa6510716ba1c..5e2a13d6deb0221459ed6447c8a7ea84ffc525ab 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_DF float_sign (const cl_DF& x)
+CL_INLINE2 const cl_DF CL_INLINE2_DECL(float_sign) (const cl_DF& x)
 {
 // Methode: x>=0 -> Ergebnis 1.0; x<0 -> Ergebnis -1.0
-       return (!minusp(x) ? cl_DF_1 : cl_DF_minus1);
+       return (!minusp_inline(x) ? cl_DF_1 : cl_DF_minus1);
 }
 
 }  // namespace cln
index 3101a9337a3569fff3160963147a42815441ea31..1850ccb3e703ef71e915ab43f47f2b7eb2d208b5 100644 (file)
 
 #include "cl_DF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_DF_minusp.cc"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_DF signum (const cl_DF& x)
+CL_INLINE2 const cl_DF CL_INLINE2_DECL(signum) (const cl_DF& x)
 {
-       if (minusp(x)) { return cl_DF_minus1; } // x<0 -> -1.0
-       elif (zerop(x)) { return cl_DF_0; } // x=0 -> 0.0
+       if (minusp_inline(x)) { return cl_DF_minus1; } // x<0 -> -1.0
+       elif (zerop_inline(x)) { return cl_DF_0; } // x=0 -> 0.0
        else { return cl_DF_1; } // x>0 -> +1.0
 }
 
index 09b0cb780110e2b63380351214863246cd1a806c..c405f66bcbdcfa8709420a967b58913c570437e2 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 #include "cl_FF_minusp.cc"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-bool minusp (const cl_F& x)
+bool CL_FLATTEN minusp (const cl_F& x)
 {
        floatcase(x
-       ,       return minusp(x);
-       ,       return minusp(x);
-       ,       return minusp(x);
-       ,       return minusp(x);
+       ,       return minusp_inline(x);
+       ,       return minusp_inline(x);
+       ,       return minusp_inline(x);
+       ,       return minusp_inline(x);
        );
 }
 
index d76d2a5a96088fd43565f88849e165d5b9cecf4d..23a4d92717eaf16b95218ef6025bdc1042c3d01a 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+#include "cl_inline2.h"
 #include "cl_SF_plusp.cc"
 #include "cl_FF_plusp.cc"
 #include "cl_DF_plusp.cc"
 
 namespace cln {
 
-bool plusp (const cl_F& x)
+bool CL_FLATTEN plusp (const cl_F& x)
 {
        floatcase(x
-       ,       return plusp(x);
-       ,       return plusp(x);
-       ,       return plusp(x);
-       ,       return plusp(x);
+       ,       return plusp_inline(x);
+       ,       return plusp_inline(x);
+       ,       return plusp_inline(x);
+       ,       return plusp_inline(x);
        );
 }
 
index 1cf5e22fb0c778f8bdb767df543e7668453c101c..0e21d284b173b0fd4be7c7800cc8b004917431f9 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_zerop.cc"
 #include "cl_FF_zerop.cc"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
 
-bool zerop (const cl_F& x)
+bool CL_FLATTEN zerop (const cl_F& x)
 {
        floatcase(x
-       ,       return zerop(x);
-       ,       return zerop(x);
-       ,       return zerop(x);
-       ,       return zerop(x);
+       ,       return zerop_inline(x);
+       ,       return zerop_inline(x);
+       ,       return zerop_inline(x);
+       ,       return zerop_inline(x);
        );
 }
 
index c6a666732fdf6961ef527751ade0d30d89a5f9d6..97453d73fe9bfbafe3e0b02021d7f84f50bc9489 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 
 namespace cln {
 
-const cl_FF fceiling (const cl_FF& x)
+const cl_FF CL_FLATTEN fceiling (const cl_FF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return ftruncate(x);
        else
                return futruncate(x);
index 1544eb7e684eca6f61ed15a9e505f0d6875bfc52..2d90939dd3b8da451b8f6233a62ff9657e39139c 100644 (file)
@@ -15,8 +15,7 @@
 #include "cl_low.h"
 #include "cl_ieee.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_zerop.cc"
 
 namespace cln {
@@ -46,9 +45,9 @@ const cl_FF operator/ (const cl_FF& x1, const cl_FF& x2)
   #if defined(FAST_FLOAT) && !defined(__i386__)
       float_to_FF(FF_to_float(x1) / FF_to_float(x2), return ,
                   TRUE, TRUE, // Overflow und subnormale Zahl abfangen
-                  !zerop(x1), // ein Ergebnis +/- 0.0
+                  !zerop_inline(x1), // ein Ergebnis +/- 0.0
                               // ist genau dann in Wirklichkeit ein Underflow
-                  zerop(x2), // Division durch Null abfangen
+                  zerop_inline(x2), // Division durch Null abfangen
                   FALSE // kein NaN als Ergebnis möglich
                  );
   #else
index a6ac0ba3421336687f595933117c27ffb771a40c..5468664c33e8904e290e47882e3a3558a3ee9d0c 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 
 namespace cln {
 
-const cl_FF ffloor (const cl_FF& x)
+const cl_FF CL_FLATTEN ffloor (const cl_FF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return futruncate(x);
        else
                return ftruncate(x);
index 2f34de29d8efa6aa7cd1d7aedd2566c3f6bf1b79..db9c0fd7da606ffe5083a481e2169c1c9f63b7e6 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool minusp (const cl_FF& x)
+CL_INLINE bool CL_INLINE_DECL(minusp) (const cl_FF& x)
 {
        return (sint32)cl_ffloat_value(x) < 0;
 }
index 8f8d14da3854bd241300f9b0936719f5b6e52752..c258c71f8e1301a4c987b9a12273ee3838528b80 100644 (file)
@@ -14,8 +14,7 @@
 #include "cl_low.h"
 #include "cl_ieee.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_zerop.cc"
 
 namespace cln {
@@ -42,7 +41,7 @@ const cl_FF operator* (const cl_FF& x1, const cl_FF& x2)
   #ifdef FAST_FLOAT
       float_to_FF(FF_to_float(x1) * FF_to_float(x2), return ,
                   TRUE, TRUE, // Overflow und subnormale Zahl abfangen
-                  !(zerop(x1) || zerop(x2)), // ein Ergebnis +/- 0.0
+                  !(zerop_inline(x1) || zerop_inline(x2)), // ein Ergebnis +/- 0.0
                               // ist genau dann in Wirklichkeit ein Underflow
                   FALSE, FALSE // keine Singularität, kein NaN als Ergebnis möglich
                  );
index 46d6a4972e8162095d292cdb4c11b23d3adb9536..dff8cb7c640e7df27767c7d83d3b4da660743351 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 #include "cl_FF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-bool plusp (const cl_FF& x)
+CL_INLINE2 bool CL_INLINE2_DECL(plusp) (const cl_FF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return false; // x<0 -> nein
-       elif (zerop(x))
+       elif (zerop_inline(x))
                return false; // x=0 -> nein
        else
                return true; // sonst ist x>0.
index 1e64d07044ec5ed4c260af3b605a5b965c59854e..83b8837ec5f95dade0571e875a4c26bd9b740f3a 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool zerop (const cl_FF& x)
+CL_INLINE bool CL_INLINE_DECL(zerop) (const cl_FF& x)
 {
        return cl_ffloat_value(x) == 0;
 }
index cb774c0310546a64e6db7fd025a3fcf05a8c7e1d..3b00afe5c97d29659d6e5fc53962193a865bcaa9 100644 (file)
@@ -9,16 +9,15 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 
 namespace cln {
 
-const cl_FF abs (const cl_FF& x)
+const cl_FF CL_FLATTEN abs (const cl_FF& x)
 {
 // x<0 -> (- x), x>=0 -> x
-       if (minusp(x)) return -x; else return x;
+       if (minusp_inline(x)) return -x; else return x;
 }
 
 }  // namespace cln
index 4d209efe5350e3e109495b45afb00733ca86f0b7..de7dff37d7ef4fa66273647e0d649adc193df799 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uintC float_digits (const cl_FF& x)
+CL_INLINE uintC CL_INLINE_DECL(float_digits) (const cl_FF& x)
 {
        unused x;
        return FF_mant_len+1; // 24
index 3abbd99f9008b794aff897e3628ce0c9149d9c65..dd6cf8095db0bfd5e6ff5d21fd2bd4c922c8f0b0 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uint32 equal_hashcode (const cl_FF& x)
+CL_INLINE uint32 CL_INLINE_DECL(equal_hashcode) (const cl_FF& x)
 {
        var cl_signean sign;
        var sintL exp;
index f9f6b672be9070b6fbe68782e4ec5b268f8efc82..4f60ceadcea8da455a7318d4f49baeb6b77a608f 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-sintE float_exponent (const cl_FF& x)
+CL_INLINE sintE CL_INLINE_DECL(float_exponent) (const cl_FF& x)
 {
        var uintL uexp = FF_uexp(cl_ffloat_value(x));
        if (uexp==0) { return 0; }
index f4f7307214ea79b221cd59b5979326779164947a..de76beaa9bff6026729e7b6f6e0482a9fb44fa82 100644 (file)
@@ -21,8 +21,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_idecoded_float integer_decode_float (const cl_FF& x)
+CL_INLINE const cl_idecoded_float CL_INLINE_DECL(integer_decode_float) (const cl_FF& x)
 {
        var cl_idecoded_float sem = integer_decode_float(cl_FF_to_DF(x));
        return cl_idecoded_float(sem.mantissa >> (DF_mant_len-FF_mant_len),
@@ -37,8 +36,7 @@ const cl_idecoded_float integer_decode_float (const cl_FF& x)
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_idecoded_float integer_decode_float (const cl_FF& x)
+CL_INLINE const cl_idecoded_float CL_INLINE_DECL(integer_decode_float) (const cl_FF& x)
 {
        // x entpacken:
        var cl_signean sign;
index e60defc44bd13f18ba2c766fa8c9297549e6997d..d3cc65302e5f40f0708655f6063510acda7faf92 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-uintC float_precision (const cl_FF& x)
+CL_INLINE2 uintC CL_INLINE2_DECL(float_precision) (const cl_FF& x)
 {
-       if (zerop(x)) return 0;
+       if (zerop_inline(x)) return 0;
        return FF_mant_len+1; // 24
 }
 
index 583b7fdc5f66495dff90e18c373d3c847d8f273d..5f58a36f978b3e90211920b83f8a52f15f4d010d 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_FF float_sign (const cl_FF& x)
+CL_INLINE2 const cl_FF CL_INLINE2_DECL(float_sign) (const cl_FF& x)
 {
 // Methode: x>=0 -> Ergebnis 1.0; x<0 -> Ergebnis -1.0
-       return (!minusp(x) ? cl_FF_1 : cl_FF_minus1);
+       return (!minusp_inline(x) ? cl_FF_1 : cl_FF_minus1);
 }
 
 }  // namespace cln
index 69cb60e520dafe4a8b378bb0ee13fe1cf86bc550..92b2071c78a46a5ceeb6aad33dba7481ef181e17 100644 (file)
 
 #include "cl_FF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_FF_minusp.cc"
 #include "cl_FF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_FF signum (const cl_FF& x)
+CL_INLINE2 const cl_FF CL_INLINE2_DECL(signum) (const cl_FF& x)
 {
-       if (minusp(x)) { return cl_FF_minus1; } // x<0 -> -1.0
-       elif (zerop(x)) { return cl_FF_0; } // x=0 -> 0.0
+       if (minusp_inline(x)) { return cl_FF_minus1; } // x<0 -> -1.0
+       elif (zerop_inline(x)) { return cl_FF_0; } // x=0 -> 0.0
        else { return cl_FF_1; } // x>0 -> +1.0
 }
 
index 7e869f1b8bc7f34209dbe7e1e950aa9b9e48399f..bddc2107f0a28fd105f1628e645654c7e446219b 100644 (file)
 
 #include "cl_LF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
 
-const cl_LF fceiling (const cl_LF& x)
+CL_INLINE2 const cl_LF CL_INLINE2_DECL(fceiling) (const cl_LF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return ftruncate(x);
        else
                return futruncate(x);
index 79e4ba50f1e607beee3aa33b0a510bfe6599c010..5e3b62185ad2129b94d7317c0edd7d4070db8bee 100644 (file)
@@ -12,8 +12,7 @@
 #include "cl_LF.h"
 #include "cl_DS.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
@@ -27,9 +26,9 @@ cl_signean compare (const cl_LF& x, const cl_LF& y)
 // x und y haben gleiches Vorzeichen ->
 //    x >=0 -> vergleiche x und y (die rechten 24 Bits)
 //    x <0 -> vergleiche y und x (die rechten 24 Bits)
-      if (!minusp(y))
+      if (!minusp_inline(y))
         // y>=0
-        { if (!minusp(x))
+        { if (!minusp_inline(x))
             // y>=0, x>=0
             { // Vergleiche Exponenten und Mantissen:
               { var uintE x_uexp = TheLfloat(x)->expo;
@@ -66,7 +65,7 @@ cl_signean compare (const cl_LF& x, const cl_LF& y)
             { return signean_minus; } // x<y
         }
         else
-        { if (!minusp(x))
+        { if (!minusp_inline(x))
             // y<0, x>=0
             { return signean_plus; } // x>y
             else
index ffc4cbf7e4fb258cd221ca23b25e0dc092a073bf..0aaa639c1fc63a43501d15360c9fe8be5d7ecbd9 100644 (file)
 
 #include "cl_LF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
 
-const cl_LF ffloor (const cl_LF& x)
+CL_INLINE2 const cl_LF CL_INLINE2_DECL(ffloor) (const cl_LF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return futruncate(x);
        else
                return ftruncate(x);
index 55df5046bcb9c1217c1e60806e78b30fe5af720c..3fd4ef8d9a689d787c30ebe127e2189155fbaa5a 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool minusp (const cl_LF& x)
+CL_INLINE bool CL_INLINE_DECL(minusp) (const cl_LF& x)
 {
        return -TheLfloat(x)->sign;
 }
index 6c029713db2549f13436d9a2d9f3b4cfdf1ace84..d3a110043dd81b7ee568d3414973102cfda09261 100644 (file)
 #include "cl_LF.h"
 #include "cl_LF_impl.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-bool plusp (const cl_LF& x)
+CL_INLINE2 bool CL_INLINE2_DECL(plusp) (const cl_LF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return false; // x<0 -> nein
-       elif (zerop(x))
+       elif (zerop_inline(x))
                return false; // x=0 -> nein
        else
                return true; // sonst ist x>0.
index 35eccc13f65d9b80d70d5f562dffdb511081a623..3abe9b16f09e79f74511c5953835200658d892ae 100644 (file)
@@ -13,8 +13,7 @@
 #include "cl_I.h"
 #include "cl_DS.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
@@ -36,7 +35,7 @@ const cl_I cl_LF_to_I (const cl_LF& x)
       copy_loop_msp(arrayMSDptr(TheLfloat(x)->data,len),MSDptr mspop 1,len); // Mantisse kopieren
       mspref(MSDptr,0) = 0; // und zusätzliches Nulldigit
       // Mantisse ist die UDS MSDptr/len1/LSDptr.
-      if (minusp(x))
+      if (minusp_inline(x))
         // x<0 -> Mantisse negieren:
         { neg_loop_lsp(LSDptr,len1); }
       // Vorzeichen*Mantisse ist die DS MSDptr/len1/LSDptr.
index 35135c498673a35972b73b885e621c45506e22f1..af83bedc7a5ff8342a4cf95a22caabfc340fe2d8 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool zerop (const cl_LF& x)
+CL_INLINE bool CL_INLINE_DECL(zerop) (const cl_LF& x)
 {
        return TheLfloat(x)->expo == 0;
 }
index be8cb560375d5b0075900320a5a9798660ebbf80..b46bdad653ae22936c93ea8881943bf257d7a353 100644 (file)
@@ -9,16 +9,15 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
 
-const cl_LF abs (const cl_LF& x)
+const cl_LF CL_FLATTEN abs (const cl_LF& x)
 {
 // x<0 -> (- x), x>=0 -> x
-       if (minusp(x)) return -x; else return x;
+       if (minusp_inline(x)) return -x; else return x;
 }
 
 }  // namespace cln
index d1e323af32d814757ee41dfdc2f8c0366fb0f3bc..fd9edef1d81a231b44e5721c6af0ec4f26061c76 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uintC float_digits (const cl_LF& x)
+CL_INLINE uintC CL_INLINE_DECL(float_digits) (const cl_LF& x)
 {
        return intDsize*(uintC)(TheLfloat(x)->len);
 }
index 0181c9629f783df88f4bc4c931814f3bb822460f..509daf7ea589de62316892507c54c182c2266db4 100644 (file)
@@ -15,8 +15,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uint32 equal_hashcode (const cl_LF& x)
+CL_INLINE uint32 CL_INLINE_DECL(equal_hashcode) (const cl_LF& x)
 {
        var cl_signean sign;
        var sintL exp;
index d6f7346da2b81b87e942da12d2cf362f81c396a7..e80c72e3fdcda111ea611ce700c2cfd4d0c9bd29 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-sintE float_exponent (const cl_LF& x)
+CL_INLINE sintE CL_INLINE_DECL(float_exponent) (const cl_LF& x)
 {
        var uintE uexp = TheLfloat(x)->expo;
        if (uexp==0) { return 0; }
index 8d547d345e50fa4ed4301621620ff033605dd42e..5e490cf498838efae5204d8883caab5b5ef85d7e 100644 (file)
@@ -15,8 +15,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_idecoded_float integer_decode_float (const cl_LF& x)
+CL_INLINE const cl_idecoded_float CL_INLINE_DECL(integer_decode_float) (const cl_LF& x)
 {
        // x entpacken:
        var uintE uexp = TheLfloat(x)->expo;
index 90c02478ae46b7f05f3da1f8d7e94f76bf806c9f..66798a4ff55abfc34a19f31e6d44ea31df1c8f56 100644 (file)
 
 #include "cl_LF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-uintC float_precision (const cl_LF& x)
+CL_INLINE2 uintC CL_INLINE2_DECL(float_precision) (const cl_LF& x)
 {
-       if (zerop(x)) return 0;
+       if (zerop_inline(x)) return 0;
        return intDsize*(uintC)(TheLfloat(x)->len);
 }
 
index dedf5ac63a4a480437b571c5f68ea7f3e4181fae..274bf5bb27670e2ea1d8837d23cbca4fdf5a61e2 100644 (file)
 
 #include "cln/exception.h"
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+#include "cl_inline2.h"
 #include "cl_LF_precision.cc"
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_exponent.cc"
 
 namespace cln {
@@ -28,12 +26,12 @@ const cl_LF cl_LF_shortenrelative (const cl_LF& x, const cl_LF& y)
        // dx := float_digits(x), dy := float_digits(y).
        // 1 ulp(x) = 2^(ex-dx), 1 ulp(y) = 2^(ey-dy).
        // Falls ex-dx < ey-dy, x von Precision dx auf dy-ey+ex verkürzen.
-       var sintE ey = float_exponent(y);
-       var sintC dy = float_precision(y);
+       var sintE ey = float_exponent_inline(y);
+       var sintC dy = float_precision_inline(y);
        if (dy==0) // zerop(y) ?
                throw runtime_exception();
-       var sintE ex = float_exponent(x);
-       var sintC dx = float_precision(x);
+       var sintE ex = float_exponent_inline(x);
+       var sintC dx = float_precision_inline(x);
        if (dx==0) // zerop(x) ?
                return x;
        var sintE d = ex - ey;
index adc9ba72f236b11c7389e3892313740dbf236567..0cb6e639dd25d52a6329f9737880b83aa58ee3b3 100644 (file)
@@ -9,11 +9,9 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+#include "cl_inline2.h"
 #include "cl_LF_precision.cc"
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_exponent.cc"
 
 namespace cln {
@@ -25,9 +23,9 @@ const cl_LF cl_LF_shortenwith (const cl_LF& x, const cl_LF& y)
        // ex := float_exponent(x), dx := float_digits(x), 1 ulp(x) = 2^(ex-dx).
        // ey := float_exponent(y).
        // Falls ex-dx < ey, x von Precision dx auf ex-ey verkürzen.
-       var sintE ey = float_exponent(y);
-       var sintE ex = float_exponent(x);
-       var uintC dx = float_precision(x);
+       var sintE ey = float_exponent_inline(y);
+       var sintE ex = float_exponent_inline(x);
+       var uintC dx = float_precision_inline(x);
        if (dx==0) // zerop(x) ?
                return x;
        var sintE ulpx = ex - dx;
index 5fa601a0c6984cd0430790fd50dc36b85b62633e..9fd0708c5c7b565c34a23fe378894f1ebc18f1cf 100644 (file)
 #include "cl_LF.h"
 #include "cl_LF_impl.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_LF float_sign (const cl_LF& x)
+CL_INLINE2 const cl_LF CL_INLINE2_DECL(float_sign) (const cl_LF& x)
 {
 // Methode: x>=0 -> Ergebnis 1.0; x<0 -> Ergebnis -1.0
        return encode_LF1s(TheLfloat(x)->sign,TheLfloat(x)->len);
index eae4705f019fe1375fa4471160124fa0bdd71810..a658e186e0cd1f248fa834e3c523d5bafd5b9f8b 100644 (file)
 #include "cl_LF.h"
 #include "cl_LF_impl.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_LF signum (const cl_LF& x)
+CL_INLINE2 const cl_LF CL_INLINE2_DECL(signum) (const cl_LF& x)
 {
-       if (zerop(x)) { return x; } // x=0 -> 0.0
+       if (zerop_inline(x)) { return x; } // x=0 -> 0.0
        else // je nach Vorzeichen von x
        { return encode_LF1s(TheLfloat(x)->sign,TheLfloat(x)->len); }
 }
index 07df8c524c7aee86b8b59c91bae71b502a516806..9fe43d27b5bb0f9a50c0f3ee3aeec69ed2f10146 100644 (file)
@@ -15,8 +15,7 @@
 #include "cln/dfloat.h"
 #include "cln/lfloat.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 #include "cl_FF_minusp.cc"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-const cl_F abs (const cl_F& x)
+const cl_F CL_FLATTEN abs (const cl_F& x)
 {
 // x<0 -> (- x), x>=0 -> x
        floatcase(x
-       ,       if (minusp(x)) return -x; else return x;
-       ,       if (minusp(x)) return -x; else return x;
-       ,       if (minusp(x)) return -x; else return x;
-       ,       if (minusp(x)) return -x; else return x;
+       ,       if (minusp_inline(x)) return -x; else return x;
+       ,       if (minusp_inline(x)) return -x; else return x;
+       ,       if (minusp_inline(x)) return -x; else return x;
+       ,       if (minusp_inline(x)) return -x; else return x;
        );
 }
 
index 635063d64f587194a25d985c6edc6bb8c9ae4158..caf26d08604aeef075d080fcd90119da9c9996d1 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_digits.cc"
 #include "cl_FF_digits.cc"
 #include "cl_DF_digits.cc"
@@ -23,10 +22,10 @@ namespace cln {
 uintC float_digits (const cl_F& x)
 {
        floatcase(x
-       ,       return float_digits(x);
-       ,       return float_digits(x);
-       ,       return float_digits(x);
-       ,       return float_digits(x);
+       ,       return float_digits_inline(x);
+       ,       return float_digits_inline(x);
+       ,       return float_digits_inline(x);
+       ,       return float_digits_inline(x);
        );
 }
 
index 6f107a187a91878104860bd8021a2b733f8ee9d7..5687ee34f02fd1fb770629c1497b66023c6aac3a 100644 (file)
@@ -12,8 +12,7 @@
 #include "cl_N.h"
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_eqhashcode.cc"
 #include "cl_FF_eqhashcode.cc"
 #include "cl_DF_eqhashcode.cc"
 
 namespace cln {
 
-uint32 equal_hashcode (const cl_F& x)
+uint32 CL_FLATTEN equal_hashcode (const cl_F& x)
 {
        floatcase(x
-       ,       return equal_hashcode(x);
-       ,       return equal_hashcode(x);
-       ,       return equal_hashcode(x);
-       ,       return equal_hashcode(x);
+       ,       return equal_hashcode_inline(x);
+       ,       return equal_hashcode_inline(x);
+       ,       return equal_hashcode_inline(x);
+       ,       return equal_hashcode_inline(x);
        );
 }
 
index 8f945617430bdc04142422013960f30a6c12a797..55b1a58626140f0a5766290fc0591b5738b3dc2a 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_exponent.cc"
 #include "cl_FF_exponent.cc"
 #include "cl_DF_exponent.cc"
 
 namespace cln {
 
-sintE float_exponent (const cl_F& x)
+sintE CL_FLATTEN float_exponent (const cl_F& x)
 {
        floatcase(x
-       ,       return float_exponent(x);
-       ,       return float_exponent(x);
-       ,       return float_exponent(x);
-       ,       return float_exponent(x);
+       ,       return float_exponent_inline(x);
+       ,       return float_exponent_inline(x);
+       ,       return float_exponent_inline(x);
+       ,       return float_exponent_inline(x);
        );
 }
 
index d6b0bb7adc058f691f8b90fe14620bfb3f7efb91..0a55da0c16e8645c02a7e7e97fdc3c174db38467 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_idecode.cc"
 #include "cl_FF_idecode.cc"
 #include "cl_DF_idecode.cc"
 
 namespace cln {
 
-const cl_idecoded_float integer_decode_float (const cl_F& x)
+const cl_idecoded_float CL_FLATTEN integer_decode_float (const cl_F& x)
 {
        floatcase(x
-       ,       return integer_decode_float(x);
-       ,       return integer_decode_float(x);
-       ,       return integer_decode_float(x);
-       ,       return integer_decode_float(x);
+       ,       return integer_decode_float_inline(x);
+       ,       return integer_decode_float_inline(x);
+       ,       return integer_decode_float_inline(x);
+       ,       return integer_decode_float_inline(x);
        );
 }
 
index ab4f2154a94d8fe3d1661d854fc82f4127b83290..1d9c770a36eb457f2c483602fe9934d7fa05b1f5 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+#include "cl_inline2.h"
 #include "cl_SF_precision.cc"
 #include "cl_FF_precision.cc"
 #include "cl_DF_precision.cc"
@@ -20,7 +19,7 @@
 
 namespace cln {
 
-uintC float_precision (const cl_F& x)
+uintC CL_FLATTEN float_precision (const cl_F& x)
 {
        floatcase(x
        ,       return float_precision(x);
index 0f96b66a7a8fafbf7633335811e675c1fd312d6d..03d8614920b28a4894da6dd07f6601bedc952967 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+#include "cl_inline2.h"
 #include "cl_SF_sign.cc"
 #include "cl_FF_sign.cc"
 #include "cl_DF_sign.cc"
 
 namespace cln {
 
-const cl_F float_sign (const cl_F& x)
+const cl_F CL_FLATTEN float_sign (const cl_F& x)
 {
 // Methode: x>=0 -> Ergebnis 1.0; x<0 -> Ergebnis -1.0
        floatcase(x
-       ,       return float_sign(x);
-       ,       return float_sign(x);
-       ,       return float_sign(x);
-       ,       return float_sign(x);
+       ,       return float_sign_inline(x);
+       ,       return float_sign_inline(x);
+       ,       return float_sign_inline(x);
+       ,       return float_sign_inline(x);
        );
 }
 
index 0b51f9e1485b59b6f9843b2a082564580e6def81..3e2af1acbfe40f37ff394e7106e8216272018d3e 100644 (file)
@@ -11,8 +11,8 @@
 
 #include "cl_F.h"
 
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+/* Use inline versions of signum(cl_{SF,FF,DF,LF}) functions */
+#include "cl_inline2.h"
 #include "cl_SF_signum.cc"
 #include "cl_FF_signum.cc"
 #include "cl_DF_signum.cc"
 
 namespace cln {
 
-const cl_F signum (const cl_F& x)
+const cl_F CL_FLATTEN signum (const cl_F& x)
 {
        floatcase(x
-       ,       return signum(x);
-       ,       return signum(x);
-       ,       return signum(x);
-       ,       return signum(x);
+       ,       return signum_inline(x);
+       ,       return signum_inline(x);
+       ,       return signum_inline(x);
+       ,       return signum_inline(x);
        );
 }
 
index 98b24986f4205c3e7871fdea3825929e0c8a992e..53ae70e48ef1eb63d82c626cfcf2a41a37e0f4cf 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
 
-const cl_SF fceiling (const cl_SF& x)
+const cl_SF CL_FLATTEN fceiling (const cl_SF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return ftruncate(x);
        else
                return futruncate(x);
index 2f667513b44f8fcd1c7b9c3a9483f60c1b33930a..af517cb92f1d721adf652544c869855cdab69217 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
 
-const cl_SF ffloor (const cl_SF& x)
+const cl_SF CL_FLATTEN ffloor (const cl_SF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return futruncate(x);
        else
                return ftruncate(x);
index ba3bb354d09b029262282093015c7af94339ded4..c31e18ce8e75bace04a2bb56cfb976230605bd35 100644 (file)
@@ -9,13 +9,12 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
 
-cl_signean compare (const cl_SF& x, const cl_SF& y)
+cl_signean CL_FLATTEN compare (const cl_SF& x, const cl_SF& y)
 {
 // Methode:
 // x und y haben verschiedenes Vorzeichen ->
@@ -24,9 +23,9 @@ cl_signean compare (const cl_SF& x, const cl_SF& y)
 // x und y haben gleiches Vorzeichen ->
 //    x >=0 -> vergleiche x und y (die rechten 24 Bits)
 //    x <0 -> vergleiche y und x (die rechten 24 Bits)
-      if (!minusp(y))
+      if (!minusp_inline(y))
         // y>=0
-        { if (!minusp(x))
+        { if (!minusp_inline(x))
             // y>=0, x>=0
             { if (x.word < y.word) return signean_minus; // x<y
               if (x.word > y.word) return signean_plus; // x>y
@@ -37,7 +36,7 @@ cl_signean compare (const cl_SF& x, const cl_SF& y)
             { return signean_minus; } // x<y
         }
         else
-        { if (!minusp(x))
+        { if (!minusp_inline(x))
             // y<0, x>=0
             { return signean_plus; } // x>y
             else
index 3496e63eb2f787b16696c93d4875fc1d51af1c98..5f6bfcf51c8253e4120b6f660628add7551dd47e 100644 (file)
@@ -11,8 +11,8 @@
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* Use inline version of zerop */
+#include "cl_inline.h"
 #include "cl_SF_zerop.cc"
 
 namespace cln {
@@ -21,7 +21,7 @@ const cl_SF operator- (const cl_SF& x1, const cl_SF& x2)
 {
 // Methode:
 // (- x1 x2) = (+ x1 (- x2))
-       if (zerop(x2))
+       if (zerop_inline(x2))
                return x1;
        else
                return x1 + cl_SF_from_word(x2.word ^ bit(SF_sign_shift));
index b9d2932c607386361d43c896edc6f9fdd69d1766..269c9f8a9bda93096b0f1001c5eb2c3fe45a782a 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool minusp (const cl_SF& x)
+CL_INLINE bool CL_INLINE_DECL(minusp) (const cl_SF& x)
 {
        return (x.word & bit(SF_sign_shift)) != 0;
 }
index 45e67983a2b4a11f682dbc5609c0fc4d95c273e2..e0e733bd3b038637a38ffb1801f602fcbc237f03 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline versions of minusp and zerop */
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 #include "cl_SF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-bool plusp (const cl_SF& x)
+CL_INLINE2 bool CL_INLINE2_DECL(plusp) (const cl_SF& x)
 {
-       if (minusp(x))
+       if (minusp_inline(x))
                return false; // x<0 -> nein
-       elif (zerop(x))
+       elif (zerop_inline(x))
                return false; // x=0 -> nein
        else
                return true; // sonst ist x>0.
index 93f3b31ba633bdaa72c9c1fd2630d5b5096816ed..49b41293a4041499ea81786218e85d51ba56f23c 100644 (file)
@@ -11,8 +11,7 @@
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_zerop.cc"
 
 namespace cln {
@@ -21,7 +20,7 @@ const cl_SF operator- (const cl_SF& x)
 {
 // Methode:
 // Falls x=0.0, fertig. Sonst Vorzeichenbit umdrehen.
-       if (zerop(x))
+       if (zerop_inline(x))
                return SF_0;
        return cl_SF_from_word(x.word ^ ((cl_uint)1 << SF_sign_shift));
 }
index 93634584b3765234e7dba70d3e34ea628ac9f694..e729318505897e596953464aa70956e4dae1d46c 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-bool zerop (const cl_SF& x)
+CL_INLINE bool CL_INLINE_DECL(zerop) (const cl_SF& x)
 {
        return x.word == make_SF_word(0,0,0);
 }
index 4aedddee087589f1a61a3a004b48f860426e443f..bba1d610cb661a67e85743070c3faa9f64750f32 100644 (file)
@@ -9,16 +9,15 @@
 
 // Implementation.
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
 
-const cl_SF abs (const cl_SF& x)
+const cl_SF CL_FLATTEN abs (const cl_SF& x)
 {
 // x<0 -> (- x), x>=0 -> x
-       if (minusp(x)) return -x; else return x;
+       if (minusp_inline(x)) return -x; else return x;
 }
 
 }  // namespace cln
index 378a287d34e4be2862642e0dab63fe5f6bcd4801..146ed893b43941358cc6f74a72b17665c7b02c18 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uintC float_digits (const cl_SF& x)
+CL_INLINE uintC CL_INLINE_DECL(float_digits) (const cl_SF& x)
 {
        unused x;
        return SF_mant_len+1; // 17
index 948d70d5a13ee2b58101c68e3b3c2a3ee4bba144..cb6c231bedf841a8e6ba2af2f7685b1cf691453a 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-uint32 equal_hashcode (const cl_SF& x)
+CL_INLINE uint32 CL_INLINE_DECL(equal_hashcode) (const cl_SF& x)
 {
        var cl_signean sign;
        var sintL exp;
index 54adfe5c04a0f58b95e37244d1b24a10565e77b4..37270c8dd87ea11493b9ccd209c465d52aa4fc0f 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-sintE float_exponent (const cl_SF& x)
+CL_INLINE sintE CL_INLINE_DECL(float_exponent) (const cl_SF& x)
 {
        var uintL uexp = SF_uexp(x);
        if (uexp==0) { return 0; }
index 2fa34c1f9dd46755691f879fdd68385afa829a3b..d07949e72a8659bd27e76dd6f1e01524f79f4f02 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_idecoded_float integer_decode_float (const cl_SF& x)
+CL_INLINE const cl_idecoded_float CL_INLINE_DECL(integer_decode_float) (const cl_SF& x)
 {
        // x entpacken:
        var cl_signean sign;
index 5752264ee7d04aa770324d3331a10aefc1b43ba2..f8bd9829f6f0356059af19ce9d1f9a990ee30315 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-uintC float_precision (const cl_SF& x)
+CL_INLINE2 uintC CL_INLINE2_DECL(float_precision) (const cl_SF& x)
 {
-       if (zerop(x)) return 0;
+       if (zerop_inline(x)) return 0;
        return SF_mant_len+1; // 17
 }
 
index c780cc9ee4784965c863aa0bfd027b87a32c714a..35f3d8fd6b3413aa7360ea160f9736e7ea43a1bf 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_SF float_sign (const cl_SF& x)
+CL_INLINE2 const cl_SF CL_INLINE2_DECL(float_sign) (const cl_SF& x)
 {
 // Methode: x>=0 -> Ergebnis 1.0; x<0 -> Ergebnis -1.0
        return encode_SF(SF_sign(x),1,bit(SF_mant_len));
index b1239da08576eda1e2d3095de5834eda73e93e0a..ac75daadb206648e8c46da3cf7e58bc98edb6f74 100644 (file)
 
 #include "cl_SF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* Use inline versions of minusp and zerop */
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 #include "cl_SF_zerop.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_SF signum (const cl_SF& x)
+CL_INLINE2 const cl_SF CL_INLINE2_DECL(signum) (const cl_SF& x)
 {
-       if (minusp(x)) { return SF_minus1; } // x<0 -> -1.0
-       elif (zerop(x)) { return SF_0; } // x=0 -> 0.0
+       if (minusp_inline(x)) { return SF_minus1; } // x<0 -> -1.0
+       elif (zerop_inline(x)) { return SF_0; } // x=0 -> 0.0
        else { return SF_1; } // x>0 -> +1.0
 }
 
index b3abe09c104952310578e48932025f5d0c6a289e..c2f0475ebd8e4b77d4e0ec687aa00036f41c7d72 100644 (file)
@@ -15,8 +15,7 @@
 #include "cln/float.h"
 #include "cl_low.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_exponent.cc"
@@ -49,11 +48,11 @@ namespace cln {
 
 const cl_LF atanhx (const cl_LF& x)
 {
-       if (zerop(x))
+       if (zerop_inline(x))
                return x;
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(x);
+       var sintE e = float_exponent_inline(x);
        if (e <= (sintC)(-d)>>1) // e <= -d/2 <==> e <= -ceiling(d/2)
                return x; // ja -> x als Ergebnis
        if (actuallen >= 34) {
@@ -77,13 +76,13 @@ const cl_LF atanhx (const cl_LF& x)
                  // nächstes x nach der Formel x := x+sqrt(x^2 - 1) berechnen:
                  xx = sqrt(square(xx) + cl_float(-1,xx)) + xx;
                  k = k+1;
-               } until (float_exponent(xx) > e_limit);
+               } until (float_exponent_inline(xx) > e_limit);
                // Schleifenende mit Exponent(x) > 1+limit_slope*floor(sqrt(d)),
                // also x >= 2^(1+limit_slope*floor(sqrt(d))),
                // also 1/x <= 2^(-1-limit_slope*floor(sqrt(d))).
                // Nun kann die Potenzreihe auf 1/x angewandt werden.
                xx = recip(xx);
-               if (minusp(x))
+               if (minusp_inline(x))
                        xx = - xx; // Vorzeichen wieder rein
        }
        // Potenzreihe anwenden:
index f17fd499d5d83c4dc68239531fd9b2d00291e0da..5319a4f85fd16c378ed12a632eac6f59b1248e11 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_LF.h"
 #include "cln/integer.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_exponent.cc"
@@ -47,11 +46,11 @@ namespace cln {
 
 static const cl_LF atanx_naive (const cl_LF& x)
 {
-       if (zerop(x))
+       if (zerop_inline(x))
                return x;
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(x);
+       var sintE e = float_exponent_inline(x);
        if (e <= (sintC)(-d)>>1) // e <= -d/2 <==> e <= -ceiling(d/2)
                return x; // ja -> x als Ergebnis
        var uintL k = 0; // Rekursionszähler k:=0
@@ -71,13 +70,13 @@ static const cl_LF atanx_naive (const cl_LF& x)
                  // nächstes x nach der Formel x := x+sqrt(x^2 + 1) berechnen:
                  xx = sqrt(square(xx) + cl_float(1,xx)) + xx;
                  k = k+1;
-               } until (float_exponent(xx) > e_limit);
+               } until (float_exponent_inline(xx) > e_limit);
                // Schleifenende mit Exponent(x) > 1+limit_slope*floor(sqrt(d)),
                // also x >= 2^(1+limit_slope*floor(sqrt(d))),
                // also 1/x <= 2^(-1-limit_slope*floor(sqrt(d))).
                // Nun kann die Potenzreihe auf 1/x angewandt werden.
                xx = recip(xx);
-               if (minusp(x))
+               if (minusp_inline(x))
                        xx = - xx; // Vorzeichen wieder rein
        }
        // Potenzreihe anwenden:
@@ -184,13 +183,13 @@ static const cl_LF atanx_ratseries (const cl_LF& t)
        //   Set z := z + z' and x+i*y := (x+i*y)*exp(-i*z').
        var uintC len = TheLfloat(t)->len;
        var uintC d = intDsize*len;
-       if (zerop(t) || (float_exponent(t) <= (sintC)(-d)>>1))
+       if (zerop_inline(t) || (float_exponent_inline(t) <= (sintC)(-d)>>1))
                return t;
        var cl_LF x = recip(sqrt(cl_I_to_LF(1,len) + square(t)));
        var cl_LF y = t*x;
        var cl_LF z = cl_I_to_LF(0,len);
        loop {
-               if (zerop(y) || (float_exponent(y) <= (sintC)(-d)>>1))
+               if (zerop_inline(y) || (float_exponent_inline(y) <= (sintC)(-d)>>1))
                        break;
                var cl_idecoded_float y_ = integer_decode_float(y);
                // y = (-1)^sign * 2^exponent * mantissa
@@ -245,7 +244,7 @@ static const cl_LF atanx_ratseries (const cl_LF& t)
 // 1000   167     112      65
 // ==> ratseries faster for N >= 325.
 
-const cl_F atanx (const cl_F& x)
+const cl_F CL_FLATTEN atanx (const cl_F& x)
 {
        if (longfloatp(x)) {
                DeclareType(cl_LF,x);
index b2c084babaad1d45012dde933415aa263f8b15b9..a07e338e5edf65181cf1352790849acd0ed1a347 100644 (file)
@@ -15,8 +15,7 @@
 #include "cln/lfloat.h"
 #include "cl_LF.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_exponent.cc"
 
@@ -34,7 +33,7 @@ inline const cl_F_div_t cl_floor_ln2 (const cl_F& x)
 inline const cl_LF_div_t cl_floor_ln2 (const cl_LF& x)
 {
        // Bei 0<=x<1/2 kann man sofort q:=0 setzen.
-       if (!minusp(x) && (float_exponent(x) < 0))
+       if (!minusp_inline(x) && (float_exponent_inline(x) < 0))
                return cl_LF_div_t(0,x);
        else
                return floor2(x,The(cl_LF)(cl_ln2(x)));
index 9250faddb2bbcc2b8edf6cb7d9256d4e604891dc..19517cdc545721328680d096407bdc30c37aae2a 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_LF.h"
 #include "cln/integer.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_exponent.cc"
 
@@ -44,11 +43,11 @@ const cl_LF expx_naive (const cl_LF& x)
 {
 // Methode:
 // wie oben, mit adaptiver Genauigkeit während der Potenzreihen-Summation.
-       if (zerop(x))
+       if (zerop_inline(x))
                return cl_float(1,x);
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(x);
+       var sintE e = float_exponent_inline(x);
        if (e < -(sintC)d) // e < -d ?
                return cl_float(1,x); // ja -> 1.0 als Ergebnis
  {     Mutable(cl_LF,x);
index 6a64c6ca5e7bd4119c3e85f4ef0e3d0a40f9f17b..ffa178027dc87ff67ad44d2c8b716c77537b07f2 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_LF.h"
 #include "cln/integer.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_minusp.cc"
 #include "cl_LF_exponent.cc"
@@ -45,11 +44,11 @@ namespace cln {
 const cl_LF lnx_naive (const cl_LF& x)
 {
        var cl_LF y = x-cl_float(1,x);
-       if (zerop(y)) // y=0.0 -> y als Ergebnis
+       if (zerop_inline(y)) // y=0.0 -> y als Ergebnis
                return y;
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(y);
+       var sintE e = float_exponent_inline(y);
        if (e <= -(sintC)d) // e <= -d ?
                return y; // ja -> y als Ergebnis
  {     Mutable(cl_LF,x);
@@ -65,7 +64,7 @@ const cl_LF lnx_naive (const cl_LF& x)
                // e > -1-floor(sqrt(d)) -> muß |y| verkleinern.
                x = sqrt(x); // x := (sqrt x)
                y = x-cl_float(1,x); // y := (- x 1) und
-               e = float_exponent(y); // e neu berechnen
+               e = float_exponent_inline(y); // e neu berechnen
                k = k+1; // k:=k+1
        }
        if (0) {
index deaf415c9fb69f56cdaee18237bfe39c58011f91..820049f0dcbb5dc3856e4d12117669067ef5d0a6 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_LF.h"
 #include "cln/integer.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_exponent.cc"
 
@@ -112,11 +111,11 @@ const cl_LF sinhx_naive (const cl_LF& x)
 //  grob j=sqrt(2d) und damit k=sqrt(d).]
 // Aufwand: asymptotisch d^2.5 .
 
-       if (zerop(x))
+       if (zerop_inline(x))
                return x;
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(x);
+       var sintE e = float_exponent_inline(x);
        if (e <= (1-(sintC)d)>>1) // e <= (1-d)/2 <==> e <= -ceiling((d-1)/2) ?
                return square(x); // ja -> x^2 als Ergebnis
  {     Mutable(cl_LF,x);
index e2d3f693240f4942662a142bb40ead0b3fded5df..3f40c74f6c01bea726727be1a450cf25db191f1c 100644 (file)
@@ -16,8 +16,7 @@
 #include "cl_LF.h"
 #include "cln/integer.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_LF_zerop.cc"
 #include "cl_LF_exponent.cc"
 
@@ -121,11 +120,11 @@ const cl_LF sinx_naive (const cl_LF& x)
 //  grob j=sqrt(2d) und damit k=sqrt(d).]
 // Aufwand: asymptotisch d^2.5 .
 
-       if (zerop(x))
+       if (zerop_inline(x))
                return x;
        var uintC actuallen = TheLfloat(x)->len;
        var uintC d = float_digits(x);
-       var sintE e = float_exponent(x);
+       var sintE e = float_exponent_inline(x);
        if (e <= (-(sintC)d)>>1) // e <= (-d)/2 <==> e <= -ceiling(d/2) ?
                return square(x); // ja -> x^2 als Ergebnis
  {     Mutable(cl_LF,x);
index 9cc66a458c582c0da307cd532c2a51e7bcf30445..fb4c6c561c4f3253194a8dd3bdb2dc5b96c186c0 100644 (file)
@@ -11,8 +11,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_F tan (const cl_F& x)
+CL_INLINE const cl_F CL_INLINE_DECL(tan) (const cl_F& x)
 {
 // Methode:
 // (/ (sin x) (cos x))
index 0059984b8045b6af7dc4188fff2aca2b720c20c3..fe6a3b0e60d06086d128c0c786b02d48fd36029c 100644 (file)
@@ -11,8 +11,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_F tanh (const cl_F& x)
+CL_INLINE const cl_F CL_INLINE_DECL(tanh) (const cl_F& x)
 {
 // Methode:
 // (/ (sinh x) (cosh x))
index df2204ef99e04ddfad3a2b98f416351ad87de2f4..5cb054eac46601aee9f5a853807a0b0d4ab58f26 100644 (file)
 #include "cln/number.h"
 #include "cl_DS.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_I_from_NDS.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_I DS_to_I (const uintD* MSDptr, uintC len)
+CL_INLINE2 const cl_I CL_INLINE2_DECL(DS_to_I) (const uintD* MSDptr, uintC len)
 {
       // erst normalisieren.
       // Dabei evtl. MSDptr erhöhen und len erniedrigen:
@@ -39,7 +37,7 @@ const cl_I DS_to_I (const uintD* MSDptr, uintC len)
         }   }
       // Eventuell ist jetzt noch bei der DS 0 ausnahmsweise len=1,
       // aber NDS_to_I wird auch damit fertig.
-      return NDS_to_I(MSDptr,len);
+      return NDS_to_I_inline(MSDptr,len);
 }
 
 }  // namespace cln
index 05eca408b95c9007bef64b327b98fb7806751dd4..6a5abf45b875a5910465e9ff7739e82a07a71128 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_I NDS_to_I (const uintD* MSDptr, uintC len)
+CL_INLINE const cl_I CL_INLINE_DECL(NDS_to_I) (const uintD* MSDptr, uintC len)
 {
       // Mehr als bn_minlength Digits -> Bignum.
       // Weniger als bn_minlength Digits -> Fixnum.
index 349cb930f63f85b10f479dad38354900b1c0610c..07be62a3fd8d5a6d58f277974bacab8400ffb375 100644 (file)
 #include "cln/number.h"
 #include "cl_DS.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_I_from_NDS.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_I NUDS_to_I (uintD* MSDptr, uintC len)
+CL_INLINE2 const cl_I CL_INLINE2_DECL(NUDS_to_I) (uintD* MSDptr, uintC len)
 {
        if ((!(len==0)) && ((sintD)mspref(MSDptr,0) < 0))
                // Falls die Länge >0 und das Most significant Bit = 1 sind,
                // die Digit Sequence um ein Nulldigit erweitern:
                { lsprefnext(MSDptr) = 0; len++; }
-       return NDS_to_I(MSDptr,len);
+       return NDS_to_I_inline(MSDptr,len);
 }
 
 }  // namespace cln
index dcadfaf07ac3011639256b329c5fc2522d40edb8..35cf061e990ab257781337ac77a5b8513d12178c 100644 (file)
 #include "cln/number.h"
 #include "cl_DS.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_I_from_NDS.cc"
 
 namespace cln {
 
-MAYBE_INLINE2
-const cl_I UDS_to_I (uintD* MSDptr, uintC len)
+CL_INLINE2 const cl_I CL_INLINE2_DECL(UDS_to_I) (uintD* MSDptr, uintC len)
 {
        while ( (!(len==0)) && (mspref(MSDptr,0)==0) ) // solange len>0 und MSD = 0,
                { msshrink(MSDptr); len--; } // Nulldigit streichen
@@ -28,7 +26,7 @@ const cl_I UDS_to_I (uintD* MSDptr, uintC len)
                // Falls die Länge >0 und das Most significant Bit = 1 sind,
                // die Digit Sequence um ein Nulldigit erweitern:
                { lsprefnext(MSDptr) = 0; len++; }
-       return NDS_to_I(MSDptr,len);
+       return NDS_to_I_inline(MSDptr,len);
 }
 
 }  // namespace cln
index 113bcda59c2b0e8aff4bcbab0c94b472027e59d2..6d89ff60185aba8cd71737b491b60846fec73492 100644 (file)
@@ -14,7 +14,7 @@
 
 namespace cln {
 
-inline uint32 equal_hashcode (const cl_FN& x)
+static inline uint32 equal_hashcode (const cl_FN& x)
 {
        var cl_signean sign;
        var uintV x_ = FN_to_V(x); // x als intVsize-Bit-Zahl
@@ -39,7 +39,7 @@ inline uint32 equal_hashcode (const cl_FN& x)
        return equal_hashcode_low(msd,exp,sign);
 }
 
-inline uint32 equal_hashcode (const cl_BN& x)
+static inline uint32 equal_hashcode (const cl_BN& x)
 {
        var const uintD* MSDptr;
        var uintC len;
@@ -128,8 +128,7 @@ inline uint32 equal_hashcode (const cl_BN& x)
 #endif
 }
 
-MAYBE_INLINE
-uint32 equal_hashcode (const cl_I& x)
+CL_INLINE uint32 CL_INLINE_DECL(equal_hashcode) (const cl_I& x)
 {
        if (fixnump(x)) {
                DeclareType(cl_FN,x);
index bbd236a0b7feeae55ecded1b64c1f4cff8ca7b52..581bc1ad71775651613e3427a1c7c4857ec3f1c1 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_I signum (const cl_I& x)
+CL_INLINE const cl_I CL_INLINE_DECL(signum) (const cl_I& x)
 {
        if (minusp(x)) { return -1; } // x<0 -> -1
        elif (zerop(x)) { return 0; } // x=0 -> 0
index 416738a3e97c8dd2c0a8f58dde350f0d19f6d6c9..f7dc09a4dfa846b5bec150de62b41904343a2530 100644 (file)
@@ -13,7 +13,9 @@ CL_PROVIDE(cl_I_ring)
 
 #include "cln/integer.h"
 #include "cln/integer_io.h"
+#define zerop zerop_inline
 #include "cl_I.h"
+#undef zerop
 
 namespace cln {
 
@@ -34,10 +36,10 @@ static const _cl_ring_element I_zero (cl_heap_ring* R)
        return _cl_ring_element(R, (cl_I)0);
 }
 
-static bool I_zerop (cl_heap_ring* R, const _cl_ring_element& x)
+static bool CL_FLATTEN I_zerop (cl_heap_ring* R, const _cl_ring_element& x)
 {
        unused R;
-       return zerop(The(cl_I)(x));
+       return zerop_inline(The(cl_I)(x));
 }
 
 static const _cl_ring_element I_plus (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
index f7ed825a2b1c050c52721399af4ffc2881572612..4f9019da3c5968b5fe49a2a07ef40d3371ecfd18 100644 (file)
@@ -9,15 +9,15 @@
 
 // Implementation.
 
-#define minusp inline_minusp
+#define minusp minusp_inline
 #include "cl_RA.h"
 #undef minusp
 
 namespace cln {
 
-bool minusp (const cl_RA& x)
+bool CL_FLATTEN minusp (const cl_RA& x)
 {
-       return inline_minusp(x);
+       return minusp_inline(x);
 }
 
 }  // namespace cln
index 6ed21603bb6fb173553efa24b2b7d0848667ecbd..e3b8433046f56875b34d794d1171cd43605bfecc 100644 (file)
@@ -1,4 +1,4 @@
 # This file contains additional flags for the main Makefile.
 
 include $(srcdir)/rational/Makeflags
-SUBDIR_INCLUDES += 
+SUBDIR_INCLUDES += -I$(srcdir)/integer/misc
index 8e54c8520351b19a491d27fa66b79a1b42cfc7bd..1c481fb25f397b08f3a6ced1365d7f80e2805999 100644 (file)
 
 #include "cl_N.h"
 #include "cl_RA.h"
+#include "cl_inline.h"
+#include "cl_I_eqhashcode.cc"
 
 namespace cln {
 
-uint32 equal_hashcode (const cl_RA& r)
+CL_INLINE2 uint32 CL_INLINE2_DECL(equal_hashcode) (const cl_RA& r)
 {
        if (integerp(r)) {
                DeclareType(cl_I,r);
-               return equal_hashcode(r);
+               return equal_hashcode_inline(r);
        } else {
                // Making sure that a float and its rational equivalent have
                // the same hash code is tricky. This code depends on the fact
                // that the equal_hashcode_low macro is linear in `exp'.
                DeclareType(cl_RT,r);
-               return equal_hashcode(numerator(r))
-                      - equal_hashcode(denominator(r))
+               return equal_hashcode_inline(numerator(r))
+                      - equal_hashcode_inline(denominator(r))
                       + equal_hashcode_one;
        }
 }
index 40f53803389fec02445f070a1c13ed08004eb773..bde4c265bfb48a5c9d843e43f4b1005973f07251 100644 (file)
 #include "cl_RA.h"
 #include "cl_I.h"
 
+
 namespace cln {
 
-MAYBE_INLINE
-const cl_RA signum (const cl_RA& x)
+CL_INLINE const cl_RA CL_INLINE_DECL(signum) (const cl_RA& x)
 {
        if (minusp(x)) { return -1; } // x<0 -> -1
        elif (zerop(x)) { return 0; } // x=0 -> 0
index e7d33f3567a709fc922e09c241088cec31917087..f23035f974e690ef5f7826ecbcb49eafd3b465d7 100644 (file)
@@ -13,7 +13,9 @@ CL_PROVIDE(cl_RA_ring)
 
 #include "cln/rational.h"
 #include "cln/rational_io.h"
+#define zerop zerop_inline
 #include "cl_RA.h"
+#undef zerop
 
 namespace cln {
 
@@ -34,10 +36,10 @@ static const _cl_ring_element RA_zero (cl_heap_ring* R)
        return _cl_ring_element(R, (cl_RA)0);
 }
 
-static bool RA_zerop (cl_heap_ring* R, const _cl_ring_element& x)
+static bool CL_FLATTEN RA_zerop (cl_heap_ring* R, const _cl_ring_element& x)
 {
        unused R;
-       return zerop(The(cl_RA)(x));
+       return zerop_inline(The(cl_RA)(x));
 }
 
 static const _cl_ring_element RA_plus (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
index 791c2d990523cc3c73f76319b2ff692beab07d55..4b112eb1389d8025096ba00600ded97c80bc6ac0 100644 (file)
@@ -14,8 +14,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_R sqrt (const cl_RA& x)
+CL_INLINE const cl_R CL_INLINE_DECL(sqrt) (const cl_RA& x)
 {
        var cl_RA w;
        if (sqrtp(x,&w)) // auf Quadrat testen
index 0d98e4cd1d94ef9cb370b2b79ce62adedf875003..03bde6a250302abce6d35d752ece1e412c846ffa 100644 (file)
@@ -15,8 +15,7 @@
 
 namespace cln {
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_RA_sqrt.cc"
 
 const cl_R sqrt (const cl_R& x)
index 3c8e8524a4ecc8e78f9e4762cf45f87c8eff7fb1..63b502f91766ca854e70651c2b52160b262adea8 100644 (file)
@@ -13,8 +13,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_F cl_float (const cl_R& x)
+CL_INLINE const cl_F CL_INLINE_DECL(cl_float) (const cl_R& x)
 {
        if (rationalp(x)) {
                DeclareType(cl_RA,x);
index 610148646bea975c0a2ef43b93e17d532c9074a1..9fe30bfedd5688eb2c602c9f5f2cefdcd95ee8e1 100644 (file)
 // Implementation.
 
 #include "cl_R.h"
+#define minusp minusp_inline
 #include "cl_RA.h"
 #include "cl_I.h"
+#undef minusp
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_minusp.cc"
 #include "cl_FF_minusp.cc"
 #include "cl_DF_minusp.cc"
 
 namespace cln {
 
-bool minusp (const cl_R& x)
+bool CL_FLATTEN minusp (const cl_R& x)
 #if 0
 GEN_R_OP1_2(x, minusp, return)
 #else // fully inlined, faster
-GEN_R_OP1_7(x, minusp, return)
+GEN_R_OP1_7(x, minusp_inline, return)
 #endif
 
 }  // namespace cln
index c3a30aaea7c9d1b72a3f60ef41fcf58fd45bd5a0..c300b7e7934552604fe2d4471f72ac3a64a204f3 100644 (file)
@@ -9,13 +9,14 @@
 
 // Implementation.
 
+#define zerop zerop_inline
 #include "cl_R.h"
 #include "cl_RA.h"
 #include "cl_I.h"
+#undef zerop
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+#include "cl_inline.h"
 #include "cl_SF_zerop.cc"
 #include "cl_FF_zerop.cc"
 #include "cl_DF_zerop.cc"
 
 namespace cln {
 
-bool zerop (const cl_R& x)
+bool CL_FLATTEN zerop (const cl_R& x)
 #if 0
 GEN_R_OP1_2(x, zerop, return)
 #else // fully inlined, faster
-GEN_R_OP1_7(x, zerop, return)
+GEN_R_OP1_7(x, zerop_inline, return)
 #endif
 
 }  // namespace cln
index 243695a30eb1539ffef6bd638986d41f15fa62c9..24dba5b73f626d2cfe6b960b5d2f90727e37b5e4 100644 (file)
 #include "cl_I.h"
 #include "cl_F.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
-#include "cl_I_eqhashcode.cc"
+#include "cl_inline.h"
 #include "cl_SF_eqhashcode.cc"
 #include "cl_FF_eqhashcode.cc"
 #include "cl_DF_eqhashcode.cc"
 #include "cl_LF_eqhashcode.cc"
+#include "cl_inline2.h"
+#include "cl_RA_eqhashcode.cc"
 
 namespace cln {
 
-uint32 equal_hashcode (const cl_R& x)
-GEN_R_OP1_7(x, equal_hashcode, return)
+uint32 CL_FLATTEN equal_hashcode (const cl_R& x)
+GEN_R_OP1_7(x, equal_hashcode_inline, return)
 
 }  // namespace cln
index f151d6c886c6749773b1a40098825736868da4b0..eb753c3a477ac000c3d75ded63b07a1b61b234a2 100644 (file)
 
 #include "cl_R.h"
 
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* use inline versions of zerop */
+#include "cl_inline.h"
 #include "cl_I_signum.cc"
 #include "cl_RA_signum.cc"
-#undef MAYBE_INLINE2
-#define MAYBE_INLINE2 inline
+/* use inline versions of signum */
+#include "cl_inline2.h"
 #include "cl_SF_signum.cc"
 #include "cl_FF_signum.cc"
 #include "cl_DF_signum.cc"
@@ -24,7 +24,7 @@
 
 namespace cln {
 
-const cl_R signum (const cl_R& x)
-GEN_R_OP1_7(x, signum, return)
+const cl_R CL_FLATTEN signum (const cl_R& x)
+GEN_R_OP1_7(x, signum_inline, return)
 
 }  // namespace cln
index 14faf894a3ecf1e6c661aaca58fc7f03fa6ba12b..5a5f60620ded6cbfa46f77606de3aa3f632b63f7 100644 (file)
@@ -11,8 +11,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_R tan (const cl_R& x)
+CL_INLINE const cl_R CL_INLINE_DECL(tan) (const cl_R& x)
 {
 // Methode:
 // (/ (sin x) (cos x))
index 2b6e984a624ed712c3375ec48d3745bd5f761f59..4bca3b91049ca2a101d6c8e03f610aaec76544b8 100644 (file)
@@ -11,8 +11,7 @@
 
 namespace cln {
 
-MAYBE_INLINE
-const cl_R tanh (const cl_R& x)
+CL_INLINE const cl_R CL_INLINE_DECL(tanh) (const cl_R& x)
 {
 // Methode:
 // (/ (sinh x) (cosh x))