tdaq-develop-2025-02-12
TableVersion.cc
1 #include "otsdaq/TableCore/TableVersion.h"
2 
3 using namespace ots;
4 
5 const unsigned int TableVersion::INVALID = -1;
6 const unsigned int TableVersion::DEFAULT = 0;
7 const unsigned int TableVersion::SCRATCH = ~(1 << 31); // highest positive integer
8 
9 //==============================================================================
10 TableVersion::TableVersion(unsigned int version) : version_(version) {}
11 TableVersion::TableVersion(char* const& versionStr)
12 {
13  if(!versionStr)
14  version_ = TableVersion::INVALID;
15  else
16  sscanf(versionStr, "%u", &version_);
17 }
18 TableVersion::TableVersion(const std::string& versionStr)
19  : TableVersion((char*)versionStr.c_str())
20 {
21 }
22 
23 //==============================================================================
24 TableVersion::~TableVersion(void) {}
25 
26 //==============================================================================
29 unsigned int TableVersion::version(void) const { return version_; }
30 
31 //==============================================================================
33 std::string TableVersion::toString(void) const
34 {
35  // represent invalid/temporary versions as negative number strings
36  return (isTemporaryVersion() || isInvalid()) ? std::to_string((int)version_)
37  : std::to_string(version_);
38 }
39 
40 //==============================================================================
42 TableVersion& TableVersion::operator=(const unsigned int version)
43 {
44  version_ = version;
45  return *this;
46 }
47 
48 //==============================================================================
51 TableVersion& TableVersion::operator*=(const unsigned int a)
52 {
53  version_ *= a;
54  return *this;
55 }
56 //==============================================================================
60 {
61  version_ *= a.version_;
62  return *this;
63 }
64 //==============================================================================
68 {
69  version_ += a.version_;
70  return *this;
71 }
72 //==============================================================================
76 {
77  version_ -= a.version_;
78  return *this;
79 }
80 //==============================================================================
84 {
85  version_ /= a.version_;
86  return *this;
87 }
88 
89 //==============================================================================
91 bool TableVersion::operator==(unsigned int version) const
92 {
93  return (version_ == version);
94 }
95 bool TableVersion::operator==(const TableVersion& version) const
96 {
97  return (version_ == version.version_);
98 }
99 
100 //==============================================================================
102 bool TableVersion::operator!=(unsigned int version) const
103 {
104  return (version_ != version);
105 }
106 bool TableVersion::operator!=(const TableVersion& version) const
107 {
108  return (version_ != version.version_);
109 }
110 
111 //==============================================================================
113 bool TableVersion::operator<(const TableVersion& version) const
114 {
115  return (version_ < version.version_);
116 }
117 
118 //==============================================================================
120 bool TableVersion::operator>(const TableVersion& version) const
121 {
122  return (version_ > version.version_);
123 }
124 
125 //==============================================================================
128 {
129  return (version_ == TableVersion::INVALID ||
130  (version_ > TableVersion::SCRATCH &&
131  version_ < INVALID - NUM_OF_TEMP_VERSIONS)); // unused reserved block
132 }
133 
134 //==============================================================================
138 {
139  return (version_ >= INVALID - NUM_OF_TEMP_VERSIONS && version_ != INVALID);
140 }
141 
142 //==============================================================================
146 {
147  return (version_ == TableVersion::SCRATCH);
148 }
149 
150 //==============================================================================
153 bool TableVersion::isMockupVersion() const { return (version_ == TableVersion::INVALID); }
154 
155 //==============================================================================
162 {
163  TableVersion retVersion(version.version_ + 1); // DEFAULT := INVALID + 1
164  return (!retVersion.isInvalid() && !retVersion.isTemporaryVersion()) ? retVersion
165  : TableVersion();
166 }
167 
168 //==============================================================================
175 {
176  TableVersion retVersion(version.isTemporaryVersion() ? (version.version_ - 1)
177  : (INVALID - 1));
178  return retVersion.isTemporaryVersion() ? retVersion : TableVersion();
179 }
TableVersion & operator-=(const TableVersion a)
to support StringMacros on TableVersion types
Definition: TableVersion.cc:75
bool isMockupVersion(void) const
TableVersion & operator/=(const TableVersion a)
to support StringMacros on TableVersion types
Definition: TableVersion.cc:83
std::string toString(void) const
toString
Definition: TableVersion.cc:33
bool operator>(const TableVersion &version) const
operator>
TableVersion & operator=(const unsigned int version)
Operators.
Definition: TableVersion.cc:42
bool operator!=(unsigned int version) const
operator!=
bool isInvalid(void) const
isInvalid
bool operator==(unsigned int version) const
operator==
Definition: TableVersion.cc:91
bool operator<(const TableVersion &version) const
operator<
static TableVersion getNextVersion(const TableVersion &version=TableVersion())
bool isScratchVersion(void) const
bool isTemporaryVersion(void) const
unsigned int version(void) const
Definition: TableVersion.cc:29
TableVersion & operator+=(const TableVersion a)
to support StringMacros on TableVersion types
Definition: TableVersion.cc:67
TableVersion & operator*=(const unsigned int a)
to support StringMacros on TableVersion types
Definition: TableVersion.cc:51
static TableVersion getNextTemporaryVersion(const TableVersion &version=TableVersion())