• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/ECF/SimpleRandomizer.cpp

00001 #include "ECF_base.h"
00002 #include "SimpleRandomizer.h"
00003 #include <time.h>
00004 
00005 
00006 SimpleRandomizer::SimpleRandomizer(unsigned int seed)
00007 {
00008     if(seed == 0)
00009         srand((uint) time(NULL));
00010     else
00011         srand(seed);
00012 }
00013 
00014 
00015 int SimpleRandomizer::getRandomInteger(int p, int q) 
00016 {
00017     return p + (int)( (double)(q-p+1) * (rand() / (RAND_MAX + 1.0)));
00018 }
00019 
00020 
00021 int SimpleRandomizer::getRandomInteger(int size) 
00022 {
00023     return (int)( (double)(size) * (rand() / (RAND_MAX + 1.0)));
00024 }
00025 
00026 
00027 double SimpleRandomizer::getRandomDouble() 
00028 {
00029     return rand() / (double(RAND_MAX));
00030 }
00031 
00032 
00033 void SimpleRandomizer::registerParameters(StateP s) 
00034 {
00035     s->getRegistry()->registerEntry("randomizer.seed", (voidP) new uint(0), ECF::UINT);
00036 }
00037 
00038 
00039 bool SimpleRandomizer::initialize(StateP state)
00040 {
00041     uint seed = 0;
00042     if(state->getRegistry()->isModified("randomizer.seed")) {
00043         voidP sptr = state->getRegistry()->getEntry("randomizer.seed");
00044         seed = *((int*)sptr.get());
00045     }
00046 
00047     if(seed != 0)
00048         srand(seed);
00049     else
00050 #ifdef _MPI
00051         srand((uint) time(NULL) + state->getCommunicator()->getCommRank());
00052 #else
00053         srand((uint) time(NULL));
00054 #endif
00055     return true;
00056 }

Generated on Fri Jul 5 2013 09:34:23 for ECF by  doxygen 1.7.1