Mercurial > hg > Game > Cerium
view TaskManager/kernel/ppe/Random.cc @ 498:bce667ff20b9 draft
double linked HTaskInfo/HTask
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 11 Oct 2009 11:46:41 +0900 |
parents | 4748fd7dcd89 |
children |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include "Random.h" #define HAS_SRANDOMDEV 1 /** * /dev/urandom, random から取得した値を seed として使う */ Random::Random(void) { reset(); } /** * 引数で seed を指定する */ Random::Random(unsigned int seed) { srandom(seed); } void Random::reset(void) { #if HAS_SRANDOMDEV FILE *fp; unsigned int seed; struct timeval tv; fp = fopen("/dev/urandom", "r"); if (!fp) fp = fopen("/dev/random", "r"); if (fp) { int res = fread(&seed, sizeof(unsigned int), 1, fp); if (res != sizeof(unsigned int)) { fclose(fp); fp = NULL; } } if (!fp) { gettimeofday(&tv, NULL); seed = (tv.tv_sec ^ tv.tv_usec); } else { fclose(fp); } srandom(seed); #else srandomdev(); #endif } /*! 1 から 2^(32-1) のランダムな数値を返す。 */ int Random::getData(void) { return random(); }