Functions
gprandom/main.cpp File Reference
#include <QGpCoreTools.h>
#include "gprandomVersion.h"
#include "gprandomInstallPath.h"

Functions

ApplicationHelphelp ()
int main (int argc, char **argv)
 PACKAGE_INFO (gprandom, GPRANDOM)

Function Documentation

int main ( int  argc,
char **  argv 
)

References QGpCoreTools::endl(), QGpCoreTools::flush(), help(), mode, RANDOM_STATE_SIZE, sOut(), QGpCoreTools::Random::state(), QGpCoreTools::Random::testDistribution(), QGpCoreTools::Random::testPeriod(), QGpCoreTools::tr(), and QGpCoreTools::Random::uniform().

{
  CoreApplication a(argc, argv, help);

  // Options
  QString cacheFile("random.cache");
  int seed=0;
  int generationCount=1;
  double min=0.0, max=1.0;
  enum Mode {Generate, TestPeriod, TestDistribution};
  Mode mode=Generate;
  double distributionMax=1.0;
  qint64 distributionReset=268435456;
  // Check arguments
  int i, j=1;
  for(i=1; i<argc; i++) {
    QByteArray arg=argv[i];
    if(arg[0]=='-') {
      if(arg=="-cache") {
        CoreApplication::checkOptionArg(i, argc, argv);
        cacheFile=argv[i];
      } else if(arg=="-seed") {
        CoreApplication::checkOptionArg(i, argc, argv);
        seed=atoi(argv[i]);
      } else if(arg=="-n") {
        CoreApplication::checkOptionArg(i, argc, argv);
        generationCount=atoi(argv[i] );
      } else if(arg=="-min") {
        CoreApplication::checkOptionArg(i, argc, argv);
        min=atof(argv[i] );
      } else if(arg=="-max") {
        CoreApplication::checkOptionArg(i, argc, argv);
        max=atof(argv[i] );
      } else if(arg=="-test-period") {
        mode=TestPeriod;
      } else if(arg=="-test-distribution") {
        mode=TestDistribution;
      } else if(arg=="-distribution-max") {
        CoreApplication::checkOptionArg(i, argc, argv);
        distributionMax=atof(argv[i]);
      } else if(arg=="-distribution-reset") {
        CoreApplication::checkOptionArg(i, argc, argv);
        distributionReset=atoi(argv[i]);
      } else {
        App::stream() << tr("gprandom: bad option %1, see -help").arg(argv[i]) << endl;
        return 2;
      }
    } else {
      argv[j++]=argv[i];
    }
  }
  if(j < argc) {
    argv[j]=0;
    argc=j;
  }


  switch (mode) {
  case TestPeriod: {
      Random engine(seed);
      engine.testPeriod();
      return 0;
    }
  case TestDistribution: {
      Random engine(seed);
      engine.testDistribution(distributionMax, distributionReset);
      return 0;
    }
  case Generate:
    Random * engine=0;
    // Restoring state or intializing
    QFile f(cacheFile);
    if(f.open(QIODevice::ReadOnly)) {
      QByteArray buf=f.readAll();
      if(buf.size()==RANDOM_STATE_SIZE) {
        engine=new Random(buf);
      } else {
        App::stream() << tr("gprandom: bad format for cache file %1, intializing a new random generator.").arg(cacheFile) << endl;
        engine=new Random(seed);
      }
      f.close();
    } else {
      engine=new Random(seed);
    }
    QTextStream sOut(stdout);
    for(int i=0; i<generationCount; i++) {
      sOut << engine->uniform(min, max) << "\n";
    }
    sOut << flush;
    // Saving state
    if(f.open(QIODevice::WriteOnly)) {
      f.write(engine->state());
      f.close();
      delete engine;
      return 0;
    } else {
      App::stream() << tr("gprandom: cannot save cache file %1.").arg(cacheFile) << endl;
      delete engine;
      return 2;
    }
    break;
  }
}
PACKAGE_INFO ( gprandom  ,
GPRANDOM   
)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines