kmdict.cpp
00001
00002
00003
00004 #ifdef HAVE_CONFIG_H
00005 #include <config.h>
00006 #endif
00007
00008 #include "kmdict.h"
00009
00010 #include <string.h>
00011
00012
00013
00014 KMDict::KMDict(int size)
00015 {
00016 init(size);
00017 }
00018
00019
00020
00021 KMDict::~KMDict()
00022 {
00023 clear();
00024 }
00025
00026
00027
00028 void KMDict::init(int size)
00029 {
00030 mSize = size;
00031 mVecs = new KMDictItem *[mSize];
00032 memset(mVecs, 0, mSize * sizeof(KMDictItem *));
00033 }
00034
00035
00036
00037 void KMDict::clear()
00038 {
00039 if (!mVecs)
00040 return;
00041 for (int i = 0; i < mSize; i++) {
00042 KMDictItem *item = mVecs[i];
00043 while (item) {
00044 KMDictItem *nextItem = item->next;
00045 delete item;
00046 item = nextItem;
00047 }
00048 }
00049 delete [] mVecs;
00050 mVecs = 0;
00051 }
00052
00053
00054
00055 void KMDict::replace(long key, KMDictItem *item)
00056 {
00057 item->key = key;
00058 int idx = (unsigned long)key % mSize;
00059 item->next = mVecs[idx];
00060 mVecs[idx] = item;
00061 removeFollowing(item, key);
00062 }
00063
00064
00065
00066 void KMDict::remove(long key)
00067 {
00068 int idx = (unsigned long)key % mSize;
00069 KMDictItem *item = mVecs[idx];
00070
00071 if (item) {
00072 if (item->key == key) {
00073 mVecs[idx] = item->next;
00074 delete item;
00075 } else
00076 removeFollowing(item, key);
00077 }
00078 }
00079
00080
00081
00082 void KMDict::removeFollowing(KMDictItem *item, long key)
00083 {
00084 while (item) {
00085 KMDictItem *itemNext = item->next;
00086 if (itemNext && itemNext->key == key) {
00087 KMDictItem *itemNextNext = itemNext->next;
00088 delete itemNext;
00089 item->next = itemNextNext;
00090 } else
00091 item = itemNext;
00092 }
00093 }
00094
00095
00096
00097 KMDictItem *KMDict::find(long key)
00098 {
00099 int idx = (unsigned long)key % mSize;
00100 KMDictItem *item = mVecs[idx];
00101 while (item) {
00102 if (item->key == key)
00103 break;
00104 item = item->next;
00105 }
00106 return item;
00107 }
This file is part of the documentation for kmail Library Version 3.2.2.