00001 #ifndef DAQREADOUTFORMAT_DAQTRAITS_H
00002 #define DAQREADOUTFORMAT_DAQTRAITS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <string>
00013 #include <vector>
00014
00015 namespace DybDaq {
00016 class BitsDefinition;
00017 }
00018 namespace DybDaq {
00019
00020 class DaqTraits {
00021
00022 public:
00023
00024 friend class DaqBuffer;
00025
00026 typedef std::vector<BitsDefinition> Definitions;
00027
00031 virtual ~DaqTraits();
00032
00033
00034
00035
00036 virtual unsigned int majorVersion() const = 0;
00037
00038
00039
00040
00041 virtual unsigned int minorVersion() const = 0;
00042
00046 virtual const std::string versionString() const = 0;
00047
00051 virtual unsigned int marker(unsigned int marker) const;
00052
00056 virtual unsigned int illegalMarker() const = 0;
00057
00061 virtual unsigned int illegalField() const = 0;
00062
00066 virtual const char* boolAsString(bool value) const;
00067
00071 const DaqTraits::Definitions& bitsDefinitions(unsigned int component) const;
00072
00073 protected:
00074
00078 DaqTraits();
00079
00083 static unsigned int readUnsignedInt(const char*& buffer,
00084 const DaqTraits& traits,
00085 unsigned int field);
00086
00090 unsigned int index(unsigned int field) const;
00091
00095 virtual unsigned int markersEnd() const = 0;
00096
00100 virtual const unsigned int* markers() const = 0;
00101
00105 virtual unsigned int fieldsEnd() const = 0;
00106
00110 virtual const unsigned int* indices() const = 0;
00111
00115 virtual const unsigned int* shifts() const = 0;
00116
00120 virtual const unsigned int* masks() const = 0;
00121
00125 virtual const std::string* descriptions() const;
00126
00130 virtual DaqTraits::Definitions* definitions(unsigned int component) const;
00131
00135 virtual void setDefinitions(DaqTraits::Definitions* definitions,
00136 unsigned int component);
00140 virtual const unsigned int* componentFields(unsigned int component) const;
00141
00145 virtual const unsigned int componentFieldsEnd(unsigned int component) const;
00146
00147 private:
00148
00152 DaqTraits(DaqTraits& rhs);
00153
00157 DaqTraits& operator=(DaqTraits& rhs);
00158
00162 unsigned int shift(unsigned int field) const;
00163
00167 unsigned int mask(unsigned int field) const;
00168
00169 };
00170
00171 }
00172
00173 #endif // DAQREADOUTFORMAT_DAQTRAITS_H