struct HashPos {
long Position;
};
-
-int PrintHash(HashList *Hash)
+#define DEBUG
+int PrintHash(HashList *Hash, PrintHashContent First, PrintHashContent Second)
{
- char *foo;
- char *bar;
+ const char *foo;
+ const char *bar;
+ const char *bla = "";
long key;
long i;
if (Hash->MyKeys != NULL)
{
key = Hash->LookupTable[i]->Key;
foo = Hash->LookupTable[i]->HashKey;
- bar = (char*) Hash->Members[Hash->LookupTable[i]->Position]->Data;
+ if (First != NULL)
+ bar = First(Hash->Members[Hash->LookupTable[i]->Position]->Data);
+ if (Second != NULL)
+ bla = Second(Hash->Members[Hash->LookupTable[i]->Position]->Data);
}
#ifdef DEBUG
- printf (" ---- Hashkey[%ld][%ld]: '%s' Value: '%s' \n", i, key, foo, bar);
+ printf (" ---- Hashkey[%ld][%ld]: '%s' Value: '%s' ; %s\n", i, key, foo, bar, bla);
#endif
}
#ifdef DEBUG
NewPayloadArea = (Payload**) malloc(sizeof(Payload*) * Hash->MemberSize * 2);
memset(&NewPayloadArea[Hash->MemberSize], 0, sizeof(Payload*) * Hash->MemberSize);
memcpy(NewPayloadArea, Hash->Members, sizeof(Payload*) * Hash->MemberSize);
+ free(Hash->Members);
+ Hash->Members = NewPayloadArea;
NewTable = malloc(sizeof(HashKey*) * Hash->MemberSize * 2);
memset(&NewTable[Hash->MemberSize], 0, sizeof(HashKey*) * Hash->MemberSize);
- memcpy(NewTable, &Hash->LookupTable, sizeof(HashKey*) * Hash->MemberSize);
+ memcpy(NewTable, Hash->LookupTable, sizeof(HashKey*) * Hash->MemberSize);
+ free(Hash->LookupTable);
+ Hash->LookupTable = NewTable;
Hash->MemberSize *= 2;
}
}
}
-int GetHash(HashList *Hash, char *HKey, long HKLen, void **Data)
+int GetHash(HashList *Hash, const char *HKey, long HKLen, void **Data)
{
long HashBinKey;
long HashAt;
- HashBinKey = CalcHashKey(HKey, HKLen);
+ HashBinKey = CalcHashKey((char*)HKey, HKLen);
HashAt = FindInHash(Hash, HashBinKey);
- if ((HashAt < 0) || (HashAt >= Hash->nMembersUsed)) {
+ if ((HashAt < 0) ||
+ (HashAt >= Hash->nMembersUsed) ||
+ (Hash->LookupTable[HashAt]->Key != HashBinKey)) {
*Data = NULL;
return 0;
}
return 0;
}
-int GetHashKeys(HashList *Hash, const char ***List)
+int GetHashKeys(HashList *Hash, char ***List)
{
long i;
if (Hash->MyKeys != NULL)
Hash->MyKeys[i] = Hash->LookupTable[i]->HashKey;
}
- *List = Hash->MyKeys;
+ *List = (char**)Hash->MyKeys;
return Hash->nMembersUsed;
}