Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandBit.h
Go to the documentation of this file.
1 // $Id:$
2 // -*- C++ -*-
3 //
4 // -----------------------------------------------------------------------
5 // HEP Random
6 // --- RandBit ---
7 // class header file
8 // -----------------------------------------------------------------------
9 //
10 
11 // Class defining methods for shooting Flat or Bit random numbers, double or
12 // integers.
13 // It provides methods to fill with double flat values arrays of
14 // specified size, as well as methods for shooting sequences of 0,1 (bits).
15 // Default boundaries ]0.1[ for operator()().
16 
17 // This is derived from RandFlat and is a drop-in replacement. However
18 // the shootBit() and fireBit() methods are stateless (which makes them
19 // an order of magnitude slower, but allows save/restore engine status
20 // to work correctly).
21 
22 // =======================================================================
23 // M. Fischler - Created: 15th Feb 2000
24 // M Fischler - put and get to/from streams 12/10/04
25 // M Fischler - static save/restore to streams streams 12/20/04
26 // =======================================================================
27 
28 #ifndef RandBit_h
29 #define RandBit_h 1
30 
31 #include "CLHEP/Random/RandFlat.h"
32 
33 namespace CLHEP {
34 
39 class RandBit : public RandFlat {
40 
41 public:
42 
43  inline RandBit ( HepRandomEngine& anEngine );
44  inline RandBit ( HepRandomEngine& anEngine, double width );
45  inline RandBit ( HepRandomEngine& anEngine, double a, double b );
46  inline RandBit ( HepRandomEngine* anEngine );
47  inline RandBit ( HepRandomEngine* anEngine, double width );
48  inline RandBit ( HepRandomEngine* anEngine, double a, double b );
49  // These constructors should be used to instantiate a RandBit
50  // distribution object defining a local engine for it.
51  // The static generator will be skipped using the non-static methods
52  // defined below.
53  // If the engine is passed by pointer the corresponding engine object
54  // will be deleted by the RandBit destructor.
55  // If the engine is passed by reference the corresponding engine object
56  // will not be deleted by the RandBit destructor.
57 
58  virtual ~RandBit();
59  // Destructor
60 
61  // Other than the Bit routines, constructors, and destructor, everything is
62  // simply inherited from RandFlat.
63 
64  static inline int shootBit();
65 
66  static inline int shootBit( HepRandomEngine* );
67 
68  // Methods using the localEngine to shoot random values, by-passing
69  // the static generator.
70 
71  inline int fireBit();
72 
73  // Save and restore to/from streams
74 
75  std::ostream & put ( std::ostream & os ) const;
76  std::istream & get ( std::istream & is );
77 
78  std::string name() const;
79 
80  static std::string distributionName() {return "RandBit";}
81  // Provides the name of this distribution class
82 
83  static std::ostream& saveFullState ( std::ostream & os )
84  // Saves to stream the state of the engine and cached data.
85  {return RandFlat::saveFullState(os);}
86 
87  static std::istream& restoreFullState ( std::istream & is )
88  // Restores from stream the state of the engine and cached data.
89  {return RandFlat::restoreFullState(is);}
90 
91  static std::ostream& saveDistState ( std::ostream & os )
92  // Saves to stream the state of the cached data.
93  {return RandFlat::saveDistState(os);}
94 
95  static std::istream& restoreDistState ( std::istream & is )
96  // Restores from stream the state of the cached data.
97  {return RandFlat::restoreDistState(is);}
98 
99 
100 private:
101 
102  // All the engine info, and the default A and B, are in the RandFlat
103  // base class.
104 
105 };
106 
107 } // namespace CLHEP
108 
109 #include "CLHEP/Random/RandBit.icc"
110 
111 #endif