diff options
author | Fritz Elfert <felfert@to.com> | 2000-08-02 18:28:51 +0000 |
---|---|---|
committer | Fritz Elfert <felfert@to.com> | 2000-08-02 18:28:51 +0000 |
commit | 6505b5c1c3966292a1685f1bb56b0339df4a5383 (patch) | |
tree | 1df7768ddb6baa0da819c9e4ba1922ff7a17a2d5 /lib/Enum.cc | |
parent | d439bc3807b3f7cea0544899ee5fc8d849bf32df (diff) | |
download | plptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.tar.gz plptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.tar.bz2 plptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.zip |
Initial checkin.
Diffstat (limited to 'lib/Enum.cc')
-rw-r--r-- | lib/Enum.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/Enum.cc b/lib/Enum.cc new file mode 100644 index 0000000..8abce8b --- /dev/null +++ b/lib/Enum.cc @@ -0,0 +1,57 @@ +/*--*-c++-*------------------------------------------------------------- + * $Id$ + *---------------------------------------------------------------------*/ + +#include "Enum.h" + +void EnumBase::i2sMapper::add(long i, const char* s) { + stringMap.insert(pair<long, const char* const>(i, s)); +} + +string EnumBase::i2sMapper::lookup (long i) const { + i2s_map_t::const_iterator searchPtr = stringMap.find(i); + + if (searchPtr == stringMap.end()) + return "[OUT-OF-RANGE]"; + /* + * now combine the probably the multiple strings belonging to this + * integer + */ + string result; + for (i = stringMap.count(i); i > 0 ; --i, ++searchPtr) { + // this should be the case: + assert(searchPtr != stringMap.end()); + if (result.length() != 0) + result += string(","); + result += string(searchPtr->second); + } + return result; +} + + +long EnumBase::i2sMapper::lookup (const char *s) const { + /* + * lookup a specific string. + * Since speed does not matter, we just do an exhaustive + * search. + * Otherwise we would have to maintain another map + * mapping strings to ints .. but its not worth the memory + */ + i2s_map_t::const_iterator run = stringMap.begin(); + while (run != stringMap.end() && strcmp(s, run->second)) { + ++run; + } + if (run == stringMap.end()) + return -1; // FIXME .. maybe throw an exception ? + return run->first; +} + +bool EnumBase::i2sMapper::inRange (long i) const { + return (stringMap.find(i) != stringMap.end()); +} + +/* + * Local variables: + * c-basic-offset: 8 + * End: + */ |