//******************************************************************************************* // // Filename : Dpda.h // // Definitions of DPA routines // // Copyright (c) 1994 - 1996 Microsoft Corporation. All rights reserved // //******************************************************************************************* #ifndef _DPDA_H_ #define _DPDA_H_ #ifdef __cplusplus extern "C" { #endif // Dynamic pointer array typedef struct _DPA * HDPA; HDPA DPA_Create(int cItemGrow); HDPA DPA_CreateEx(int cpGrow, HANDLE hheap); BOOL DPA_Destroy(HDPA hdpa); HDPA DPA_Clone(HDPA hdpa, HDPA hdpaNew); void * DPA_GetPtr(HDPA hdpa, int i); int DPA_GetPtrIndex(HDPA hdpa, LPVOID p); BOOL DPA_Grow(HDPA pdpa, int cp); BOOL DPA_SetPtr(HDPA hdpa, int i, LPVOID p); int DPA_InsertPtr(HDPA hdpa, int i, LPVOID p); void * DPA_DeletePtr(HDPA hdpa, int i); BOOL DPA_DeleteAllPtrs(HDPA hdpa); #define DPA_GetPtrCount(hdpa) (*(int *)(hdpa)) #define DPA_GetPtrPtr(hdpa) (*((LPVOID * *)((BYTE *)(hdpa) + sizeof(int)))) #define DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i]) typedef int (CALLBACK *PFNDPACOMPARE)(LPVOID p1, LPVOID p2, LPARAM lParam); BOOL DPA_Sort(HDPA hdpa, PFNDPACOMPARE pfnCompare, LPARAM lParam); typedef struct _DSA * HDSA; // Search array. If DPAS_SORTED, then array is assumed to be sorted // according to pfnCompare, and binary search algorithm is used. // Otherwise, linear search is used. // // Searching starts at iStart (-1 to start search at beginning). // // DPAS_INSERTBEFORE/AFTER govern what happens if an exact match is not // found. If neither are specified, this function returns -1 if no exact // match is found. Otherwise, the index of the item before or after the // closest (including exact) match is returned. // // Search option flags // #define DPAS_SORTED 0x0001 #define DPAS_INSERTBEFORE 0x0002 #define DPAS_INSERTAFTER 0x0004 int DPA_Search(HDPA hdpa, LPVOID pFind, int iStart, PFNDPACOMPARE pfnCompare, LPARAM lParam, UINT options); #ifdef __cplusplus } #endif #endif // _DPDA_H_