otsdaq  v1_01_02
 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 isInvalid (void) const;
29  std::string toString (void) const;
30 
31  //Operators
32  ConfigurationVersion& operator= (const unsigned int version);
33  bool operator== (unsigned int version) const;
34  bool operator== (const ConfigurationVersion& version) const;
35  bool operator!= (unsigned int version) const;
36  bool operator!= (const ConfigurationVersion& version) const;
37  bool operator< (const ConfigurationVersion& version) const;
38  bool operator> (const ConfigurationVersion& version) const;
39  bool operator<= (const ConfigurationVersion& version) const { return !operator>(version);}
40  bool operator>= (const ConfigurationVersion& version) const { return !operator<(version);}
41 
42  friend std::ostream& operator<< (std::ostream& out, const ConfigurationVersion& version)
43  {
44  if(version.isScratchVersion())
45  out << "ScratchVersion";
46  else if(version.isInvalid())
47  out << "InvalidVersion";
48  else
49  out << version.toString();
50  return out;
51  }
52 
53  static ConfigurationVersion getNextVersion (const ConfigurationVersion& version=ConfigurationVersion());
54  static ConfigurationVersion getNextTemporaryVersion (const ConfigurationVersion& version=ConfigurationVersion());
55 
56 private:
57 
58  enum{ NUM_OF_TEMP_VERSIONS = 10000 };
59 
60  unsigned int version_;
61  std::string versionString_;
62 
63 };
64 }
65 #endif