5 #include "CLHEP/Random/Random.h" 
    7 #include "CLHEP/Random/engineIDulong.h" 
   22   dsfmt_init_gen_rand (dsfmt, seed);
 
   30   dsfmt_init_by_array (dsfmt, seeds_nc, key_length);
 
   39 static const int MarkerLen = 64; 
 
   43 std::atomic<int> dSFMTEngine::numEngines = 0;
 
   47 dSFMTEngine::dSFMTEngine():m_dsfmt(0) 
 
   53   int curIndex = abs(
int(engineNum%
maxIndex));
 
   56   HepRandom::getTheTableSeeds( seedlist, curIndex );
 
   57   seedlist[0] = (seedlist[0])^
mask;
 
   81   int err=posix_memalign((
void**)&
m_dsfmt,16,
sizeof(dsfmt_t));
 
   83     std::stringstream errstring;
 
   84     errstring << 
"dSFMTEngine::init_dsfmt() : could not allocate memory for dsfmt data structure, error=" << 
err;
 
   85     throw std::runtime_error(errstring.str());
 
  130     const int numBuff=DSFMT_N;
 
  131     while (
i < numBuff && seeds[
i]) {
 
  145     const int numBuff=DSFMT_N;
 
  147     while (
i < numBuff && seeds[
i]) {
 
  162      for (
int i=0; 
i<DSFMT_N + 1; ++
i) 
outFile <<std::setprecision(20) 
 
  173      std::cerr << 
"  -- Engine state remains unchanged\n";
 
  179      for (
int i=0; i<DSFMT_N + 1; ++i) inFile >> 
m_dsfmt->status[
i].u32[0] >> 
m_dsfmt->status[
i].u32[1] 
 
  187    std::cout << 
"--------- dSFMT engine status ---------\n";
 
  188    int pr = std::cout.precision();
 
  189    std::cout.precision(20);
 
  190    std::cout << 
" Current index     = " << 
m_dsfmt->idx << 
"\n";
 
  191    std::cout << 
" Array status[] = \n";
 
  192    for (
int i=0; 
i<DSFMT_N + 1; ++
i) {
 
  193      std::cout << 
m_dsfmt->status[
i].u32[0] << 
" " << 
m_dsfmt->status[
i].u32[1] << 
" "  
  196    std::cout << 
"----------------------------------------" << std::endl;
 
  197    std::cout.precision(
pr);
 
  201   return (
float)flat();
 
  204 dSFMTEngine::operator 
unsigned int() {
 
  205   return dsfmt_genrand_uint32(m_dsfmt);
 
  210    char beginMarker[] = 
"dSFMTEngine-begin";
 
  211    char endMarker[]   = 
"dSFMTEngine-end";
 
  213    int pr = 
os.precision(20);
 
  214    os << 
" " << beginMarker << 
" ";
 
  216    for (
int i=0; 
i<DSFMT_N + 1; ++
i) {
 
  222    os << endMarker << 
"\n";
 
  228   std::vector<unsigned long> 
v;
 
  229   v.push_back (engineIDulong<dSFMTEngine>());
 
  231   for (
int i=0; 
i<DSFMT_N + 1; ++
i) {
 
  232      v.push_back(
static_cast<unsigned long>(
m_dsfmt->status[
i].u32[0]));
 
  233      v.push_back(
static_cast<unsigned long>(
m_dsfmt->status[
i].u32[1]));
 
  234      v.push_back(
static_cast<unsigned long>(
m_dsfmt->status[
i].u32[2]));
 
  235      v.push_back(
static_cast<unsigned long>(
m_dsfmt->status[
i].u32[3]));
 
  242   char beginMarker [MarkerLen];
 
  248   if (strcmp(beginMarker,
"dSFMTEngine-begin")) {
 
  249      is.clear(std::ios::badbit | is.rdstate());
 
  250      std::cerr << 
"\nInput stream mispositioned or" 
  251            << 
"\ndSFMTEngine state description missing or" 
  252            << 
"\nwrong engine type found." << std::endl;
 
  259   return "dSFMTEngine-begin"; 
 
  264   char endMarker   [MarkerLen];
 
  267   for (
int i=0; 
i<DSFMT_N + 1; ++
i) {
 
  277   if (strcmp(endMarker,
"dSFMTEngine-end")) {
 
  278      is.clear(std::ios::badbit | is.rdstate());
 
  279      std::cerr << 
"\ndSFMTEngine state description incomplete." 
  280            << 
"\nInput stream is probably mispositioned now." << std::endl;
 
  287   if ((
v[0] & 0xffffffffUL) != engineIDulong<dSFMTEngine>()) {
 
  289         "\ndSFMTEngine get:state vector has wrong ID word - state unchanged\n";
 
  298         "\ndSFMTEngine get:state vector has wrong length - state unchanged\n";
 
  303   for (
int i=0; 
i<DSFMT_N + 1; ++
i) {