Wiselib
wiselib.testing/external_interface/pc/pc_rand.h
Go to the documentation of this file.
00001 // vim: set noexpandtab ts=4 sw=4:
00002 
00003 #ifndef PC_RAND_H
00004 #define PC_RAND_H
00005 
00006 #include "external_interface/pc/pc_os.h"
00007 #include <boost/random.hpp>
00008 
00009 namespace wiselib {
00010    
00011    template<typename OsModel_P>
00012    class PCRandModel {
00013       public:
00014          typedef OsModel_P OsModel;
00015          typedef uint32_t value_t;
00016          
00017          typedef PCRandModel<OsModel> self_type;
00018          typedef self_type* self_pointer_t;
00019          
00020          enum { RANDOM_MAX = 0xffffffff };
00021          
00022          enum States
00023          {
00024             READY = OsModel::READY,
00025             NO_VALUE = OsModel::NO_VALUE,
00026             INACTIVE = OsModel::INACTIVE
00027          };
00028          
00029          PCRandModel();
00030          PCRandModel(PCOs& os);
00031          PCRandModel(PCOs& os, value_t seed);
00032          void srand(value_t seed);
00033          value_t operator()();
00034          int state();
00035          
00036       private:
00037          boost::uniform_int<uint32_t> distribution_;
00038          boost::mt19937 generator_;
00039          boost::variate_generator<
00040             boost::mt19937&, boost::uniform_int<uint32_t>
00041          > die_;
00042    };
00043    
00044    template<typename OsModel_P>
00045    PCRandModel<OsModel_P>::
00046 	PCRandModel() :
00047       distribution_(0, RAND_MAX),
00048       generator_(),
00049       die_(generator_, distribution_)
00050    {
00051    }
00052    
00053    template<typename OsModel_P>
00054    PCRandModel<OsModel_P>::
00055 	PCRandModel(PCOs& os) :
00056       distribution_(0, RAND_MAX),
00057       generator_(),
00058       die_(generator_, distribution_)
00059    {
00060    }
00061    
00062    template<typename OsModel_P>
00063    PCRandModel<OsModel_P>::
00064 	PCRandModel(PCOs& os, value_t seed) :
00065       distribution_(0, RAND_MAX),
00066       generator_(seed),
00067       die_(generator_, distribution_)
00068    {
00069    }
00070    
00071    template<typename OsModel_P>
00072    void PCRandModel<OsModel_P>::
00073 	srand(value_t seed) {
00074       generator_.seed(seed);
00075    }
00076    
00077    template<typename OsModel_P>
00078    typename PCRandModel<OsModel_P>::value_t PCRandModel<OsModel_P>::
00079 	operator()() {
00080       return die_();
00081    }
00082    
00083    template<typename OsModel_P>
00084    int PCRandModel<OsModel_P>::
00085 	state() {
00086       return READY;
00087    }
00088    
00089 }; // ns wiselib
00090 
00091 #endif // PC_RAND_H
00092 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines