STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
seed_seq Class Reference

Public Types

typedef unsigned int result_type
 

Public Member Functions

 seed_seq ()
 
template<class _Ty >
 seed_seq (_XSTD initializer_list< _Ty > _Ilist)
 
template<class _InIt >
 seed_seq (_InIt _First, _InIt _Last)
 
template<class _RanIt >
void generate (_RanIt _First, _RanIt _Last) const
 
template<class _OutIt >
void param (_OutIt _Dest) const
 
size_t size () const
 
 seed_seq (const seed_seq &)=delete
 
void operator= (const seed_seq &)=delete
 

Private Member Functions

template<class _InIt , class _Ty >
void _Construct (_InIt _First, _InIt _Last, _Ty *)
 
template<class _RanIt , class _Ty >
void _Generate (_RanIt _First, _RanIt _Last, _Ty *) const
 
result_type _Xor27 (result_type _Val) const
 

Private Attributes

vector< result_type_Myvec
 

Member Typedef Documentation

typedef unsigned int seed_seq::result_type

Constructor & Destructor Documentation

seed_seq::seed_seq ( )
inline
207  { // default constructor
208  }
template<class _Ty >
seed_seq::seed_seq ( _XSTD initializer_list< _Ty >  _Ilist)
inline
212  { // construct from [_First, _Last)
213  _Construct(_Ilist.begin(), _Ilist.end(), (_Ty *)0);
214  }
void _Construct(_InIt _First, _InIt _Last, _Ty *)
Definition: random:245
template<class _InIt >
seed_seq::seed_seq ( _InIt  _First,
_InIt  _Last 
)
inline
218  { // construct from [_First, _Last)
219  _Construct(_First, _Last, _Val_type(_First));
220  }
iterator_traits< _Iter >::value_type * _Val_type(_Iter)
Definition: xutility:644
void _Construct(_InIt _First, _InIt _Last, _Ty *)
Definition: random:245
_FwdIt _Last
Definition: algorithm:1936
seed_seq::seed_seq ( const seed_seq )
delete

Member Function Documentation

template<class _InIt , class _Ty >
void seed_seq::_Construct ( _InIt  _First,
_InIt  _Last,
_Ty *   
)
inlineprivate
246  { // construct from [_First, _Last)
247  for (; _First != _Last; ++_First)
248  _Myvec.push_back((unsigned int)*_First);
249  }
void push_back(value_type &&_Val)
Definition: vector:864
vector< result_type > _Myvec
Definition: random:307
_FwdIt _Last
Definition: algorithm:1936
template<class _RanIt , class _Ty >
void seed_seq::_Generate ( _RanIt  _First,
_RanIt  _Last,
_Ty *   
) const
inlineprivate
254  { // generate randomized interval from seeds
255  const size_t _Nx = _Last - _First;
256 
257  if (0 < _Nx)
258  { // finite interval, fill it
259  const size_t _Sx = _Myvec.size();
260  const size_t _Tx = 623 <= _Nx ? 11 : 68 <= _Nx ? 7
261  : 39 <= _Nx ? 5 : 7 <= _Nx ? 3 : (_Nx - 1) / 2;
262  const size_t _Px = (_Nx - _Tx) / 2;
263  const size_t _Qx = _Px + _Tx;
264  const size_t _Mx = _Nx <= _Sx ? _Sx + 1 : _Nx;
265  size_t _Kx;
266 
267  _Ty _Mask = _Ty(1) << 31;
268  _Mask <<= 1; // build 32-bit mask safely
269  _Mask -= 1;
270 
271  for (_Kx = 0; _Kx < _Nx; ++_Kx)
272  _First[_Kx] = 0x8b8b8b8b;
273  for (_Kx = 0; _Kx < _Mx; ++_Kx)
274  { // scramble and add any vector contributions
275  result_type _R1 = 1664525 * _Xor27(_First[_Kx % _Nx]
276  ^ _First[(_Kx + _Px) % _Nx] ^ _First[(_Kx - 1) % _Nx]);
277  result_type _R2 = (result_type)((_R1 + (_Kx == 0 ? _Sx
278  : _Kx <= _Sx ? _Kx % _Nx + _Myvec[(_Kx - 1) % _Sx]
279  : _Kx % _Nx)) & _Mask);
280 
281  _First[(_Kx + _Px) % _Nx] =
282  (_First[(_Kx + _Px) % _Nx] + _R1) & _Mask;
283  _First[(_Kx + _Qx) % _Nx] =
284  (_First[(_Kx + _Qx) % _Nx] + _R2) & _Mask;
285  _First[_Kx % _Nx] = _R2;
286  }
287  for (; _Kx < _Mx + _Nx; ++_Kx)
288  { // rescramble
289  result_type _R3 = 1566083941 * _Xor27(_First[_Kx % _Nx]
290  + _First[(_Kx + _Px) % _Nx] + _First[(_Kx - 1) % _Nx]);
291  result_type _R4 = (result_type)((_R3 - _Kx % _Nx) & _Mask);
292 
293  _First[(_Kx + _Px) % _Nx] =
294  (_First[(_Kx + _Px) % _Nx] ^ _R3) & _Mask;
295  _First[(_Kx + _Qx) % _Nx] =
296  (_First[(_Kx + _Qx) % _Nx] ^ _R4) & _Mask;
297  _First[_Kx % _Nx] = _R4;
298  }
299  }
300  }
result_type _Xor27(result_type _Val) const
Definition: random:302
size_type size() const _NOEXCEPT
Definition: vector:1146
unsigned int result_type
Definition: random:204
_CRT_MANAGED_FP_DEPRECATE _In_ unsigned int _Mask
Definition: float.h:120
vector< result_type > _Myvec
Definition: random:307
_FwdIt _Last
Definition: algorithm:1936
result_type seed_seq::_Xor27 ( result_type  _Val) const
inlineprivate
303  { // shift and merge
304  return (_Val ^ (_Val >> 27));
305  }
_FwdIt const _Ty _Val
Definition: algorithm:1938
template<class _RanIt >
void seed_seq::generate ( _RanIt  _First,
_RanIt  _Last 
) const
inline
224  { // generate randomized interval from seeds
225  _Generate(_First, _Last, _Val_type(_First));
226  }
iterator_traits< _Iter >::value_type * _Val_type(_Iter)
Definition: xutility:644
void _Generate(_RanIt _First, _RanIt _Last, _Ty *) const
Definition: random:253
_FwdIt _Last
Definition: algorithm:1936
void seed_seq::operator= ( const seed_seq )
delete
template<class _OutIt >
void seed_seq::param ( _OutIt  _Dest) const
inline
230  { // copy seeds
231  copy(_Myvec.begin(), _Myvec.end(), _Dest);
232  }
_OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)
Definition: xutility:2072
iterator begin() _NOEXCEPT
Definition: vector:1023
iterator end() _NOEXCEPT
Definition: vector:1033
vector< result_type > _Myvec
Definition: random:307
size_t seed_seq::size ( ) const
inline
235  { // get size of seed
236  return (_Myvec.size());
237  }
size_type size() const _NOEXCEPT
Definition: vector:1146
vector< result_type > _Myvec
Definition: random:307

Member Data Documentation

vector<result_type> seed_seq::_Myvec
private

The documentation for this class was generated from the following file: