21#ifndef ABC__misc__vec__vecAtt_h
22#define ABC__misc__vec__vecAtt_h
73 void*(*pFuncStartObj)(
void *);
97 int nSize,
void * pMan,
98 void (*pFuncFreeMan) (
void *),
99 void*(*pFuncStartObj)(
void *),
100 void (*pFuncFreeObj) (
void *,
void *) )
106 p->pFuncFreeMan = pFuncFreeMan;
107 p->pFuncStartObj = pFuncStartObj;
108 p->pFuncFreeObj = pFuncFreeObj;
109 p->nCap = nSize? nSize : 16;
111 memset(
p->pArrayPtr, 0,
sizeof(
void *) * (
size_t)
p->nCap );
126static inline void * Vec_AttFree(
Vec_Att_t *
p,
int fFreeMan )
132 if (
p->pFuncFreeObj )
135 for ( i = 0; i <
p->nCap; i++ )
136 if (
p->pArrayPtr[i] )
137 p->pFuncFreeObj(
p->pMan,
p->pArrayPtr[i] );
140 pMan = fFreeMan? NULL :
p->pMan;
141 if (
p->pMan && fFreeMan )
142 p->pFuncFreeMan(
p->pMan );
159static inline void Vec_AttClear(
Vec_Att_t *
p )
162 if (
p->pFuncFreeObj )
165 if (
p->pFuncFreeObj )
166 for ( i = 0; i <
p->nCap; i++ )
167 if (
p->pArrayPtr[i] )
168 p->pFuncFreeObj(
p->pMan,
p->pArrayPtr[i] );
170 memset(
p->pArrayPtr, 0,
sizeof(
void *) * (
size_t)
p->nCap );
184static inline void Vec_AttFreeEntry(
Vec_Att_t *
p,
int i )
190 if (
p->pArrayPtr[i] &&
p->pFuncFreeObj )
191 p->pFuncFreeObj(
p->pMan, (
void *)
p->pArrayPtr[i] );
193 p->pArrayPtr[i] = NULL;
207static inline void Vec_AttGrow(
Vec_Att_t *
p,
int nCapMin )
209 if (
p->nCap >= nCapMin )
212 memset(
p->pArrayPtr +
p->nCap, 0,
sizeof(
void *) * (
size_t)(nCapMin -
p->nCap) );
227static inline void Vec_AttWriteEntry(
Vec_Att_t *
p,
int i,
void * pEntry )
230 assert(
p->pFuncStartObj == NULL );
232 Vec_AttGrow(
p, (2 *
p->nCap > i)? 2 *
p->nCap : i + 10 );
233 p->pArrayPtr[i] = pEntry;
247static inline void * Vec_AttEntry(
Vec_Att_t *
p,
int i )
251 Vec_AttGrow(
p, (2 *
p->nCap > i)? 2 *
p->nCap : i + 10 );
252 if (
p->pArrayPtr[i] == NULL &&
p->pFuncStartObj )
253 p->pArrayPtr[i] =
p->pFuncStartObj(
p->pMan );
254 return p->pArrayPtr[i];
268static inline void * Vec_AttMan(
Vec_Att_t *
p )
284static inline void ** Vec_AttArray(
Vec_Att_t *
p )
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
void(* pFuncFreeMan)(void *)
void(* pFuncFreeObj)(void *, void *)
Vec_AttrType_t
INCLUDES ///.
struct Vec_Att_t_ Vec_Att_t
BASIC TYPES ///.