aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Enum.cc
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2000-08-02 18:28:51 +0000
committerFritz Elfert <felfert@to.com>2000-08-02 18:28:51 +0000
commit6505b5c1c3966292a1685f1bb56b0339df4a5383 (patch)
tree1df7768ddb6baa0da819c9e4ba1922ff7a17a2d5 /lib/Enum.cc
parentd439bc3807b3f7cea0544899ee5fc8d849bf32df (diff)
downloadplptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.tar.gz
plptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.tar.bz2
plptools-6505b5c1c3966292a1685f1bb56b0339df4a5383.zip
Initial checkin.
Diffstat (limited to 'lib/Enum.cc')
-rw-r--r--lib/Enum.cc57
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:
+ */