Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r 8c64a0b2c4eb dep/SFMT/SFMT.h
- --- a/dep/SFMT/SFMT.h Sat Jan 19 13:19:11 2019 +0200
- +++ b/dep/SFMT/SFMT.h Sat Jan 19 13:39:17 2019 +0200
- @@ -148,9 +148,13 @@
- return z2;
- }
- -// Class for SFMT generator
- -class SFMTRand { // Encapsulate random number generator
- - friend class ACE_TSS<SFMTRand>;
- +namespace boost {
- + template <typename T> class thread_specific_ptr;
- +}
- +
- +// Class for SFMT generator
- +class SFMTRand { // Encapsulate random number generator
- + friend class boost::thread_specific_ptr<SFMTRand>;
- public:
- SFMTRand()
- @@ -241,6 +245,47 @@
- y = ((uint32_t*)state)[ix++];
- return y;
- }
- +
- + void* operator new(size_t size, std::nothrow_t const&)
- + {
- + return _mm_malloc(size, 16);
- + }
- +
- + void operator delete(void* ptr, std::nothrow_t const&)
- + {
- + _mm_free(ptr);
- + }
- +
- + void* operator new(size_t size)
- + {
- + return _mm_malloc(size, 16);
- + }
- +
- + void operator delete(void* ptr)
- + {
- + _mm_free(ptr);
- + }
- +
- + void* operator new[](size_t size, std::nothrow_t const&)
- + {
- + return _mm_malloc(size, 16);
- + }
- +
- + void operator delete[](void* ptr, std::nothrow_t const&)
- + {
- + _mm_free(ptr);
- + }
- +
- + void* operator new[](size_t size)
- + {
- + return _mm_malloc(size, 16);
- + }
- +
- + void operator delete[](void* ptr)
- + {
- + _mm_free(ptr);
- + }
- +
- private:
- void Init2() // Various initializations and period certification
- {
- @@ -305,46 +350,6 @@
- ix = 0;
- }
- - void* operator new(size_t size, std::nothrow_t const&)
- - {
- - return _mm_malloc(size, 16);
- - }
- -
- - void operator delete(void* ptr, std::nothrow_t const&)
- - {
- - _mm_free(ptr);
- - }
- -
- - void* operator new(size_t size)
- - {
- - return _mm_malloc(size, 16);
- - }
- -
- - void operator delete(void* ptr)
- - {
- - _mm_free(ptr);
- - }
- -
- - void* operator new[](size_t size, std::nothrow_t const&)
- - {
- - return _mm_malloc(size, 16);
- - }
- -
- - void operator delete[](void* ptr, std::nothrow_t const&)
- - {
- - _mm_free(ptr);
- - }
- -
- - void* operator new[](size_t size)
- - {
- - return _mm_malloc(size, 16);
- - }
- -
- - void operator delete[](void* ptr)
- - {
- - _mm_free(ptr);
- - }
- -
- uint32_t ix; // Index into state array
- uint32_t LastInterval; // Last interval length for IRandom
- uint32_t RLimit; // Rejection limit used by IRandom
- diff -r 8c64a0b2c4eb src/server/shared/Utilities/Util.cpp
- --- a/src/server/shared/Utilities/Util.cpp Sat Jan 19 13:19:11 2019 +0200
- +++ b/src/server/shared/Utilities/Util.cpp Sat Jan 19 13:39:17 2019 +0200
- @@ -21,40 +21,55 @@
- #include "Common.h"
- #include "utf8.h"
- #include "SFMT.h"
- -#include <ace/TSS_T.h>
- -#include <ace/INET_Addr.h>
- +#include <boost/thread/tss.hpp>
- +
- +static boost::thread_specific_ptr<SFMTRand> sfmtRand;
- +static SFMTEngine engine;
- -typedef ACE_TSS<SFMTRand> SFMTRandTSS;
- -static SFMTRandTSS sfmtRand;
- +static SFMTRand* GetRng()
- +{
- + SFMTRand* rand = sfmtRand.get();
- +
- + if (!rand)
- + {
- + rand = new SFMTRand();
- + sfmtRand.reset(rand);
- + }
- +
- + return rand;
- +}
- int32 irand(int32 min, int32 max)
- {
- - return int32(sfmtRand->IRandom(min, max));
- + ASSERT(max >= min);
- + return int32(GetRng()->IRandom(min, max));
- }
- uint32 urand(uint32 min, uint32 max)
- {
- - return sfmtRand->URandom(min, max);
- + ASSERT(max >= min);
- + return GetRng()->URandom(min, max);
- }
- float frand(float min, float max)
- {
- - return float(sfmtRand->Random() * (max - min) + min);
- + ASSERT(max >= min);
- + return float(GetRng()->Random() * (max - min) + min);
- }
- int32 rand32()
- {
- - return int32(sfmtRand->BRandom());
- + return GetRng()->BRandom();
- }
- -double rand_norm(void)
- +double rand_norm()
- {
- - return sfmtRand->Random();
- + return GetRng()->Random();
- }
- -double rand_chance(void)
- +double rand_chance()
- {
- - return sfmtRand->Random() * 100.0;
- + return GetRng()->Random() * 100.0;
- }
- SFMTEngine& SFMTEngine::Instance()
- diff -r 8c64a0b2c4eb src/server/shared/Utilities/Util.h
- --- a/src/server/shared/Utilities/Util.h Sat Jan 19 13:19:11 2019 +0200
- +++ b/src/server/shared/Utilities/Util.h Sat Jan 19 13:39:17 2019 +0200
- @@ -114,12 +114,12 @@
- /* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double. */
- - double rand_norm(void);
- + double rand_norm();
- /* Return a random double from 0.0 to 99.9999999999999. Floats support only 7 valid decimal digits.
- * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
- * With an FPU, there is usually no difference in performance between float and double. */
- - double rand_chance(void);
- + double rand_chance();
- /* Return true if a random roll fits in the specified chance (range 0-100). */
- inline bool roll_chance_f(float chance)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement