00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef BITGENERATOR_HEADER
00031 #define BITGENERATOR_HEADER
00032
00033 #include <stdexcept>
00034 #include <fstream>
00035
00036
00037 #include "misc.h"
00038 #include "phbib.h"
00039 #include "phrand.h"
00040 #include "signals.h"
00041 #include "basicdevice.h"
00042
00043
00044 class simth::Device;
00045
00046 namespace simthlib
00047 {
00048
00049 class BitGenerator;
00050 std::ostream& operator<<(std::ostream &os, const BitGenerator& bg);
00051
00052
00053
00054
00058 class BitGenerator : public simth::Device
00059 {
00060 public:
00061
00062 enum GenerationMode { RANDOM, ALL_ZERO, ALL_ONE};
00063
00069 BitGenerator(int deviceID, simth::DeviceSystemIntf* system,
00070 const simth::PropertyList& pl);
00071
00074 virtual ~BitGenerator(){}
00075
00076 virtual void updateInputLengths();
00077 virtual void updateOutputLengths();
00078
00083 void fillBitSequence(simth::BitSeq* bits) const;
00084
00087 void setBitseqLength(int newLength){setOutputLength(newLength, 0);invariante();}
00088
00089 virtual void process();
00090
00091 virtual void print(std::ostream &os) const;
00092
00093 protected:
00094
00095 GenerationMode mode() const {return mode_;}
00096
00097 private:
00098
00099 simth::GslRandomWrapper rng;
00100
00101 GenerationMode mode_;
00102
00103 virtual void invariante() const;
00104
00105 public:
00106 static void init(const std::string fileName, simth::Device** dev,
00107 simth::DeviceSystemIntf* sysPtr, int ID,
00108 const std::string& regionQualifier = "");
00109 };
00110
00111 inline void BitGenerator::invariante() const
00112 {
00113 if(DEBUG) {
00114 if(outputLength(0) <= 0) {
00115 throw std::runtime_error("inline void bitGenerator::invariante() const : error 1");
00116 }
00117 }
00118 }
00119
00120
00121 }
00122
00123 #endif
00124
00125
00126