otsdaq  v2_03_00
TableVersion.cc
1 #include "otsdaq-core/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 //==============================================================================
27 // version
28 // get version as integer
29 unsigned int TableVersion::version(void) const { return version_; }
30 
31 //==============================================================================
32 // toString
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 //==============================================================================
41 // assignment operator with type int
42 TableVersion& TableVersion::operator=(const unsigned int version)
43 {
44  version_ = version;
45  return *this;
46 }
47 
48 //==============================================================================
49 // operator==
50 bool TableVersion::operator==(unsigned int version) const
51 {
52  return (version_ == version);
53 }
54 bool TableVersion::operator==(const TableVersion& version) const
55 {
56  return (version_ == version.version_);
57 }
58 
59 //==============================================================================
60 // operator!=
61 bool TableVersion::operator!=(unsigned int version) const
62 {
63  return (version_ != version);
64 }
65 bool TableVersion::operator!=(const TableVersion& version) const
66 {
67  return (version_ != version.version_);
68 }
69 
70 //==============================================================================
71 // operator<
72 bool TableVersion::operator<(const TableVersion& version) const
73 {
74  return (version_ < version.version_);
75 }
76 
77 //==============================================================================
78 // operator>
79 bool TableVersion::operator>(const TableVersion& version) const
80 {
81  return (version_ > version.version_);
82 }
83 
84 //==============================================================================
85 // isInvalid
86 bool TableVersion::isInvalid() const
87 {
88  return (version_ == TableVersion::INVALID ||
89  (version_ > TableVersion::SCRATCH &&
90  version_ < INVALID - NUM_OF_TEMP_VERSIONS)); // unused reserved block
91 }
92 
93 //==============================================================================
94 // isTemporaryVersion
95 // claim a block of unsigned ints to designate as temporary versions
96 bool TableVersion::isTemporaryVersion() const
97 {
98  return (version_ >= INVALID - NUM_OF_TEMP_VERSIONS && version_ != INVALID);
99 }
100 
101 //==============================================================================
102 // isScratchVersion
103 // claim the most positive signed integer as the scratch version
104 bool TableVersion::isScratchVersion() const
105 {
106  return (version_ == TableVersion::SCRATCH);
107 }
108 
109 //==============================================================================
110 // isMockupVersion
111 // the INVALID index represents the mockup version
112 bool TableVersion::isMockupVersion() const { return (version_ == TableVersion::INVALID); }
113 
114 //==============================================================================
115 // getNextVersion
116 // returns next version given the most recent version
117 // if given nothing returns DEFAULT as first version
118 // if given 0, returns 1, etc.
119 // if no available versions left return INVALID
120 TableVersion TableVersion::getNextVersion(const TableVersion& version)
121 {
122  TableVersion retVersion(version.version_ + 1); // DEFAULT := INVALID + 1
123  return (!retVersion.isInvalid() && !retVersion.isTemporaryVersion()) ? retVersion
124  : TableVersion();
125 }
126 
127 //==============================================================================
128 // getNextTemporaryVersion
129 // returns next Temporary version given the most recent temporary version
130 // if given nothing returns -2 as first temporary version
131 // if given -2, returns -3, etc.
132 // if no available temporary versions left return INVALID
133 TableVersion TableVersion::getNextTemporaryVersion(const TableVersion& version)
134 {
135  TableVersion retVersion(version.isTemporaryVersion() ? (version.version_ - 1)
136  : (INVALID - 1));
137  return retVersion.isTemporaryVersion() ? retVersion : TableVersion();
138 }