itemarr.h

Go to the documentation of this file.
#ifndef __ITEMARR_H__
#define __ITEMARR_H__

#include "user.h"
typedef struct _ITEMLINK{
 DWORD cur;
 DWORD size;
 struct _ITEMLINK *next;
} ITEMLINK;

typedef struct{
 LPBYTE array;
 BOOL bFixed;
 ITEMLINK *first;
 ITEMLINK *last;
 DWORD length;
 DWORD size;
 DWORD szItem;
 DWORD szRef;
 DWORD szInit;
 DWORD szGrow;
} ITEMARRAY;

typedef struct{
 DWORD szRef;
 ITEMARRAY ia;
} ITEMSTACK;

#define ISARRAY(a,type)  (a && (a)->szItem==sizeof(type))

#define ItemArrayClear(a)  ((a) ? 0 : ((a)->length=0))

#define ItemArrayInit(ia,sz)  ItemArrayInitEx(ia,sz,0,0)

#define ItemArrayInitFixed(ia,sz)  ItemArrayInitFixedEx(ia,sz,128,256)

LPVOID ItemArrayPtr(ITEMARRAY *ia, int i);
BOOL ItemArrayInitEx(ITEMARRAY *ia, DWORD sz, DWORD init, DWORD grow);
BOOL ItemArrayInitFixedEx(ITEMARRAY *ia, DWORD sz, DWORD init, DWORD grow);
void ItemArrayRemoveItem(ITEMARRAY *ia, LONG idx);
LPVOID ItemArraySearch(ITEMARRAY *ia, LPVOID key, int (*cmp)(LPVOID,LPVOID));
LONG ItemArraySearchIndex(ITEMARRAY *ia, LPVOID key, int (*cmp)(LPVOID,LPVOID));
#ifndef DBGALLOC

LPVOID ItemArrayAllocOnePtr(ITEMARRAY *ia);
LONG ItemArrayAllocOne(ITEMARRAY *ia);
LPVOID ItemArrayAllocManyPtr(ITEMARRAY *ia, DWORD sz);
LONG ItemArrayAllocMany(ITEMARRAY *ia, DWORD sz);
void ItemArrayFree(ITEMARRAY *ia);
#else
#define ItemArrayFree(ia)           _ItemArrayFree(ia,__FILE__,__LINE__);
#define ItemArrayAllocOne(ia)       _ItemArrayAllocOne(ia,__FILE__,__LINE__);
#define ItemArrayAllocOnePtr(ia)    _ItemArrayAllocOnePtr(ia,__FILE__,__LINE__);
#define ItemArrayAllocMany(ia,s)    _ItemArrayAllocMany(ia,s,__FILE__,__LINE__);
#define ItemArrayAllocManyPtr(ia,s) _ItemArrayAllocManyPtr(ia,s,__FILE__,__LINE__);
void _ItemArrayFree(ITEMARRAY *ia, LPTSTR f, DWORD ln);
LPVOID _ItemArrayAllocOnePtr(ITEMARRAY *ia, LPTSTR f, DWORD ln);
LONG _ItemArrayAllocOne(ITEMARRAY *ia, LPTSTR f, DWORD ln);
LPVOID _ItemArrayAllocManyPtr(ITEMARRAY *ia, DWORD sz, LPTSTR f, DWORD ln);
LONG _ItemArrayAllocMany(ITEMARRAY *ia, DWORD sz, LPTSTR f, DWORD ln);
#endif

typedef struct{
 LONG left;
 LONG right;
} STRINGTREEITEM;

typedef struct{
 LPBYTE strings;
 LPVOID array;
 DWORD szItem;
 LPDWORD offsets;
 STRINGTREEITEM *nodes;
 BOOL ignoreCase;
 DWORD szStrings;
 DWORD lenStrings;
 LONG root;
 DWORD size;
 DWORD init;
 DWORD length;
 DWORD grow;
} STRINGTREE;

#define StringTreeInit(ia,init,grow)  StringTreeInitEx(ia,0,init,grow,FALSE)

LPVOID StringTreeGetData(STRINGTREE *st, LONG i);
LPVOID StringTreeFindData(STRINGTREE *st, LPCTSTR str);
BOOL StringTreeInitEx(STRINGTREE *st,DWORD szItem,DWORD init,DWORD grow, BOOL ignoreCase);
LONG StringTreeFindString(STRINGTREE *st, LPCTSTR str);
LPBYTE StringTreeGetString(STRINGTREE *st, LONG i);
LONG StringTreeAddString(STRINGTREE *st, LPCTSTR str);
BOOL StringTreeFree(STRINGTREE *st);

void ItemArraySort(
 ITEMARRAY *ia,
 int (*cmp)(LPVOID,LPVOID)
);

#define MemArrayAlloc(ia,sz)   MemArrayReAlloc(ia,NULL,sz)

LPVOID MemArrayReAlloc(ITEMARRAY *ia, LPVOID pv, DWORD sz);
void MemArrayFreePtr(ITEMARRAY *ia, LPVOID pv);
void MemArrayFreeAll(ITEMARRAY *ia);

BOOL ItemStackInit(ITEMSTACK *stack, DWORD sz);
LPVOID ItemStackGet(ITEMSTACK *stack);
LPVOID ItemStackPush(ITEMSTACK *stack, LPVOID p);
void ItemStackPop(ITEMSTACK *stack);
void ItemStackFree(ITEMSTACK *stack);

#endif

Generated on Thu Mar 27 01:46:53 2008 for Item Arrays by  doxygen 1.4.6-NO