otsdaq  v1_01_04
 All Classes Namespaces Functions
ConfigurationVersion.h
1 #ifndef _ots_ConfigurationVersion_h_
2 #define _ots_ConfigurationVersion_h_
3 
4 #include <ostream>
5 
6 namespace ots
7 {
8 
9 //ConfigurationVersion is the type used for version associated with a configuration table
10 //(whereas ConfigurationGroupKey is the type used for versions association with global configurations)
11 //
12 // Designed so that version type could be changed easily, e.g. to string
14 {
15 public:
16  static const unsigned int INVALID;
17  static const unsigned int DEFAULT;
18  static const unsigned int SCRATCH;
19 
20  explicit ConfigurationVersion (unsigned int version=INVALID);
21  explicit ConfigurationVersion (char* const &versionStr);
22  explicit ConfigurationVersion (const std::string &versionStr);
23  virtual ~ConfigurationVersion (void);
24 
25  unsigned int version (void) const;
26  bool isTemporaryVersion (void) const;
27  bool isScratchVersion (void) const;
28  bool isMockupVersion (void) const;
29  bool isInvalid (void) const;
30  std::string toString (void) const;
31 
32  //Operators
33  ConfigurationVersion& operator= (const unsigned int version);
34  bool operator== (unsigned int version) const;
35  bool operator== (const ConfigurationVersion& version) const;
36  bool operator!= (unsigned int version) const;
37  bool operator!= (const ConfigurationVersion& version) const;
38  bool operator< (const ConfigurationVersion& version) const;
39  bool operator> (const ConfigurationVersion& version) const;
40  bool operator<= (const ConfigurationVersion& version) const { return !operator>(version);}
41  bool operator>= (const ConfigurationVersion& version) const { return !operator<(version);}
42 
43  friend std::ostream& operator<< (std::ostream& out, const ConfigurationVersion& version)
44  {
45  if(version.isScratchVersion())
46  out << "ScratchVersion";
47  else if(version.isMockupVersion())
48  out << "Mock-up";
49  else if(version.isInvalid())
50  out << "InvalidVersion";
51  else
52  out << version.toString();
53  return out;
54  }
55 
56  static ConfigurationVersion getNextVersion (const ConfigurationVersion& version=ConfigurationVersion());
57  static ConfigurationVersion getNextTemporaryVersion (const ConfigurationVersion& version=ConfigurationVersion());
58 
59 private:
60 
61  enum{ NUM_OF_TEMP_VERSIONS = 10000 };
62 
63  unsigned int version_;
64  std::string versionString_;
65 
66 };
67 }
68 #endif