$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "otsdaq-core/TableCore/TableVersion.h" 00002 00003 using namespace ots; 00004 00005 const unsigned int TableVersion::INVALID = -1; 00006 const unsigned int TableVersion::DEFAULT = 0; 00007 const unsigned int TableVersion::SCRATCH = ~(1 << 31); // highest positive integer 00008 00009 //============================================================================== 00010 TableVersion::TableVersion(unsigned int version) : version_(version) {} 00011 TableVersion::TableVersion(char* const& versionStr) 00012 { 00013 if(!versionStr) 00014 version_ = TableVersion::INVALID; 00015 else 00016 sscanf(versionStr, "%u", &version_); 00017 } 00018 TableVersion::TableVersion(const std::string& versionStr) 00019 : TableVersion((char*)versionStr.c_str()) 00020 { 00021 } 00022 00023 //============================================================================== 00024 TableVersion::~TableVersion(void) {} 00025 00026 //============================================================================== 00027 // version 00028 // get version as integer 00029 unsigned int TableVersion::version(void) const { return version_; } 00030 00031 //============================================================================== 00032 // toString 00033 std::string TableVersion::toString(void) const 00034 { 00035 // represent invalid/temporary versions as negative number strings 00036 return (isTemporaryVersion() || isInvalid()) ? std::to_string((int)version_) 00037 : std::to_string(version_); 00038 } 00039 00040 //============================================================================== 00041 // assignment operator with type int 00042 TableVersion& TableVersion::operator=(const unsigned int version) 00043 { 00044 version_ = version; 00045 return *this; 00046 } 00047 00048 //============================================================================== 00049 // operator== 00050 bool TableVersion::operator==(unsigned int version) const 00051 { 00052 return (version_ == version); 00053 } 00054 bool TableVersion::operator==(const TableVersion& version) const 00055 { 00056 return (version_ == version.version_); 00057 } 00058 00059 //============================================================================== 00060 // operator!= 00061 bool TableVersion::operator!=(unsigned int version) const 00062 { 00063 return (version_ != version); 00064 } 00065 bool TableVersion::operator!=(const TableVersion& version) const 00066 { 00067 return (version_ != version.version_); 00068 } 00069 00070 //============================================================================== 00071 // operator< 00072 bool TableVersion::operator<(const TableVersion& version) const 00073 { 00074 return (version_ < version.version_); 00075 } 00076 00077 //============================================================================== 00078 // operator> 00079 bool TableVersion::operator>(const TableVersion& version) const 00080 { 00081 return (version_ > version.version_); 00082 } 00083 00084 //============================================================================== 00085 // isInvalid 00086 bool TableVersion::isInvalid() const 00087 { 00088 return (version_ == TableVersion::INVALID || 00089 (version_ > TableVersion::SCRATCH && 00090 version_ < INVALID - NUM_OF_TEMP_VERSIONS)); // unused reserved block 00091 } 00092 00093 //============================================================================== 00094 // isTemporaryVersion 00095 // claim a block of unsigned ints to designate as temporary versions 00096 bool TableVersion::isTemporaryVersion() const 00097 { 00098 return (version_ >= INVALID - NUM_OF_TEMP_VERSIONS && version_ != INVALID); 00099 } 00100 00101 //============================================================================== 00102 // isScratchVersion 00103 // claim the most positive signed integer as the scratch version 00104 bool TableVersion::isScratchVersion() const 00105 { 00106 return (version_ == TableVersion::SCRATCH); 00107 } 00108 00109 //============================================================================== 00110 // isMockupVersion 00111 // the INVALID index represents the mockup version 00112 bool TableVersion::isMockupVersion() const { return (version_ == TableVersion::INVALID); } 00113 00114 //============================================================================== 00115 // getNextVersion 00116 // returns next version given the most recent version 00117 // if given nothing returns DEFAULT as first version 00118 // if given 0, returns 1, etc. 00119 // if no available versions left return INVALID 00120 TableVersion TableVersion::getNextVersion(const TableVersion& version) 00121 { 00122 TableVersion retVersion(version.version_ + 1); // DEFAULT := INVALID + 1 00123 return (!retVersion.isInvalid() && !retVersion.isTemporaryVersion()) ? retVersion 00124 : TableVersion(); 00125 } 00126 00127 //============================================================================== 00128 // getNextTemporaryVersion 00129 // returns next Temporary version given the most recent temporary version 00130 // if given nothing returns -2 as first temporary version 00131 // if given -2, returns -3, etc. 00132 // if no available temporary versions left return INVALID 00133 TableVersion TableVersion::getNextTemporaryVersion(const TableVersion& version) 00134 { 00135 TableVersion retVersion(version.isTemporaryVersion() ? (version.version_ - 1) 00136 : (INVALID - 1)); 00137 return retVersion.isTemporaryVersion() ? retVersion : TableVersion(); 00138 }