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);
58void testVector_(
int elSize,
struct Vector* me);
59#define testVector(type,me) \
60 testVector_(sizeof(type),me);
63#define vector_get(type, me, ind) \
64 ((type*)((struct Vector*)me)->data)[ind]
67#define vector_get_ptr(type, me, ind) \
68 &((type*)((struct Vector*)me)->data)[ind]
72#define vector_set(type,me,element,value) \
73 ((type*)((struct Vector *) (me))->data)[element]=value
75void vector_removeElement(
int elSize,
struct Vector* myp,
int element);
76#define vector_remove_elem(type,me,element) \
77 vector_removeElement((int)sizeof(type),me,element)
80#define vectorSize(me) \
81 (((struct Vector*)me)->n)
84#define vector_back(type, me) \
85 vector_get(type, me, vectorSize(me)-1)
88#define vector_empty(me) \
92void vector_shrink_(
int,
struct Vector*);
93#define vector_shrink(type, me) \
94 vector_shrink_((int)sizeof(type), me)
97 void vector_clear(
struct Vector* me);
100#define vector_pushBack(type, me, el) \
102 vector_ensureSpace_((int)sizeof(type), me,__FILE__,__LINE__); \
103 ASSERT(((struct Vector*)me)->n<((struct Vector*)me)->allocn); \
104 vector_get(type, me, ((struct Vector*)me)->n)=el; \
105 ++((struct Vector*)me)->n; \
109void vector_popBack_(
struct Vector*,
size_t count);
110#define vector_popBack(type, me) \
112 ASSERT(!vector_empty(me)); \
113 --((struct Vector*)me)->n; \
115#define vector_popBackN(type, me, popn) \
117 ASSERT(popn<=vectorSize(me)); \
118 ((struct Vector*)me)->n-=popn; \
122void* vector_releaseData_(
int,
struct Vector*);
123#define vector_releaseData(type, me) \
124 vector_releaseData_((int)sizeof(type), me)
131typedef struct Vector Stack;
134#define newStack(type) \
136#define deleteStack(type, me) \
137 deleteVector(type, me)
138#define clearStack(me) \
142#define stack_push(type, me, el) \
143 vector_pushBack(type, me, el)
144#define stack_pop(type, me) \
145 vector_popBack(type, me)
148#define stack_top(type, me) \
149 vector_get(type, me, vectorSize(me)-1)
151#define stack_top_ptr(type, me) \
152 vector_get_ptr(type, me, vectorSize(me)-1)
156#define stack_empty(me) \