MCKL
Monte Carlo Kernel Library
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
mckl::CounterEngine< ResultType, Generator > Class Template Reference

Counter based RNG engine. More...

#include <mckl/random/counter.hpp>

Public Types

using ctr_type = typename generator_type::ctr_type
 
using generator_type = Generator
 
using key_type = typename generator_type::key_type
 
using result_type = ResultType
 
using skip_type = typename ctr_type::value_type
 

Public Member Functions

 CounterEngine (result_type s=1)
 
template<typename SeedSeq >
 CounterEngine (SeedSeq &seq, std::enable_if_t< is_seed_seq< SeedSeq >::value > *=nullptr)
 
 CounterEngine (const key_type &k)
 
ctr_type ctr () const
 
void ctr (const ctr_type &c)
 
std::size_t discard ()
 Discard the result. More...
 
void discard (skip_type nskip)
 
generator_typegenerator ()
 
const generator_typegenerator () const
 
key_type key () const
 
void key (const key_type &k)
 
result_type operator() ()
 
void operator() (std::size_t n, result_type *r)
 
void seed (result_type s)
 
template<typename SeedSeq >
void seed (SeedSeq &seq, std::enable_if_t< is_seed_seq< SeedSeq >::value > *=nullptr)
 
void seed (const key_type &key)
 

Static Public Member Functions

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

Friends

bool operator!= (const CounterEngine< ResultType, Generator > &eng1, const CounterEngine< ResultType, Generator > &eng2)
 
template<typename CharT , typename Traits >
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &os, const CounterEngine< ResultType, Generator > &eng)
 
bool operator== (const CounterEngine< ResultType, Generator > &eng1, const CounterEngine< ResultType, Generator > &eng2)
 
template<typename CharT , typename Traits >
std::basic_istream< CharT, Traits > & operator>> (std::basic_istream< CharT, Traits > &is, CounterEngine< ResultType, Generator > &eng)
 

Detailed Description

template<typename ResultType, typename Generator>
class mckl::CounterEngine< ResultType, Generator >

Counter based RNG engine.

Template Parameters
ResultTypeThe ouptut integer type of the counter-based RNG engine
GeneratorThe generator that transfer counter and key to a result block
  • Requirement
    ctr_type; /* counter type */
    key_type; /* key type */
    static constexpr std::size_t size(); /* Size of the result block in byte */
    void reset(const key_type &key); /* reset generator key */
    /* Increment counter once and generate one result block */
    /* Increment counter n times and generate n result blocks */
    void operator()(ctr_type &ctr, std::size_t n, result_type *r);
  • Restrictions: size() % sizeof(ResultType) == 0

Definition at line 62 of file counter.hpp.

Member Typedef Documentation

◆ ctr_type

template<typename ResultType, typename Generator>
using mckl::CounterEngine< ResultType, Generator >::ctr_type = typename generator_type::ctr_type

Definition at line 75 of file counter.hpp.

◆ generator_type

template<typename ResultType, typename Generator>
using mckl::CounterEngine< ResultType, Generator >::generator_type = Generator

Definition at line 74 of file counter.hpp.

◆ key_type

template<typename ResultType, typename Generator>
using mckl::CounterEngine< ResultType, Generator >::key_type = typename generator_type::key_type

Definition at line 76 of file counter.hpp.

◆ result_type

template<typename ResultType, typename Generator>
using mckl::CounterEngine< ResultType, Generator >::result_type = ResultType

Definition at line 73 of file counter.hpp.

◆ skip_type

template<typename ResultType, typename Generator>
using mckl::CounterEngine< ResultType, Generator >::skip_type = typename ctr_type::value_type

Definition at line 77 of file counter.hpp.

Constructor & Destructor Documentation

◆ CounterEngine() [1/3]

template<typename ResultType, typename Generator>
mckl::CounterEngine< ResultType, Generator >::CounterEngine ( result_type  s = 1)
inlineexplicit

Definition at line 85 of file counter.hpp.

◆ CounterEngine() [2/3]

template<typename ResultType, typename Generator>
template<typename SeedSeq >
mckl::CounterEngine< ResultType, Generator >::CounterEngine ( SeedSeq &  seq,
std::enable_if_t< is_seed_seq< SeedSeq >::value > *  = nullptr 
)
inlineexplicit

Definition at line 88 of file counter.hpp.

◆ CounterEngine() [3/3]

template<typename ResultType, typename Generator>
mckl::CounterEngine< ResultType, Generator >::CounterEngine ( const key_type k)
inlineexplicit

Definition at line 95 of file counter.hpp.

Member Function Documentation

◆ ctr() [1/2]

template<typename ResultType, typename Generator>
ctr_type mckl::CounterEngine< ResultType, Generator >::ctr ( ) const
inline

Definition at line 118 of file counter.hpp.

◆ ctr() [2/2]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::ctr ( const ctr_type c)
inline

Definition at line 122 of file counter.hpp.

◆ discard() [1/2]

template<typename ResultType, typename Generator>
std::size_t mckl::CounterEngine< ResultType, Generator >::discard ( )
inline

Discard the result.

Returns
The number of results discarded

Definition at line 170 of file counter.hpp.

◆ discard() [2/2]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::discard ( skip_type  nskip)
inline

Definition at line 178 of file counter.hpp.

◆ generator() [1/2]

template<typename ResultType, typename Generator>
generator_type& mckl::CounterEngine< ResultType, Generator >::generator ( )
inline

Definition at line 128 of file counter.hpp.

◆ generator() [2/2]

template<typename ResultType, typename Generator>
const generator_type& mckl::CounterEngine< ResultType, Generator >::generator ( ) const
inline

Definition at line 130 of file counter.hpp.

◆ key() [1/2]

template<typename ResultType, typename Generator>
key_type mckl::CounterEngine< ResultType, Generator >::key ( ) const
inline

Definition at line 116 of file counter.hpp.

◆ key() [2/2]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::key ( const key_type k)
inline

Definition at line 120 of file counter.hpp.

◆ max()

template<typename ResultType, typename Generator>
static constexpr result_type mckl::CounterEngine< ResultType, Generator >::max ( )
inlinestatic

Definition at line 206 of file counter.hpp.

◆ min()

template<typename ResultType, typename Generator>
static constexpr result_type mckl::CounterEngine< ResultType, Generator >::min ( )
inlinestatic

Definition at line 201 of file counter.hpp.

◆ operator()() [1/2]

template<typename ResultType, typename Generator>
result_type mckl::CounterEngine< ResultType, Generator >::operator() ( )
inline

Definition at line 132 of file counter.hpp.

◆ operator()() [2/2]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::operator() ( std::size_t  n,
result_type r 
)
inline

Definition at line 142 of file counter.hpp.

◆ seed() [1/3]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::seed ( result_type  s)
inline

Definition at line 97 of file counter.hpp.

◆ seed() [2/3]

template<typename ResultType, typename Generator>
template<typename SeedSeq >
void mckl::CounterEngine< ResultType, Generator >::seed ( SeedSeq &  seq,
std::enable_if_t< is_seed_seq< SeedSeq >::value > *  = nullptr 
)
inline

Definition at line 106 of file counter.hpp.

◆ seed() [3/3]

template<typename ResultType, typename Generator>
void mckl::CounterEngine< ResultType, Generator >::seed ( const key_type key)
inline

Definition at line 114 of file counter.hpp.

Friends And Related Function Documentation

◆ operator!=

template<typename ResultType, typename Generator>
bool operator!= ( const CounterEngine< ResultType, Generator > &  eng1,
const CounterEngine< ResultType, Generator > &  eng2 
)
friend

Definition at line 229 of file counter.hpp.

◆ operator<<

template<typename ResultType, typename Generator>
template<typename CharT , typename Traits >
std::basic_ostream<CharT, Traits>& operator<< ( std::basic_ostream< CharT, Traits > &  os,
const CounterEngine< ResultType, Generator > &  eng 
)
friend

Definition at line 236 of file counter.hpp.

◆ operator==

template<typename ResultType, typename Generator>
bool operator== ( const CounterEngine< ResultType, Generator > &  eng1,
const CounterEngine< ResultType, Generator > &  eng2 
)
friend

Definition at line 211 of file counter.hpp.

◆ operator>>

template<typename ResultType, typename Generator>
template<typename CharT , typename Traits >
std::basic_istream<CharT, Traits>& operator>> ( std::basic_istream< CharT, Traits > &  is,
CounterEngine< ResultType, Generator > &  eng 
)
friend

Definition at line 253 of file counter.hpp.