Candidate_v1.7.0
        stable
      
      
        
          | 
            Last change
 on this file since 5b8c49 was             3f9eba, checked in by Frederik Heber <heber@…>, 15 years ago           | 
        
        
          | 
             
New classes for random number generation. 
 
- we use boost::random as a basis. It implements a lot of pseudo-random engines
and various distributions. However, everything is templated and there are no
base classes to store prototypes of the instances in a map. We need these
such that we are able to offer the user at run-time every choice possible.
 - Hence, we need to encapsulate all engines, distributions and (engine,
distribution) tuples: RandomNumber..._Encapsulation classes.
 - each with an abstract base class as the interface: RandomNumber... classes.
 - RandomNumberGeneratorFactory is then a singleton that contains all the
Maps and tables:
- from string (user input is string) to enum (storing enum is more efficient
that a lengthy string)
 - from enum to instance (of the abstract class).
 
  - RandomNumberGeneratorFactory is a singleton to allow for global control of
what kind of numbers are generated, hence there are also two new Actions:
 - The user in the end only uses two classes: RandomNumberGeneratorFactory
and RandomNumberGenerator. The first only for obtaining a specific variant
of the latter and the latter to generate the numbers (operator() is passed
on to boost::variate_generator::operator()).
 - There is a unit test on the RandomNumberGeneratorFactory that checks some
of the table entries and whether one of the RandomNumberGenerator is
working (uniform_smallint so far).
 
 
Details: 
 
- As there are ~25 engines and ~15 distributions this makes an enormous amount
of possible combinations. To automatically construct these, we use some
stuff from boost::preprocessor in order to generate enums, tables and maps
automatically just from a sequence of the typenames.
 - we have be-friended the unit test a lot to allow for easier testing, e.g.
we need access to internal ..._type to test whether their type is correct.
 - cleanUp() purges the instance of RandomNumberGeneratorFactory.
 - in RandomNumber..._Encapsulation::name() functions are only used for the
unit tests.
 - this all resides in its own subfolder RandomNumbers. So far, it is completely
independent of everything else.
  
           | 
        
        
          
            
              - 
Property                 mode
 set to                 
100644
               
             
           | 
        
        
          | 
            File size:
            434 bytes
           | 
        
      
      
| Line |   | 
|---|
| 1 | /*
 | 
|---|
| 2 |  * SetRandomNumbersDistributionAction.hpp
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  *  Created on: Jan 01, 2011
 | 
|---|
| 5 |  *      Author: heber
 | 
|---|
| 6 |  */
 | 
|---|
| 7 | 
 | 
|---|
| 8 | #ifndef SETRANDOMNUMBERSDISTRIBUTIONACTION_HPP
 | 
|---|
| 9 | #define SETRANDOMNUMBERSDISTRIBUTIONACTION_HPP
 | 
|---|
| 10 | 
 | 
|---|
| 11 | // include config.h
 | 
|---|
| 12 | #ifdef HAVE_CONFIG_H
 | 
|---|
| 13 | #include <config.h>
 | 
|---|
| 14 | #endif
 | 
|---|
| 15 | 
 | 
|---|
| 16 | 
 | 
|---|
| 17 | #include "Actions/Action.hpp"
 | 
|---|
| 18 | 
 | 
|---|
| 19 | #include "SetRandomNumbersDistributionAction.def"
 | 
|---|
| 20 | #include "Action_impl_header.hpp"
 | 
|---|
| 21 | 
 | 
|---|
| 22 | #endif // SETRANDOMNUMBERSDISTRIBUTIONACTION_HPP
 | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.