otsdaq  v2_00_00
ConfigurationVersion.cc
1 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationVersion.h"
2 
3 using namespace ots;
4 
5 
6 const unsigned int ConfigurationVersion::INVALID = -1;
7 const unsigned int ConfigurationVersion::DEFAULT = 0;
8 const unsigned int ConfigurationVersion::SCRATCH = ~(1<<31); //highest positive integer
9 
10 //==============================================================================
11 ConfigurationVersion::ConfigurationVersion(unsigned int version) :
12  version_(version)
13 {}
14 ConfigurationVersion::ConfigurationVersion (char* const &versionStr)
15 {
16  if(!versionStr) version_ = ConfigurationVersion::INVALID;
17  else
18  sscanf(versionStr,"%u",&version_);
19 }
20 ConfigurationVersion::ConfigurationVersion (const std::string &versionStr)
21 : ConfigurationVersion((char* )versionStr.c_str())
22 {}
23 
24 //==============================================================================
25 ConfigurationVersion::~ConfigurationVersion(void)
26 {}
27 
28 //==============================================================================
29 //version
30 // get version as integer
31 unsigned int ConfigurationVersion::version(void) const
32 {
33  return version_;
34 }
35 
36 //==============================================================================
37 //toString
38 std::string ConfigurationVersion::toString(void) const
39 {
40  //represent invalid/temporary versions as negative number strings
41  return (isTemporaryVersion()||isInvalid())?std::to_string((int)version_):
42  std::to_string(version_);
43 }
44 
45 //==============================================================================
46 //assignment operator with type int
47 ConfigurationVersion& ConfigurationVersion::operator=(const unsigned int version)
48 {
49  version_ = version;
50  return *this;
51 }
52 
53 //==============================================================================
54 //operator==
55 bool ConfigurationVersion::operator==(unsigned int version) const
56 {
57  return (version_ == version);
58 }
59 bool ConfigurationVersion::operator==(const ConfigurationVersion& version) const
60 {
61  return (version_ == version.version_);
62 }
63 
64 //==============================================================================
65 //operator!=
66 bool ConfigurationVersion::operator!=(unsigned int version) const
67 {
68  return (version_ != version);
69 }
70 bool ConfigurationVersion::operator!=(const ConfigurationVersion& version) const
71 {
72  return (version_ != version.version_);
73 }
74 
75 //==============================================================================
76 //operator<
77 bool ConfigurationVersion::operator<(const ConfigurationVersion& version) const
78 {
79  return (version_ < version.version_);
80 }
81 
82 //==============================================================================
83 //operator>
84 bool ConfigurationVersion::operator>(const ConfigurationVersion& version) const
85 {
86  return (version_ > version.version_);
87 }
88 
89 //==============================================================================
90 //isInvalid
91 bool ConfigurationVersion::isInvalid() const
92 {
93  return (version_ == ConfigurationVersion::INVALID ||
94  (version_ > ConfigurationVersion::SCRATCH &&
95  version_ < INVALID-NUM_OF_TEMP_VERSIONS) ); //unused reserved block
96 }
97 
98 //==============================================================================
99 //isTemporaryVersion
100 // claim a block of unsigned ints to designate as temporary versions
101 bool ConfigurationVersion::isTemporaryVersion() const
102 {
103  return (version_ >= INVALID-NUM_OF_TEMP_VERSIONS && version_ != INVALID);
104 }
105 
106 //==============================================================================
107 //isScratchVersion
108 // claim the most positive signed integer as the scratch version
109 bool ConfigurationVersion::isScratchVersion() const
110 {
111  return (version_ == ConfigurationVersion::SCRATCH);
112 }
113 
114 //==============================================================================
115 //isMockupVersion
116 // the INVALID index represents the mockup version
117 bool ConfigurationVersion::isMockupVersion() const
118 {
119  return (version_ == ConfigurationVersion::INVALID);
120 }
121 
122 //==============================================================================
123 //getNextVersion
124 // returns next version given the most recent version
125 // if given nothing returns DEFAULT as first version
126 // if given 0, returns 1, etc.
127 // if no available versions left return INVALID
128 ConfigurationVersion ConfigurationVersion::getNextVersion(const ConfigurationVersion& version)
129 {
130  ConfigurationVersion retVersion(version.version_+1); //DEFAULT := INVALID + 1
131  return (!retVersion.isInvalid() && !retVersion.isTemporaryVersion())?
132  retVersion:ConfigurationVersion();
133 }
134 
135 
136 //==============================================================================
137 //getNextTemporaryVersion
138 // returns next Temporary version given the most recent temporary version
139 // if given nothing returns -2 as first temporary version
140 // if given -2, returns -3, etc.
141 // if no available temporary versions left return INVALID
142 ConfigurationVersion ConfigurationVersion::getNextTemporaryVersion(const ConfigurationVersion& version)
143 {
144  ConfigurationVersion retVersion(version.isTemporaryVersion()?(version.version_-1):(INVALID-1));
145  return retVersion.isTemporaryVersion()?retVersion:ConfigurationVersion();
146 }
147 
148 
149 
150 
151 
152 
153 
154