Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
sample\hashtable.h
Abstract:
The file contains the header for hashtable.c.
--*/
#ifndef _HASH_TABLE_H_
#define _HASH_TABLE_H_
typedef VOID (*PVOID_FUNCTION) (PLIST_ENTRY pleEntry);
typedef PVOID_FUNCTION PDISPLAY_FUNCTION;
typedef PVOID_FUNCTION PFREE_FUNCTION;
typedef ULONG (*PHASH_FUNCTION) (PLIST_ENTRY pleEntry);
// < 0 KeyEntry less than TableEntry
// 0 KeyEntry identical TableEntry
// > 0 KeyEntry more than TableEntry
typedef LONG (*PCOMPARE_FUNCTION) (PLIST_ENTRY pleTableEntry, PLIST_ENTRY pleKeyEntry);
typedef struct _HASH_TABLE { ULONG ulNumBuckets; // # buckets in hash table
ULONG ulNumEntries; // # entries in hash table
PDISPLAY_FUNCTION pfnDisplay; // display an entry (optional)
PFREE_FUNCTION pfnFree; // free an entry
PHASH_FUNCTION pfnHash; // hash an entry
PCOMPARE_FUNCTION pfnCompare; // compare two entries
PLIST_ENTRY pleBuckets; // the buckets
} HASH_TABLE, *PHASH_TABLE;
// Create the hash table
DWORD HT_Create( IN HANDLE hHeap, IN ULONG ulNumBuckets, IN PDISPLAY_FUNCTION pfnDisplay OPTIONAL, IN PFREE_FUNCTION pfnFree, IN PHASH_FUNCTION pfnHash, IN PCOMPARE_FUNCTION pfnCompare, OUT PHASH_TABLE *pphtHashTable);
// Destroy the hash table
DWORD HT_Destroy( IN HANDLE hHeap, IN PHASH_TABLE phtTable);
// Clean hash table by destroying all entries
DWORD HT_Cleanup( IN PHASH_TABLE phtHashTable);
// Display all entries in the hash table
#define HT_Display(phtHashTable) \
{ \ if (phtHashTable) \ HT_MapCar(phtHashTable, phtHashTable->pfnDisplay); \ } // # entries in the hash table
#define HT_Size(phtHashTable) \
( \ phtHashTable->ulNumEntries \ )
// Is hash table empty?
#define HT_IsEmpty(phtHashTable) \
( \ HT_Size(phtHashTable) is 0 \ )
// Inserts an entry in the hash table
DWORD HT_InsertEntry( IN PHASH_TABLE phtHashTable, IN PLIST_ENTRY pleEntry);
// Gets the hash table entry with the given key
DWORD HT_GetEntry( IN PHASH_TABLE phtHashTable, IN PLIST_ENTRY pleKey, OUT PLIST_ENTRY *ppleEntry);
// Delete an entry from the hash table
DWORD HT_DeleteEntry( IN PHASH_TABLE phtHashTable, IN PLIST_ENTRY pleKey, OUT PLIST_ENTRY *ppleEntry);
// Remove this entry from the hash table
#define HT_RemoveEntry(phtHashTable, pleEntry) \
( \ RemoveEntryList(pleEntry) \ phtHashTable->ulNumEntries--; \ ) DWORD HT_DeleteEntry( IN PHASH_TABLE phtHashTable, IN PLIST_ENTRY pleKey, OUT PLIST_ENTRY *ppleEntry);
// Is key present in the hash table?
BOOL HT_IsPresentEntry( IN PHASH_TABLE phtHashTable, IN PLIST_ENTRY pleKey);
// Apply the specified function to all entries in the hash table
DWORD HT_MapCar( IN PHASH_TABLE phtHashTable, IN PVOID_FUNCTION pfnVoidFunction);
#endif // _HASH_TABLE_H_
|