summaryrefslogtreecommitdiffhomepage
path: root/FoundationEx/include/Dictionary.h
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-03-12 01:08:39 +0100
committerAki <please@ignore.pl>2024-03-12 01:08:39 +0100
commitf43d32d6d2cc7ecd04f4f06f20d5a6fc2c87c9ae (patch)
tree0f82962432f9cd4fae60dd37c8935c1bc28f29e5 /FoundationEx/include/Dictionary.h
parent2914a714cebae7f30d47362dfe50c39cb6621163 (diff)
downloadstarshatter-f43d32d6d2cc7ecd04f4f06f20d5a6fc2c87c9ae.zip
starshatter-f43d32d6d2cc7ecd04f4f06f20d5a6fc2c87c9ae.tar.gz
starshatter-f43d32d6d2cc7ecd04f4f06f20d5a6fc2c87c9ae.tar.bz2
Another reorganization change that diverts me from crying unable to get rid off singleton madness
Diffstat (limited to 'FoundationEx/include/Dictionary.h')
-rw-r--r--FoundationEx/include/Dictionary.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/FoundationEx/include/Dictionary.h b/FoundationEx/include/Dictionary.h
new file mode 100644
index 0000000..bcb30ed
--- /dev/null
+++ b/FoundationEx/include/Dictionary.h
@@ -0,0 +1,100 @@
+/* Starshatter: The Open Source Project
+ Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
+ Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
+ Copyright (c) 1997-2006, Destroyer Studios LLC.
+
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ Declaration of the Dictionary class
+*/
+
+#ifndef Dictionary_h
+#define Dictionary_h
+
+#include "Text.h"
+
+// +-------------------------------------------------------------------+
+
+template <class T> class Dictionary;
+template <class T> class DictionaryIter;
+template <class T> class DictionaryCell;
+
+// +-------------------------------------------------------------------+
+
+template <class T> class Dictionary
+{
+public:
+ Dictionary();
+ ~Dictionary();
+
+ T& operator[](const Text& key);
+
+ void insert(const Text& key, const T& val);
+ void remove(const Text& key);
+
+ void clear();
+
+ int size() const { return items; }
+ int isEmpty() const { return !items; }
+
+ int contains(const Text& key) const;
+ T find(const Text& key, T defval) const;
+
+private:
+ void init();
+
+ int items;
+
+ typedef DictionaryCell<T>* PTR;
+ PTR table[256];
+
+ friend class DictionaryIter<T>;
+};
+
+// +-------------------------------------------------------------------+
+
+template <class T> class DictionaryIter
+{
+public:
+ DictionaryIter(Dictionary<T>& l);
+ ~DictionaryIter();
+
+ int operator++(); // prefix
+
+ void reset();
+ void forth();
+
+ Text key() const;
+ T value() const;
+
+ void attach(Dictionary<T>& l);
+ Dictionary<T>& container();
+
+private:
+ Dictionary<T>* dict;
+ DictionaryCell<T>* here;
+ int chain;
+};
+
+// +-------------------------------------------------------------------+
+
+template <class T> class DictionaryCell
+{
+public:
+ DictionaryCell(const Text& k) : key(k), value( ), next(0) { }
+ DictionaryCell(const Text& k, const T& v) : key(k), value(v), next(0) { }
+ ~DictionaryCell() { }
+
+ Text key;
+ T value;
+ DictionaryCell<T>* next;
+};
+
+// +-------------------------------------------------------------------+
+
+#include "Dictionary.inl.h"
+#endif // Dictionary_h
+