otsdaq  v2_05_02_indev
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) : TableVersion((char*)versionStr.c_str()) {}
19 
20 //==============================================================================
21 TableVersion::~TableVersion(void) {}
22 
23 //==============================================================================
24 // version
25 // get version as integer
26 unsigned int TableVersion::version(void) const { return version_; }
27 
28 //==============================================================================
29 // toString
30 std::string TableVersion::toString(void) const
31 {
32  // represent invalid/temporary versions as negative number strings
33  return (isTemporaryVersion() || isInvalid()) ? std::to_string((int)version_) : std::to_string(version_);
34 }
35 
36 //==============================================================================
37 // assignment operator with type int
38 TableVersion& TableVersion::operator=(const unsigned int version)
39 {
40  version_ = version;
41  return *this;
42 }
43 
44 //==============================================================================
45 // operator==
46 bool TableVersion::operator==(unsigned int version) const { return (version_ == version); }
47 bool TableVersion::operator==(const TableVersion& version) const { return (version_ == version.version_); }
48 
49 //==============================================================================
50 // operator!=
51 bool TableVersion::operator!=(unsigned int version) const { return (version_ != version); }
52 bool TableVersion::operator!=(const TableVersion& version) const { return (version_ != version.version_); }
53 
54 //==============================================================================
55 // operator<
56 bool TableVersion::operator<(const TableVersion& version) const { return (version_ < version.version_); }
57 
58 //==============================================================================
59 // operator>
60 bool TableVersion::operator>(const TableVersion& version) const { return (version_ > version.version_); }
61 
62 //==============================================================================
63 // isInvalid
64 bool TableVersion::isInvalid() const
65 {
66  return (version_ == TableVersion::INVALID || (version_ > TableVersion::SCRATCH && version_ < INVALID - NUM_OF_TEMP_VERSIONS)); // unused reserved block
67 }
68 
69 //==============================================================================
70 // isTemporaryVersion
71 // claim a block of unsigned ints to designate as temporary versions
72 bool TableVersion::isTemporaryVersion() const { return (version_ >= INVALID - NUM_OF_TEMP_VERSIONS && version_ != INVALID); }
73 
74 //==============================================================================
75 // isScratchVersion
76 // claim the most positive signed integer as the scratch version
77 bool TableVersion::isScratchVersion() const { return (version_ == TableVersion::SCRATCH); }
78 
79 //==============================================================================
80 // isMockupVersion
81 // the INVALID index represents the mockup version
82 bool TableVersion::isMockupVersion() const { return (version_ == TableVersion::INVALID); }
83 
84 //==============================================================================
85 // getNextVersion
86 // returns next version given the most recent version
87 // if given nothing returns DEFAULT as first version
88 // if given 0, returns 1, etc.
89 // if no available versions left return INVALID
90 TableVersion TableVersion::getNextVersion(const TableVersion& version)
91 {
92  TableVersion retVersion(version.version_ + 1); // DEFAULT := INVALID + 1
93  return (!retVersion.isInvalid() && !retVersion.isTemporaryVersion()) ? retVersion : TableVersion();
94 }
95 
96 //==============================================================================
97 // getNextTemporaryVersion
98 // returns next Temporary version given the most recent temporary version
99 // if given nothing returns -2 as first temporary version
100 // if given -2, returns -3, etc.
101 // if no available temporary versions left return INVALID
102 TableVersion TableVersion::getNextTemporaryVersion(const TableVersion& version)
103 {
104  TableVersion retVersion(version.isTemporaryVersion() ? (version.version_ - 1) : (INVALID - 1));
105  return retVersion.isTemporaryVersion() ? retVersion : TableVersion();
106 }