windows-nt/Source/XPSP1/NT/net/rras/dim/admindll/hashtab.h

95 lines
2.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
File HashTab.h
Definitions for creating/dealing with hash tables.
Paul Mayfield, 3/30/98
*/
#ifndef __HashTab_h
#define __HashTab_h
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <winerror.h>
#ifdef __cplusplus
extern "C" {
#endif
// Defines signiture of hash function. Must return an index
// between zero and the size passed into HashTabCreate.
typedef ULONG (* HashTabHashFuncPtr)(HANDLE hData);
// Defines a function type that compares a key to an element. This is
// used for searches. Return same as strcmp.
typedef int (* HashTabKeyCompFuncPtr)(HANDLE hKey, HANDLE hData);
// Function prototype for allocation. If this is provided in a call to
// HashTabCreate the hash table code will allocate using this function.
// Semantics of function are similar to malloc -- return NULL on failure.
typedef PVOID (* HashTabAllocFuncPtr)(ULONG ulSize);
// Function prototype for cleanup. Similar to free.
typedef VOID (* HashTabFreeFuncPtr)(PVOID pvData);
// Function prototype for cleaning up elements. If provided in a call
// to HashTabCreate, then it will be called once for each element when
// HashTabCleanup is called.
typedef VOID (* HashTabFreeElemFuncPtr)(HANDLE hData);
//
// Create a hash table
//
ULONG HashTabCreate (
IN ULONG ulSize,
IN HashTabHashFuncPtr pHash,
IN HashTabKeyCompFuncPtr pCompKeyAndElem,
IN OPTIONAL HashTabAllocFuncPtr pAlloc,
IN OPTIONAL HashTabFreeFuncPtr pFree,
IN OPTIONAL HashTabFreeElemFuncPtr pFreeElem,
OUT HANDLE * phHashTab );
//
// Clean up the hash table.
//
ULONG HashTabCleanup (
IN HANDLE hHashTab );
//
// Insert data in a hash table under the given key
//
ULONG HashTabInsert (
IN HANDLE hHashTab,
IN HANDLE hKey,
IN HANDLE hData );
//
// Removes the data associated with the given key
//
ULONG HashTabRemove (
IN HANDLE hHashTab,
IN HANDLE hKey);
//
// Search in the tree for the data associated with the given key
//
ULONG HashTabFind (
IN HANDLE hHashTab,
IN HANDLE hKey,
OUT HANDLE * phData );
//
// Find out how many elements are stored in the hash table
//
ULONG HashTabGetCount(
IN HANDLE hHashTab,
OUT ULONG* lpdwCount );
#ifdef __cplusplus
}
#endif
#endif