Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. diff -r 8c64a0b2c4eb dep/SFMT/SFMT.h
  2. --- a/dep/SFMT/SFMT.h Sat Jan 19 13:19:11 2019 +0200
  3. +++ b/dep/SFMT/SFMT.h Sat Jan 19 13:39:17 2019 +0200
  4. @@ -148,9 +148,13 @@
  5. return z2;
  6. }
  7.  
  8. -// Class for SFMT generator
  9. -class SFMTRand { // Encapsulate random number generator
  10. - friend class ACE_TSS<SFMTRand>;
  11. +namespace boost {
  12. + template <typename T> class thread_specific_ptr;
  13. +}
  14. +
  15. +// Class for SFMT generator
  16. +class SFMTRand { // Encapsulate random number generator
  17. + friend class boost::thread_specific_ptr<SFMTRand>;
  18.  
  19. public:
  20. SFMTRand()
  21. @@ -241,6 +245,47 @@
  22. y = ((uint32_t*)state)[ix++];
  23. return y;
  24. }
  25. +
  26. + void* operator new(size_t size, std::nothrow_t const&)
  27. + {
  28. + return _mm_malloc(size, 16);
  29. + }
  30. +
  31. + void operator delete(void* ptr, std::nothrow_t const&)
  32. + {
  33. + _mm_free(ptr);
  34. + }
  35. +
  36. + void* operator new(size_t size)
  37. + {
  38. + return _mm_malloc(size, 16);
  39. + }
  40. +
  41. + void operator delete(void* ptr)
  42. + {
  43. + _mm_free(ptr);
  44. + }
  45. +
  46. + void* operator new[](size_t size, std::nothrow_t const&)
  47. + {
  48. + return _mm_malloc(size, 16);
  49. + }
  50. +
  51. + void operator delete[](void* ptr, std::nothrow_t const&)
  52. + {
  53. + _mm_free(ptr);
  54. + }
  55. +
  56. + void* operator new[](size_t size)
  57. + {
  58. + return _mm_malloc(size, 16);
  59. + }
  60. +
  61. + void operator delete[](void* ptr)
  62. + {
  63. + _mm_free(ptr);
  64. + }
  65. +
  66. private:
  67. void Init2() // Various initializations and period certification
  68. {
  69. @@ -305,46 +350,6 @@
  70. ix = 0;
  71. }
  72.  
  73. - void* operator new(size_t size, std::nothrow_t const&)
  74. - {
  75. - return _mm_malloc(size, 16);
  76. - }
  77. -
  78. - void operator delete(void* ptr, std::nothrow_t const&)
  79. - {
  80. - _mm_free(ptr);
  81. - }
  82. -
  83. - void* operator new(size_t size)
  84. - {
  85. - return _mm_malloc(size, 16);
  86. - }
  87. -
  88. - void operator delete(void* ptr)
  89. - {
  90. - _mm_free(ptr);
  91. - }
  92. -
  93. - void* operator new[](size_t size, std::nothrow_t const&)
  94. - {
  95. - return _mm_malloc(size, 16);
  96. - }
  97. -
  98. - void operator delete[](void* ptr, std::nothrow_t const&)
  99. - {
  100. - _mm_free(ptr);
  101. - }
  102. -
  103. - void* operator new[](size_t size)
  104. - {
  105. - return _mm_malloc(size, 16);
  106. - }
  107. -
  108. - void operator delete[](void* ptr)
  109. - {
  110. - _mm_free(ptr);
  111. - }
  112. -
  113. uint32_t ix; // Index into state array
  114. uint32_t LastInterval; // Last interval length for IRandom
  115. uint32_t RLimit; // Rejection limit used by IRandom
  116. diff -r 8c64a0b2c4eb src/server/shared/Utilities/Util.cpp
  117. --- a/src/server/shared/Utilities/Util.cpp Sat Jan 19 13:19:11 2019 +0200
  118. +++ b/src/server/shared/Utilities/Util.cpp Sat Jan 19 13:39:17 2019 +0200
  119. @@ -21,40 +21,55 @@
  120. #include "Common.h"
  121. #include "utf8.h"
  122. #include "SFMT.h"
  123. -#include <ace/TSS_T.h>
  124. -#include <ace/INET_Addr.h>
  125. +#include <boost/thread/tss.hpp>
  126. +
  127. +static boost::thread_specific_ptr<SFMTRand> sfmtRand;
  128. +static SFMTEngine engine;
  129.  
  130. -typedef ACE_TSS<SFMTRand> SFMTRandTSS;
  131. -static SFMTRandTSS sfmtRand;
  132. +static SFMTRand* GetRng()
  133. +{
  134. + SFMTRand* rand = sfmtRand.get();
  135. +
  136. + if (!rand)
  137. + {
  138. + rand = new SFMTRand();
  139. + sfmtRand.reset(rand);
  140. + }
  141. +
  142. + return rand;
  143. +}
  144.  
  145. int32 irand(int32 min, int32 max)
  146. {
  147. - return int32(sfmtRand->IRandom(min, max));
  148. + ASSERT(max >= min);
  149. + return int32(GetRng()->IRandom(min, max));
  150. }
  151.  
  152. uint32 urand(uint32 min, uint32 max)
  153. {
  154. - return sfmtRand->URandom(min, max);
  155. + ASSERT(max >= min);
  156. + return GetRng()->URandom(min, max);
  157. }
  158.  
  159. float frand(float min, float max)
  160. {
  161. - return float(sfmtRand->Random() * (max - min) + min);
  162. + ASSERT(max >= min);
  163. + return float(GetRng()->Random() * (max - min) + min);
  164. }
  165.  
  166. int32 rand32()
  167. {
  168. - return int32(sfmtRand->BRandom());
  169. + return GetRng()->BRandom();
  170. }
  171.  
  172. -double rand_norm(void)
  173. +double rand_norm()
  174. {
  175. - return sfmtRand->Random();
  176. + return GetRng()->Random();
  177. }
  178.  
  179. -double rand_chance(void)
  180. +double rand_chance()
  181. {
  182. - return sfmtRand->Random() * 100.0;
  183. + return GetRng()->Random() * 100.0;
  184. }
  185.  
  186. SFMTEngine& SFMTEngine::Instance()
  187. diff -r 8c64a0b2c4eb src/server/shared/Utilities/Util.h
  188. --- a/src/server/shared/Utilities/Util.h Sat Jan 19 13:19:11 2019 +0200
  189. +++ b/src/server/shared/Utilities/Util.h Sat Jan 19 13:39:17 2019 +0200
  190. @@ -114,12 +114,12 @@
  191. /* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
  192. * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
  193. * With an FPU, there is usually no difference in performance between float and double. */
  194. - double rand_norm(void);
  195. + double rand_norm();
  196.  
  197. /* Return a random double from 0.0 to 99.9999999999999. Floats support only 7 valid decimal digits.
  198. * A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
  199. * With an FPU, there is usually no difference in performance between float and double. */
  200. - double rand_chance(void);
  201. + double rand_chance();
  202.  
  203. /* Return true if a random roll fits in the specified chance (range 0-100). */
  204. inline bool roll_chance_f(float chance)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement