From 6505b5c1c3966292a1685f1bb56b0339df4a5383 Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Wed, 2 Aug 2000 18:28:51 +0000 Subject: Initial checkin. --- lib/Enum.cc | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 lib/Enum.cc (limited to 'lib/Enum.cc') 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(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: + */ -- cgit v1.2.3