diff options
Diffstat (limited to 'IdManager.cpp')
-rw-r--r-- | IdManager.cpp | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/IdManager.cpp b/IdManager.cpp deleted file mode 100644 index d60417c..0000000 --- a/IdManager.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "IdManager.h" - -#include <sstream> - - -bool IdManager::add(const std::string &id) { - if(!valid(id)) return false; - - return usedIds.insert(id).second; -} - -bool IdManager::remove(const std::string &id) { - return (usedIds.erase(id) > 0); -} - -bool IdManager::isValid(const std::string &id) const { - if(id.empty()) return false; - if(id[0] >= '0' && id[0] <= '9') return false; - if(id.size() >= 3) { - if(std::tolower(id[0]) == 'x' && std::tolower(id[1]) == 'm' && std::tolower(id[2]) == 'l') - return false; - } - - for(std::string::const_iterator c = id.begin(); c != id.end(); c++) { - if(!(*c >= '0' && *c <= '9') && !(*c >= 'A' && *c <= 'Z') && !(*c >= 'a' && *c <= 'z') - && *c != '_' && *c != '-' && *c != '.') - return false; - } - - return true; -} - -bool IdManager::unique(const std::string &id) const { - return (usedIds.find(id) == usedIds.end()); -} - -bool IdManager::valid(const std::string &id) const { - return isValid(id) && unique(id); -} - -std::string IdManager::generate(const std::string &prefix) { - if(!isValid(prefix)) return std::string(); - - unsigned long n = 0; - - std::map<std::string, unsigned long>::iterator it = prefixMap.find(prefix); - if(it != prefixMap.end()) { - n = it->second + 1; - prefixMap.erase(it); - } - - std::ostringstream id; - - do { - id.str(std::string()); - id << prefix << n++; - } while(!unique(id.str())); - - prefixMap.insert(std::make_pair<std::string, unsigned long>(prefix, n-1)); - usedIds.insert(id.str()); - - return id.str(); -} |