summaryrefslogtreecommitdiffstats
path: root/kmail/kmdict.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmail/kmdict.h')
-rw-r--r--kmail/kmdict.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/kmail/kmdict.h b/kmail/kmdict.h
new file mode 100644
index 000000000..520315ad2
--- /dev/null
+++ b/kmail/kmdict.h
@@ -0,0 +1,68 @@
+/*
+ * simple hash table for kmail. inspired by QDict
+ */
+
+#ifndef __KMDICT
+#define __KMDICT
+
+/**
+ * @short Class representing items in a KMDict
+ */
+class KMDictItem
+{
+public:
+ long key;
+ KMDictItem *next;
+};
+
+/**
+ * @short KMDict implements a lightweight dictionary with serial numbers as keys.
+ *
+ * KMDict is a leightweight dictionary used exclusively by KMMsgDict. It uses
+ * serial numbers as keys.
+ *
+ * @author Ronen Tzur <rtzur@shani.net>
+ */
+class KMDict
+{
+ friend class MessageDictTester;
+public:
+ /** Creates a hash table with @p size columns. */
+ KMDict(int size = 17);
+
+ /** Destroys the hash table object. */
+ ~KMDict();
+
+ /** Clears the hash table, removing all items. */
+ void clear();
+
+ /** Returns the size of the hash table. */
+ int size() { return mSize; }
+
+ /** Inserts an item, replacing old ones with the same key. */
+ void replace(long key, KMDictItem *item);
+
+ /** Inserts an item without replacing ones with the same key. */
+ void insert(long key, KMDictItem *item);
+
+ /** Removes an item. */
+ void remove(long key);
+
+ /** Find an item by key. Returns pointer to it, or 0 if not found. */
+ KMDictItem *find(long key);
+
+private:
+ /** Removes all items _following_ @p item with key @p key. */
+ void removeFollowing(KMDictItem *item, long key);
+
+ /** Initializes the hash table to @p size colums. */
+ void init(int size);
+
+ /** The size of the hash. */
+ int mSize;
+
+ /** The buckets. */
+ KMDictItem **mVecs;
+};
+
+#endif /* __KMDICT */