Likewise Base Runtime Library
hash.h File Reference

Hash APIs. More...

#include <lw/types.h>
#include <lw/attrs.h>

Data Structures

struct  PLW_HASHTABLE_NODE
 Hash table node structure. More...
 
struct  PLW_HASHTABLE_ITER
 Hash table iterator. More...
 
struct  PLW_HASHMAP_ITER
 Hash map iterator. More...
 
struct  PLW_HASHMAP_PAIR
 Hash pair. More...
 

Macros

#define LW_HASHTABLE_ITER_INIT
 Hash table iterator initializer. More...
 
#define LW_HASHMAP_ITER_INIT
 Hash map iterator initializer. More...
 
#define LwRtlHashDigestCString   LwRtlHashDigestPstr
 
#define LwRtlHashDigestWC16String   LwRtlHashDigestPwstr
 
#define LwRtlHashDigestCStringCaseless   LwRtlHashDigestPstrCaseless
 
#define LwRtlHashDigestWC16StringCaseless   LwRtlHashDigestPwstrCaseless
 
#define LwRtlHashEqualCString   LwRtlHashEqualPstr
 
#define LwRtlHashEqualWC16String   LwRtlHashEqualPwstr
 
#define LwRtlHashEqualCStringCaseless   LwRtlHashEqualPstrCaseless
 
#define LwRtlHashEqualWC16StringCaseless   LwRtlHashEqualPwstrCaseless
 

Typedefs

typedef struct _LW_HASHTABLE * PLW_HASHTABLE
 Hash table structure. More...
 
typedef struct _LW_HASHTABLE
const * 
PCLW_HASHTABLE
 
typedef LW_PCVOID(* LW_HASH_GET_KEY_FUNCTION )(PLW_HASHTABLE_NODE pNode, LW_PVOID pUserData)
 Key fetch function. More...
 
typedef LW_ULONG(* LW_HASH_DIGEST_FUNCTION )(LW_PCVOID pKey, LW_PVOID pUserData)
 Key digest function. More...
 
typedef LW_BOOLEAN(* LW_HASH_EQUAL_FUNCTION )(LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUserData)
 Key equality function. More...
 
typedef VOID(* LW_HASHNODE_FREE_FUNCTION )(PLW_HASHTABLE_NODE pNode, LW_PVOID pUserData)
 Node free function. More...
 
typedef struct _LW_HASHMAP * PLW_HASHMAP
 Hash map structure. More...
 
typedef struct _LW_HASHMAP const * PCLW_HASHMAP
 
typedef LW_VOID(* LW_HASHPAIR_FREE_FUNCTION )(PLW_HASHMAP_PAIR pPair, LW_PVOID pUserData)
 Pair free function. More...
 

Functions

LW_NTSTATUS LwRtlCreateHashTable (LW_OUT PLW_HASHTABLE *ppTable, LW_IN LW_HASH_GET_KEY_FUNCTION pfnGetKey, LW_IN LW_HASH_DIGEST_FUNCTION pfnDigest, LW_IN LW_HASH_EQUAL_FUNCTION pfnEqual, LW_IN LW_OPTIONAL LW_PVOID pUserData, LW_IN LW_ULONG ulSize)
 Create a hash table. More...
 
VOID LwRtlHashTableInsert (LW_IN LW_OUT PLW_HASHTABLE pTable, LW_IN PLW_HASHTABLE_NODE pNode, LW_OUT LW_OPTIONAL PLW_HASHTABLE_NODE *ppPrevNode)
 Insert node into table. More...
 
VOID LwRtlHashTableResizeAndInsert (LW_IN LW_OUT PLW_HASHTABLE pTable, LW_IN PLW_HASHTABLE_NODE pNode, LW_OUT LW_OPTIONAL PLW_HASHTABLE_NODE *ppPrevNode)
 Insert node into table with automatic resizing. More...
 
LW_NTSTATUS LwRtlHashTableRemove (LW_IN LW_OUT PLW_HASHTABLE pTable, LW_IN PLW_HASHTABLE_NODE pNode)
 Remove node from table. More...
 
LW_NTSTATUS LwRtlHashTableFindKey (LW_IN PCLW_HASHTABLE pTable, LW_OUT LW_OPTIONAL PLW_HASHTABLE_NODE *ppNode, LW_IN LW_PCVOID pKey)
 Find node by key. More...
 
VOID LwRtlHashTableResetIter (LW_OUT PLW_HASHTABLE_ITER pIter)
 Reset hash table iterator. More...
 
PLW_HASHTABLE_NODE LwRtlHashTableIterate (LW_IN PCLW_HASHTABLE pTable, LW_IN LW_OUT PLW_HASHTABLE_ITER pIter)
 Iterate over nodes. More...
 
VOID LwRtlHashTableClear (LW_IN LW_OUT PLW_HASHTABLE pTable, LW_IN LW_HASHNODE_FREE_FUNCTION pFree, LW_IN LW_PVOID pUserData)
 Clear hash table. More...
 
ULONG LwRtlHashTableGetSize (LW_IN PCLW_HASHTABLE pTable)
 Query hash table size. More...
 
ULONG LwRtlHashTableGetCount (LW_IN PCLW_HASHTABLE pTable)
 Query hash table node countsize. More...
 
LW_NTSTATUS LwRtlHashTableResize (LW_IN LW_OUT PLW_HASHTABLE pTable, LW_ULONG ulSize)
 Resize hash table. More...
 
VOID LwRtlFreeHashTable (LW_IN LW_OUT PLW_HASHTABLE *ppTable)
 Free hash table. More...
 
LW_NTSTATUS LwRtlCreateHashMap (LW_OUT PLW_HASHMAP *ppMap, LW_IN LW_HASH_DIGEST_FUNCTION pfnDigest, LW_IN LW_HASH_EQUAL_FUNCTION pfnEqual, LW_IN LW_OPTIONAL LW_PVOID pUserData)
 Create a hash map. More...
 
LW_NTSTATUS LwRtlHashMapInsert (LW_IN LW_OUT PLW_HASHMAP pMap, LW_IN LW_PVOID pKey, LW_IN LW_PVOID pValue, LW_OUT LW_OPTIONAL PLW_HASHMAP_PAIR pPrevPair)
 Insert pair into map. More...
 
LW_NTSTATUS LwRtlHashMapRemove (LW_IN LW_OUT PLW_HASHMAP pMap, LW_IN LW_PCVOID pKey, LW_OUT LW_OPTIONAL PLW_HASHMAP_PAIR pPair)
 Remove pair from map. More...
 
LW_NTSTATUS LwRtlHashMapFindKey (LW_IN PCLW_HASHMAP pMap, LW_OUT LW_OPTIONAL LW_PVOID *ppValue, LW_IN LW_PCVOID pKey)
 Find value by key. More...
 
VOID LwRtlHashMapResetIter (LW_OUT PLW_HASHMAP_ITER pIter)
 Reset hash map iterator. More...
 
BOOLEAN LwRtlHashMapIterate (LW_IN PCLW_HASHMAP pMap, LW_IN LW_OUT PLW_HASHMAP_ITER pIter, LW_OUT PLW_HASHMAP_PAIR pPair)
 Iterate over key-value pairs. More...
 
VOID LwRtlHashMapClear (LW_IN LW_OUT PLW_HASHMAP pMap, LW_IN LW_OPTIONAL LW_HASHPAIR_FREE_FUNCTION pFree, LW_IN LW_OPTIONAL LW_PVOID pUserData)
 Clear hash map. More...
 
ULONG LwRtlHashMapGetCount (LW_IN PCLW_HASHMAP pMap)
 Query hash table pair count. More...
 
VOID LwRtlFreeHashMap (LW_IN LW_OUT PLW_HASHMAP *ppMap)
 Free hash map. More...
 
LW_ULONG LwRtlHashDigestPstr (LW_PCVOID pKey, LW_PVOID pUnused)
 Digest function for multi-byte strings (case sensitive)
 
LW_BOOLEAN LwRtlHashEqualPstr (LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUnused)
 Equality function for multi-byte strings (case sensitive)
 
LW_ULONG LwRtlHashDigestPstrCaseless (LW_PCVOID pKey, LW_PVOID pUnused)
 Digest function for multi-byte strings (case insensitive)
 
LW_BOOLEAN LwRtlHashEqualPstrCaseless (LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUnused)
 Equality function for multi-byte strings (case insensitive)
 
LW_ULONG LwRtlHashDigestPwstr (LW_PCVOID pKey, LW_PVOID pUnused)
 Digest function for UTF-16 strings (case sensitive)
 
LW_BOOLEAN LwRtlHashEqualPwstr (LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUnused)
 Equality function for UTF-16 strings (case sensitive)
 
LW_ULONG LwRtlHashDigestPwstrCaseless (LW_PCVOID pKey, LW_PVOID pUnused)
 Digest function for UTF-16 strings (case insensitive)
 
LW_BOOLEAN LwRtlHashEqualPwstrCaseless (LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUnused)
 Equality function for UTF-16 strings (case insensitive)
 
LW_ULONG LwRtlHashDigestPointer (LW_PCVOID pKey, LW_PVOID pUnused)
 Digest function for generic pointers (address equality)
 
LW_BOOLEAN LwRtlHashEqualPointer (LW_PCVOID pKey1, LW_PCVOID pKey2, LW_PVOID pUnused)
 Equality function for generic pointers (address equality)