00001 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h"
00002
00003 #include <string.h>
00004 #include <stdexcept>
00005
00006 using namespace ots;
00007
00008 const unsigned int ConfigurationGroupKey::INVALID = -1;
00009 const unsigned int ConfigurationGroupKey::DEFAULT = 0;
00010
00011
00012 ConfigurationGroupKey::ConfigurationGroupKey(unsigned int key) :
00013 key_(key)
00014 {}
00015
00016
00017
00018 ConfigurationGroupKey::ConfigurationGroupKey(char * const &groupString)
00019 {
00020 if(!groupString) {key_ = ConfigurationGroupKey::INVALID; return; }
00021
00022
00023
00024 int i = strlen(groupString)-1;
00025 for(; i >= 0; --i)
00026 if((groupString[i] < '0' || groupString[i] > '9') &&
00027 groupString[i] != '-' && groupString[i] != '_' && groupString[i] != '.')
00028 break;
00029
00030 if(i == (int)strlen(groupString)-1)
00031 {
00032 key_ = ConfigurationGroupKey::DEFAULT;
00033 return;
00034 }
00035 else if(i < 0)
00036 i = 0;
00037 else
00038 ++i;
00039
00040
00041 sscanf(&groupString[i],"%u",&key_);
00042 }
00043
00044
00045 ConfigurationGroupKey::ConfigurationGroupKey(const std::string &groupString)
00046 : ConfigurationGroupKey((char *)groupString.c_str())
00047 {}
00048
00049
00050 ConfigurationGroupKey::~ConfigurationGroupKey(void)
00051 {}
00052
00053
00054 unsigned int ConfigurationGroupKey::key(void) const
00055 {
00056 return key_;
00057 }
00058
00059
00060
00061 bool ConfigurationGroupKey::operator==(unsigned int key) const
00062 {
00063 return (key_ == key);
00064 }
00065 bool ConfigurationGroupKey::operator==(const ConfigurationGroupKey& key) const
00066 {
00067 return (key_ == key.key_);
00068 }
00069
00070
00071
00072 std::string ConfigurationGroupKey::toString(void) const
00073 {
00074
00075 return (isInvalid())?std::to_string((int)key_):
00076 std::to_string(key_);
00077 }
00078
00079
00080
00081 ConfigurationGroupKey& ConfigurationGroupKey::operator=(const unsigned int key)
00082 {
00083 key_ = key;
00084 return *this;
00085 }
00086
00087
00088 bool ConfigurationGroupKey::operator!=(unsigned int key) const
00089 {
00090 return (key_ != key);
00091 }
00092 bool ConfigurationGroupKey::operator!=(const ConfigurationGroupKey& key) const
00093 {
00094 return (key_ != key.key_);
00095 }
00096
00097
00098
00099 bool ConfigurationGroupKey::operator<(const ConfigurationGroupKey& key) const
00100 {
00101 return (key_ < key.key_);
00102 }
00103
00104
00105
00106 bool ConfigurationGroupKey::operator>(const ConfigurationGroupKey& key) const
00107 {
00108 return (key_ > key.key_);
00109 }
00110
00111
00112
00113 bool ConfigurationGroupKey::isInvalid() const
00114 {
00115 return (key_ == INVALID);
00116 }
00117
00118
00119
00120
00121
00122
00123
00124 ConfigurationGroupKey ConfigurationGroupKey::getNextKey(const ConfigurationGroupKey& key)
00125 {
00126 ConfigurationGroupKey retKey(key.key_+1);
00127 return retKey;
00128 }
00129
00130
00131 const unsigned int ConfigurationGroupKey::getDefaultKey(void)
00132 {
00133 return DEFAULT;
00134 }
00135
00136
00137 const unsigned int ConfigurationGroupKey::getInvalidKey(void)
00138 {
00139 return INVALID;
00140 }
00141
00142
00143
00144
00145
00146
00147
00148 std::string ConfigurationGroupKey::getFullGroupString(const std::string &groupName,
00149 const ConfigurationGroupKey& key)
00150 {
00151 if(groupName.size() == 0)
00152 throw std::runtime_error("ConfigurationGroupKey::getFullGroupString() Illegal Group Name! The Group Name was not provided.");
00153 else if(groupName.size() == 1)
00154 throw std::runtime_error("ConfigurationGroupKey::getFullGroupString() Illegal Group Name! The Group Name is too short: \"" +
00155 groupName + "\"");
00156 else
00157 {
00158 for(unsigned int i=0;i<groupName.size();++i)
00159 {
00160 if(!(
00161 (groupName[i] >= 'A' &&groupName[i] <= 'Z') ||
00162 (groupName[i] >= 'a' &&groupName[i] <= 'z') ||
00163 (groupName[i] >= '0' &&groupName[i] <= '9') ) )
00164 throw std::runtime_error("ConfigurationGroupKey::getFullGroupString() Illegal Group Name! Group Name must be alpha-numeric: \"" +
00165 groupName + "\"");
00166 }
00167 }
00168
00169 return groupName + "_v" + std::to_string(key.key_);
00170 }
00171
00172
00173 void ConfigurationGroupKey::getGroupNameAndKey(const std::string &fullGroupString,
00174 std::string &groupName, ConfigurationGroupKey& key)
00175 {
00176 auto i = fullGroupString.rfind("_v");
00177 groupName = fullGroupString.substr(0,i);
00178 key = ConfigurationGroupKey(fullGroupString.substr(i+2));
00179 }
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199