44struct Vector* newVector_(
int elSize,
int initSize,
char *,
int);
45#define newVector(type, initSize) \
46 newVector_((int)sizeof(type), initSize,__FILE__,__LINE__)
48#if defined(WRAP_MALLOC) || defined(DEBUG_MALLOC)
49 void deleteVectorDebug_(
char *file,
int line,
int elSize,
struct Vector**);
50 #define deleteVector(type, me) deleteVectorDebug_(__FILE__,__LINE__,(int)sizeof(type), &(me))
52 void deleteVector_(
int elSize,
struct Vector**);
53 #define deleteVector(type, me) deleteVector_((int)sizeof(type), ((struct Vector**)(&me)))
57void vector_ensureSpace_(
int,
struct Vector*,
char *fi,
int line);
60#define vector_get(type, me, ind) \
61 ((type*)((struct Vector*)me)->data)[ind]
64#define vector_get_ptr(type, me, ind) \
65 &((type*)((struct Vector*)me)->data)[ind]
69#define vector_set(type,me,element,value) \
70 ((type*)((struct Vector *) (me))->data)[element]=value
72void vector_removeElement(
int elSize,
struct Vector* myp,
int element);
73#define vector_remove_elem(type,me,element) \
74 vector_removeElement((int)sizeof(type),me,element)
77#define vectorSize(me) \
78 (((struct Vector*)me)->n)
81#define vector_back(type, me) \
82 vector_get(type, me, vectorSize(me)-1)
85#define vector_empty(me) \
89void vector_shrink_(
int,
struct Vector*);
90#define vector_shrink(type, me) \
91 vector_shrink_((int)sizeof(type), me)
94 void vector_clear(
struct Vector* me);
97#define vector_pushBack(type, me, el) \
99 vector_ensureSpace_((int)sizeof(type), me,__FILE__,__LINE__); \
100 ASSERT(((struct Vector*)me)->n<((struct Vector*)me)->allocn); \
101 vector_get(type, me, ((struct Vector*)me)->n)=el; \
102 ++((struct Vector*)me)->n; \
106void vector_popBack_(
struct Vector*,
size_t count);
107#define vector_popBack(type, me) \
109 ASSERT(!vector_empty(me)); \
110 --((struct Vector*)me)->n; \
112#define vector_popBackN(type, me, popn) \
114 ASSERT(popn<=vectorSize(me)); \
115 ((struct Vector*)me)->n-=popn; \
119void* vector_releaseData_(
int,
struct Vector*);
120#define vector_releaseData(type, me) \
121 vector_releaseData_((int)sizeof(type), me)
131#define newStack(type) \
133#define deleteStack(type, me) \
134 deleteVector(type, me)
135#define clearStack(me) \
139#define stack_push(type, me, el) \
140 vector_pushBack(type, me, el)
141#define stack_pop(type, me) \
142 vector_popBack(type, me)
145#define stack_top(type, me) \
146 vector_get(type, me, vectorSize(me)-1)
149#define stack_empty(me) \