STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
shuffle_order_engine< _Engine, _Kx > Class Template Reference

Public Types

typedef shuffle_order_engine< _Engine, _Kx > _Myt
 
typedef _Engine base_type
 
typedef _Engine::result_type result_type
 

Public Member Functions

 shuffle_order_engine ()
 
 shuffle_order_engine (const _Engine &_Ex)
 
 shuffle_order_engine (_Engine &&_Ex)
 
 shuffle_order_engine (result_type _X0)
 
template<class _Seed_seq , class = typename _Enable_if_seed_seq<_Seed_seq, _Myt, _Engine>::type>
 shuffle_order_engine (_Seed_seq &_Seq)
 
void seed ()
 
void seed (result_type _X0)
 
template<class _Seed_seq , class = typename _Enable_if_seed_seq<_Seed_seq, _Myt>::type>
void seed (_Seed_seq &_Seq)
 
const _Engine & base () const _NOEXCEPT
 
result_type operator() ()
 
void discard (unsigned long long _Nskip)
 
template<class _Elem , class _Traits >
basic_istream< _Elem, _Traits > & _Read (basic_istream< _Elem, _Traits > &_Istr)
 
template<class _Elem , class _Traits >
basic_ostream< _Elem, _Traits > & _Write (basic_ostream< _Elem, _Traits > &_Ostr) const
 

Static Public Member Functions

static constexpr result_type() min ()
 
static constexpr result_type() max ()
 

Static Public Attributes

static constexpr size_t table_size = _Kx
 

Private Member Functions

void _Init ()
 

Private Attributes

_Engine _Eng
 
result_type _Arr [_Kx]
 
result_type _Yx
 
double _Scale
 

Member Typedef Documentation

template<class _Engine, size_t _Kx>
typedef shuffle_order_engine<_Engine, _Kx> shuffle_order_engine< _Engine, _Kx >::_Myt
template<class _Engine, size_t _Kx>
typedef _Engine shuffle_order_engine< _Engine, _Kx >::base_type
template<class _Engine, size_t _Kx>
typedef _Engine::result_type shuffle_order_engine< _Engine, _Kx >::result_type

Constructor & Destructor Documentation

template<class _Engine, size_t _Kx>
shuffle_order_engine< _Engine, _Kx >::shuffle_order_engine ( )
inline
2060  { // construct
2061  _Init();
2062  }
void _Init()
Definition: random:2163
template<class _Engine, size_t _Kx>
shuffle_order_engine< _Engine, _Kx >::shuffle_order_engine ( const _Engine &  _Ex)
inlineexplicit
2065  : _Eng(_Ex)
2066  { // construct with engine initializer _Ex
2067  _Init();
2068  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
shuffle_order_engine< _Engine, _Kx >::shuffle_order_engine ( _Engine &&  _Ex)
inlineexplicit
2071  : _Eng(_STD forward<_Engine>(_Ex))
2072  { // construct with engine initializer _Ex
2073  _Init();
2074  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
shuffle_order_engine< _Engine, _Kx >::shuffle_order_engine ( result_type  _X0)
inlineexplicit
2077  : _Eng(_X0)
2078  { // construct from specified seed value
2079  _Init();
2080  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
template<class _Seed_seq , class = typename _Enable_if_seed_seq<_Seed_seq, _Myt, _Engine>::type>
shuffle_order_engine< _Engine, _Kx >::shuffle_order_engine ( _Seed_seq &  _Seq)
inlineexplicit
2085  : _Eng(_Seq)
2086  { // construct from seed sequence
2087  _Init();
2088  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172

Member Function Documentation

template<class _Engine, size_t _Kx>
void shuffle_order_engine< _Engine, _Kx >::_Init ( )
inlineprivate
2164  { // compute values for operator()
2165  for (size_t _Idx = 0; _Idx < _Kx; ++_Idx)
2166  _Arr[_Idx] = _Eng();
2167  _Yx = _Eng();
2168  _Scale = (double)_Kx
2169  / ((double)(_Eng.max)() - (double)(_Eng.min)() + 1.0);
2170  }
double _Scale
Definition: random:2175
result_type _Arr[_Kx]
Definition: random:2173
result_type _Yx
Definition: random:2174
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
template<class _Elem , class _Traits >
basic_istream<_Elem, _Traits>& shuffle_order_engine< _Engine, _Kx >::_Read ( basic_istream< _Elem, _Traits > &  _Istr)
inline
2144  { // read state from _Istr
2145  _Istr >> _Eng;
2146  for (size_t _Idx = 0; _Idx < _Kx; ++_Idx)
2147  _Istr >> _Arr[_Idx];
2148  return (_Istr >> _Yx);
2149  }
result_type _Arr[_Kx]
Definition: random:2173
result_type _Yx
Definition: random:2174
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
template<class _Elem , class _Traits >
basic_ostream<_Elem, _Traits>& shuffle_order_engine< _Engine, _Kx >::_Write ( basic_ostream< _Elem, _Traits > &  _Ostr) const
inline
2155  { // write state to _Ostr
2156  _Ostr << _Eng;
2157  for (size_t _Idx = 0; _Idx < _Kx; ++_Idx)
2158  _Ostr << ' ' << _Arr[_Idx];
2159  return (_Ostr << ' ' << _Yx);
2160  }
result_type _Arr[_Kx]
Definition: random:2173
result_type _Yx
Definition: random:2174
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
const _Engine& shuffle_order_engine< _Engine, _Kx >::base ( ) const
inline
2111  { // return const reference to engine
2112  return (_Eng);
2113  }
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
void shuffle_order_engine< _Engine, _Kx >::discard ( unsigned long long  _Nskip)
inline
2135  { // discard _Nskip elements
2136  for (; 0 < _Nskip; --_Nskip)
2137  (*this)();
2138  }
template<class _Engine, size_t _Kx>
static constexpr result_type() shuffle_order_engine< _Engine, _Kx >::max ( )
inlinestatic
2121  { // return maximum possible generated value
2122  return ((_Engine::max)());
2123  }
#define max(a,b)
Definition: minmax.h:14
template<class _Engine, size_t _Kx>
static constexpr result_type() shuffle_order_engine< _Engine, _Kx >::min ( )
inlinestatic
2116  { // return minimum possible generated value
2117  return ((_Engine::min)());
2118  }
#define min(a, b)
Definition: minmax.h:18
template<class _Engine, size_t _Kx>
result_type shuffle_order_engine< _Engine, _Kx >::operator() ( )
inline
2126  { // return next value
2127  size_t _Idx = (size_t)((double)(_Yx - (_Eng.min)()) * _Scale);
2128 
2129  _Yx = _Arr[_Idx];
2130  _Arr[_Idx] = _Eng();
2131  return (_Yx);
2132  }
unsigned int size_t
Definition: sourceannotations.h:19
double _Scale
Definition: random:2175
result_type _Arr[_Kx]
Definition: random:2173
result_type _Yx
Definition: random:2174
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
void shuffle_order_engine< _Engine, _Kx >::seed ( )
inline
2091  { // seed engine from default value
2092  _Eng.seed();
2093  _Init();
2094  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
void shuffle_order_engine< _Engine, _Kx >::seed ( result_type  _X0)
inline
2097  { // seed engine from specified value
2098  _Eng.seed(_X0);
2099  _Init();
2100  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172
template<class _Engine, size_t _Kx>
template<class _Seed_seq , class = typename _Enable_if_seed_seq<_Seed_seq, _Myt>::type>
void shuffle_order_engine< _Engine, _Kx >::seed ( _Seed_seq &  _Seq)
inline
2105  { // seed engine from seed sequence
2106  _Eng.seed(_Seq);
2107  _Init();
2108  }
void _Init()
Definition: random:2163
_Engine _Eng
Definition: random:2172

Member Data Documentation

template<class _Engine, size_t _Kx>
result_type shuffle_order_engine< _Engine, _Kx >::_Arr[_Kx]
private
template<class _Engine, size_t _Kx>
_Engine shuffle_order_engine< _Engine, _Kx >::_Eng
private
template<class _Engine, size_t _Kx>
double shuffle_order_engine< _Engine, _Kx >::_Scale
private
template<class _Engine, size_t _Kx>
result_type shuffle_order_engine< _Engine, _Kx >::_Yx
private
template<class _Engine, size_t _Kx>
constexpr size_t shuffle_order_engine< _Engine, _Kx >::table_size = _Kx
static

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