From 58de93cddb10a2c798219e0686319a562eac63f4 Mon Sep 17 00:00:00 2001 From: Alexei Sheplyakov Date: Thu, 21 Aug 2008 15:58:06 +0400 Subject: [PATCH] Remove CL_REQUIRE/CL_PROVIDE(cl_I_factorial) as it's not really necessary. factorial() is the only function which uses fakul_table[] array, so move it into that function in order to avoid possible static initialization order problems. --- include/cln/integer.h | 1 - src/integer/misc/combin/cl_I_factorial.cc | 11 ++++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/include/cln/integer.h b/include/cln/integer.h index 2aaf913..081caf2 100644 --- a/include/cln/integer.h +++ b/include/cln/integer.h @@ -391,7 +391,6 @@ extern const cl_I expt_pos (const cl_I& x, const cl_I& y); // Fakultät (! n), wo n Fixnum >=0 ist. Ergebnis Integer. extern const cl_I factorial (uintL n); -//CL_REQUIRE(cl_I_factorial) // Double factorial (!! n), with n Fixnum >=0. Returns integer. extern const cl_I doublefactorial (uintL n); diff --git a/src/integer/misc/combin/cl_I_factorial.cc b/src/integer/misc/combin/cl_I_factorial.cc index 520519a..4e7917c 100644 --- a/src/integer/misc/combin/cl_I_factorial.cc +++ b/src/integer/misc/combin/cl_I_factorial.cc @@ -3,8 +3,6 @@ // General includes. #include "cl_sysdep.h" -CL_PROVIDE(cl_I_factorial) - // Specification. #include "cln/integer.h" @@ -30,7 +28,9 @@ namespace cln { // vermeidet, daß oft große Zahlen mit ganz kleinen Zahlen multipliziert // werden. -static uintV const fakul_table [] = { +const cl_I factorial (uintL n) // assume n >= 0 small +{ + static uintV const fakul_table [] = { 1, 1UL, 1UL*2, @@ -91,10 +91,8 @@ static uintV const fakul_table [] = { #endif #endif #endif -}; + }; -const cl_I factorial (uintL n) // assume n >= 0 small -{ if (n < sizeof(fakul_table)/sizeof(cl_I)) { return UV_to_I(fakul_table[n]); } else @@ -124,4 +122,3 @@ const cl_I factorial (uintL n) // assume n >= 0 small } // namespace cln -CL_PROVIDE_END(cl_I_factorial)