|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
hash.h
Abstract:
Replacement routines for the string table functions in setupapi.dll. This routines are much more easy to work with.
Author:
Jim Schmidt (jimschm) 22-Dec-1998
Revision History:
ovidiut 11-Oct-1999 Updated for new coding conventions and Win64 compliance
--*/
//
// Includes
//
// None
//
// Strings
//
// None
//
// Constants
//
// None
//
// Macros
//
#define CASE_SENSITIVE TRUE
#define CASE_INSENSITIVE FALSE
//
// Types
//
typedef const void *HASHTABLE;
typedef const void *HASHITEM;
typedef struct {
PCSTR String; PCVOID ExtraData; HASHITEM Index;
HASHTABLE Internal;
} HASHTABLE_ENUMA, *PHASHTABLE_ENUMA;
typedef struct { PCWSTR String; PCVOID ExtraData; HASHITEM Index;
HASHTABLE Internal;
} HASHTABLE_ENUMW, *PHASHTABLE_ENUMW;
typedef BOOL (*PHASHTABLE_CALLBACK_ROUTINEA)( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCSTR String, IN PVOID ExtraData, IN UINT ExtraDataSize, IN LPARAM lParam );
typedef BOOL (*PHASHTABLE_CALLBACK_ROUTINEW)( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCWSTR String, IN PVOID ExtraData, IN UINT ExtraDataSize, IN LPARAM lParam );
//
// Globals
//
// None
//
// Macro expansion list
//
// None
//
// Function prototypes and wrapper macros
//
HASHTABLE HtAllocExAW ( IN BOOL Unicode, IN BOOL ExternalStrings, IN UINT ExtraDataSize, IN UINT BucketCount OPTIONAL );
#define HtAllocA() HtAllocExAW(FALSE,FALSE,0,0)
#define HtAllocW() HtAllocExAW(TRUE,FALSE,0,0)
#define HtAllocWithDataA(size) HtAllocExAW(FALSE,FALSE,size,0)
#define HtAllocWithDataW(size) HtAllocExAW(TRUE,FALSE,size,0)
#define HtAllocExA(datasize,bucketcount) HtAllocExAW(FALSE,FALSE,size,bucketcount)
#define HtAllocExW(datasize,bucketcount) HtAllocExAW(TRUE,FALSE,size,bucketcount)
#define HtAllocExternStrA() HtAllocExAW(FALSE,TRUE,0,0)
#define HtAllocExternStrW() HtAllocExAW(TRUE,TRUE,0,0)
#define HtAllocExternStrWithDataA(size) HtAllocExAW(FALSE,TRUE,0,0)
#define HtAllocExternStrWithDataW(size) HtAllocExAW(TRUE,TRUE,0,0)
#define HtAllocExternStrExA(size,bucketcount) HtAllocExAW(FALSE,TRUE,size,bucketcount)
#define HtAllocExternStrExW(size,bucketcount) HtAllocExAW(TRUE,TRUE,size,bucketcount)
VOID HtFree ( IN HASHTABLE HashTable );
HASHITEM HtAddStringExA ( IN HASHTABLE HashTable, IN PCSTR String, IN PCVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtAddStringA(table,string) HtAddStringExA(table,string,NULL,CASE_INSENSITIVE)
HASHITEM HtAddStringExW ( IN HASHTABLE HashTable, IN PCWSTR String, IN PCVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtAddStringW(table,string) HtAddStringExW(table,string,NULL,CASE_INSENSITIVE)
HASHITEM HtFindStringExA ( IN HASHTABLE HashTable, IN PCSTR String, OUT PVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtFindStringA(table,string) HtFindStringExA(table,string,NULL,CASE_INSENSITIVE)
HASHITEM HtFindStringExW ( IN HASHTABLE HashTable, IN PCWSTR String, OUT PVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtFindStringW(table,string) HtFindStringExW(table,string,NULL,CASE_INSENSITIVE)
HASHITEM HtFindPrefixExA ( IN HASHTABLE HashTable, IN PCSTR StringStart, IN PCSTR BufferEnd, OUT PVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtFindPrefixA(table,str,end) HtFindPrefixExA(table,str,end,NULL,CASE_INSENSITIVE)
HASHITEM HtFindPrefixExW ( IN HASHTABLE HashTable, IN PCWSTR StringStart, IN PCWSTR BufferEnd, OUT PVOID ExtraData, OPTIONAL IN BOOL CaseSensitive );
#define HtFindPrefixW(table,str,end) HtFindPrefixExW(table,str,end,NULL,CASE_INSENSITIVE)
BOOL HtGetStringData ( IN HASHTABLE HashTable, IN HASHITEM Index, OUT PCVOID *ExtraData );
BOOL HtCopyStringData ( IN HASHTABLE HashTable, IN HASHITEM Index, OUT PVOID ExtraData );
BOOL HtSetStringData ( IN HASHTABLE HashTable, IN HASHITEM Index, IN PCVOID ExtraData );
PCSTR HtGetStringFromItemA ( IN HASHITEM Item );
PCWSTR HtGetStringFromItemW ( IN HASHITEM Item );
BOOL EnumFirstHashTableStringA ( OUT PHASHTABLE_ENUMA EnumPtr, IN HASHTABLE HashTable );
BOOL EnumFirstHashTableStringW ( OUT PHASHTABLE_ENUMW EnumPtr, IN HASHTABLE HashTable );
BOOL EnumNextHashTableStringA ( IN OUT PHASHTABLE_ENUMA EnumPtr );
BOOL EnumNextHashTableStringW ( IN OUT PHASHTABLE_ENUMW EnumPtr );
BOOL EnumHashTableWithCallbackA ( IN HASHTABLE Table, IN PHASHTABLE_CALLBACK_ROUTINEA Proc, IN LPARAM lParam );
BOOL EnumHashTableWithCallbackW ( IN HASHTABLE Table, IN PHASHTABLE_CALLBACK_ROUTINEW Proc, IN LPARAM lParam );
//
// Macro expansion definition
//
// None
//
// A & W macros
//
#ifdef UNICODE
#define HASHTABLE_ENUM HASHTABLE_ENUMW
#define PHASH_CALLBACK_ROUTINE PHASH_CALLBACK_ROUTINEW
#define HtAlloc HtAllocW
#define HtAllocWithData HtAllocWithDataW
#define HtAllocEx HtAllocExW
#define HtAllocExternStr HtAllocExternStrW
#define HtAllocExternStrWithData HtAllocExternStrWithDataW
#define HtAllocExternStrEx HtAllocExternStrExW
#define HtAddString HtAddStringW
#define HtAddStringEx HtAddStringExW
#define HtFindString HtFindStringW
#define HtFindStringEx HtFindStringExW
#define HtFindPrefix HtFindPrefixW
#define HtFindPrefixEx HtFindPrefixExW
#define HtGetStringFromItem HtGetStringFromItemW
#define EnumFirstHashTableString EnumFirstHashTableStringW
#define EnumNextHashTableString EnumNextHashTableStringW
#define EnumHashTableWithCallback EnumHashTableWithCallbackW
#else
#define HASHTABLE_ENUM HASHTABLE_ENUMA
#define PHASH_CALLBACK_ROUTINE PHASH_CALLBACK_ROUTINEA
#define HtAlloc HtAllocA
#define HtAllocWithData HtAllocWithDataA
#define HtAllocEx HtAllocExA
#define HtAllocExternStr HtAllocExternStrA
#define HtAllocExternStrWithData HtAllocExternStrWithDataA
#define HtAllocExternStrEx HtAllocExternStrExA
#define HtAddString HtAddStringA
#define HtAddStringEx HtAddStringExA
#define HtFindString HtFindStringA
#define HtFindStringEx HtFindStringExA
#define HtFindPrefix HtFindPrefixA
#define HtFindPrefixEx HtFindPrefixExA
#define HtGetStringFromItem HtGetStringFromItemA
#define EnumFirstHashTableString EnumFirstHashTableStringA
#define EnumNextHashTableString EnumNextHashTableStringA
#define EnumHashTableWithCallback EnumHashTableWithCallbackA
#endif
|