diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2006-06-09 06:28:22 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2006-06-09 06:28:22 +0000 |
commit | d20fa8832f0aeb94dfa627a846df1a641fa46f64 (patch) | |
tree | ae7f4e2f59555b8957c8e55e10c4caa87d5979d2 | |
parent | c135471f8a27226c2408d8a8402b1f85af650777 (diff) | |
download | cryptopp-d20fa8832f0aeb94dfa627a846df1a641fa46f64.tar.gz |
improve Integer initialization
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@222 57ff6487-cd31-0410-9ec3-f628ee90f5f0
-rw-r--r-- | integer.cpp | 15 | ||||
-rw-r--r-- | integer.h | 7 |
2 files changed, 17 insertions, 5 deletions
diff --git a/integer.cpp b/integer.cpp index 8a7767e..cc3dfa5 100644 --- a/integer.cpp +++ b/integer.cpp @@ -50,8 +50,6 @@ bool AssignIntToInteger(const std::type_info &valueType, void *pInteger, const v return true; } -static const char s_RunAtStartup = (g_pAssignIntToInteger = AssignIntToInteger, 0); - #ifdef SSE2_INTRINSICS_AVAILABLE template <class T> CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(size_type n, const void *) @@ -1047,8 +1045,6 @@ static void SetPentiumFunctionPointers() #endif } -static const char s_RunAtStartupSetPentiumFunctionPointers = (SetPentiumFunctionPointers(), 0); - void DisableSSE2() { s_sse2Enabled = false; @@ -2726,6 +2722,17 @@ void MultiplyByPower2Mod(word *R, const word *A, size_t k, const word *M, size_t // ****************************************************************** +InitializeInteger::InitializeInteger() +{ + if (!g_pAssignIntToInteger) + { +#ifdef CRYPTOPP_X86ASM_AVAILABLE + SetPentiumFunctionPointers(); +#endif + g_pAssignIntToInteger = AssignIntToInteger; + } +} + static const unsigned int RoundupSizeTable[] = {2, 2, 2, 4, 4, 8, 8, 8, 8}; static inline size_t RoundupSize(size_t n) @@ -67,12 +67,17 @@ NAMESPACE_BEGIN(CryptoPP) void CRYPTOPP_DLL CRYPTOPP_API DisableSSE2(); +struct InitializeInteger // used to initialize static variables +{ + InitializeInteger(); +}; + //! multiple precision integer and basic arithmetics /*! This class can represent positive and negative integers with absolute value less than (256**sizeof(word)) ** (256**sizeof(int)). \nosubgrouping */ -class CRYPTOPP_DLL Integer : public ASN1Object +class CRYPTOPP_DLL Integer : private InitializeInteger, public ASN1Object { public: //! \name ENUMS, EXCEPTIONS, and TYPEDEFS |