Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cRandomCombo.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cRandomCombo_H
8 #define _INC_cRandomCombo_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "cRandomFloat.h"
14 
15 namespace GrayLib
16 {
18 
20  {
24  size_t m_nSizeBlock;
25  size_t m_nSizeCur;
26  };
27 
29  {
33  public:
34  typedef BYTE SOURCE_t;
35  static const SOURCE_t k_nMaxSources = 8;
37  cRandomComboSource m_source[k_nMaxSources];
38 #ifdef _MT
39  cThreadLockMutex m_Mutex;
40 #endif
41  public:
42  cRandomCombo() noexcept
43  : m_nSourceQty(0)
44  {}
45  virtual ~cRandomCombo()
46  {
47  }
48 
49  HRESULT AddRandomSource(IRandomNoise* pRandom, size_t nSizeMax);
51  };
52 
53  template <class _TYPE1, class _TYPE2>
54  class cRandomCombo2 : public cRandomFloat
55  {
61 
62  public:
63  _TYPE1 m_r1;
64  _TYPE2 m_r2;
65 
66  public:
67  cRandomCombo2(const void* pData, size_t iSize)
68  : m_r1(pData, iSize)
69  , m_r2(pData, iSize)
70  {
71  }
72  virtual ~cRandomCombo2()
73  {}
74 
75  virtual void InitSeed(const void* pData, size_t iSize) override
76  {
78  m_r1.InitSeed(pData, iSize);
79  m_r2.InitSeed(pData, iSize);
80  }
81 
82  virtual double get_RandDouble() override
83  {
84  double r = m_r1.get_RandDouble() + m_r2.get_RandDouble();
85  if (r >= 1.0)
86  r -= 1.0;
87  return r;
88  }
89 
90  virtual UINT GetRandUX(UINT nScale) override // get integer random number in desired interval
91  {
94  if (nScale <= 0)
95  return 0; // error
96  UINT i = (UINT)(nScale * get_RandDouble()); // truncate
97  if (i >= nScale)
98  i = nScale - 1;
99  return i;
100  }
101  };
102 }
103 
104 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cRandomCombo.h:55
virtual ~cRandomCombo2()
Definition: cRandomCombo.h:72
_TYPE2 m_r2
Definition: cRandomCombo.h:64
_TYPE1 m_r1
Definition: cRandomCombo.h:63
virtual void InitSeed(const void *pData, size_t iSize) override
Definition: cRandomCombo.h:75
virtual double get_RandDouble() override
the default random number generator.
Definition: cRandomCombo.h:82
cRandomCombo2(const void *pData, size_t iSize)
Definition: cRandomCombo.h:67
virtual UINT GetRandUX(UINT nScale) override
Definition: cRandomCombo.h:90
Definition: cRandomCombo.h:29
virtual ~cRandomCombo()
Definition: cRandomCombo.h:45
SOURCE_t m_nSourceQty
Definition: cRandomCombo.h:36
BYTE SOURCE_t
Definition: cRandomCombo.h:34
cRandomCombo() noexcept
Definition: cRandomCombo.h:42
UNITTEST2_PREDEF(cRandomCombo)
Definition: cRandomFloat.h:21
Definition: cThreadLock.h:252
Definition: cMesh.h:22
UNITTEST2_PREDEF(cQuadtree)
Definition: cRandomCombo.h:20
size_t m_nSizeCur
Current Amount received.
Definition: cRandomCombo.h:25
size_t m_nSizeBlock
Minimum level required before release for m_pRandom.
Definition: cRandomCombo.h:24
IRandomNoise * m_pRandom
The entropy source callback.
Definition: cRandomCombo.h:23
Definition: cRandom.h:19