source: Sophya/trunk/SophyaLib/BaseTools/randr48.h@ 3989

Last change on this file since 3989 was 3890, checked in by ansari, 15 years ago

suite correction bug SetSeed() ds ThSDR48RandGen (gestion PPF) + retag en V2_2, Reza 28/09/2010

File size: 3.0 KB
Line 
1#ifndef RANDR48_H_SEEN
2#define RANDR48_H_SEEN
3
4// Classes DR48RandGen
5// Generateur aleatoire utilisant l'aleatoire drand48()
6//
7// R. Ansari (C) UPS+LAL IN2P3/CNRS 2009
8// C. Magneville (C) DAPNIA/SPP CEA 2009
9
10
11#include "machdefs.h"
12#include "objfio.h"
13#include "ndatablock.h"
14#include "randinterf.h"
15
16
17namespace SOPHYA {
18
19// Implementation de RandomGeneratorInterface avec drand48()
20class DR48RandGen : public RandomGeneratorInterface {
21
22 public:
23 DR48RandGen();
24 DR48RandGen(long int seed);
25 virtual ~DR48RandGen();
26
27 virtual void SetSeed(long int seed);
28 virtual void SetSeed(uint_2 seed[3]);
29 virtual void GetSeed(uint_2 seed[3]);
30 virtual void AutoInit(int lp=0);
31 virtual void ShowRandom();
32
33 friend class ObjFileIO<DR48RandGen> ;
34
35 protected:
36 virtual r_8 Next();
37
38};
39
40
41//--------------------------------------------------------------------------------
42//--------------------------------------------------------------------------------
43//--------------------------------------------------------------------------------
44
45// Version thread-safe de DR48RandGen
46class ThSDR48RandGen : public DR48RandGen {
47
48 public:
49 ThSDR48RandGen(size_t n=1024,bool tsafe=true);
50 ThSDR48RandGen(ThSDR48RandGen const & rg);
51 virtual ~ThSDR48RandGen();
52
53 void SetBuffSize(size_t n);
54
55 virtual void SetSeed(long int seed);
56 virtual void SetSeed(uint_2 seed[3]);
57 virtual void GetSeed(uint_2 seed[3]);
58 virtual void AutoInit(int lp=0);
59 virtual void ShowRandom();
60
61 friend class ObjFileIO<ThSDR48RandGen> ;
62
63 protected:
64 // ---- protected data members
65 NDataBlock<r_8> rseq_;
66 size_t idx_;
67 bool fg_nothrsafe; // if true --> NOT thread-safe
68 // ---- protected methods
69 void GenSeq();
70 virtual r_8 Next();
71
72//! For PPF handler use
73 inline void GetSeed_P(uint_2 seed[3])
74 { return DR48RandGen::GetSeed(seed); }
75//! For PPF handler use
76 inline void SetSeed_P(uint_2 seed[3])
77 { return DR48RandGen::SetSeed(seed); }
78};
79
80// Classe pour la gestion de persistance PPF : ObjFileIO<ThSDR48RandGen>
81
82/*! Writes the random generator object state in the POutPersist stream \b os */
83inline POutPersist& operator << (POutPersist& os, ThSDR48RandGen & obj)
84{ ObjFileIO<ThSDR48RandGen> fio(&obj); fio.Write(os); return(os); }
85/*! Reads the random generator object state from the PInPersist stream \b is */
86inline PInPersist& operator >> (PInPersist& is, ThSDR48RandGen & obj)
87{ ObjFileIO<ThSDR48RandGen> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); }
88
89// Classe pour la gestion de persistance PPF : ObjFileIO<DR48RandGen>
90
91/*! Writes the random generator object state in the POutPersist stream \b os */
92inline POutPersist& operator << (POutPersist& os, DR48RandGen & obj)
93{ ObjFileIO<DR48RandGen> fio(&obj); fio.Write(os); return(os); }
94/*! Reads the random generator object state from the PInPersist stream \b is */
95inline PInPersist& operator >> (PInPersist& is, DR48RandGen & obj)
96{ ObjFileIO<DR48RandGen> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); }
97
98} /* namespace SOPHYA */
99
100#endif
Note: See TracBrowser for help on using the repository browser.