5 #define VectorDef(name, type) \
6 struct Vector ## name { \
11 typedef struct Vector ## name Vector ## name; \
12 Vector ## name * allocVector ## name(uint capacity); \
13 Vector ## name * allocDefVector ## name(); \
14 Vector ## name * allocVectorArray ## name(uint capacity, type * array); \
15 void pushVector ## name(Vector ## name *vector, type item); \
16 type lastVector ## name(Vector ## name *vector); \
17 void popVector ## name(Vector ## name *vector); \
18 type getVector ## name(Vector ## name *vector, uint index); \
19 void setVector ## name(Vector ## name *vector, uint index, type item); \
20 uint getSizeVector ## name(Vector ## name *vector); \
21 void setSizeVector ## name(Vector ## name *vector, uint size); \
22 void deleteVector ## name(Vector ## name *vector); \
23 void clearVector ## name(Vector ## name *vector); \
24 void deleteVectorArray ## name(Vector ## name *vector); \
25 type * exposeArray ## name(Vector ## name * vector); \
26 void allocInlineVector ## name(Vector ## name * vector, uint capacity); \
27 void allocInlineDefVector ## name(Vector ## name * vector); \
28 void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array);
30 #define VectorImpl(name, type, defcap) \
31 Vector ## name * allocDefVector ## name() { \
32 return allocVector ## name(defcap); \
34 Vector ## name * allocVector ## name(uint capacity) { \
35 Vector ## name * tmp = (Vector ## name *)ourmalloc(sizeof(Vector ## name)); \
37 tmp->capacity = capacity; \
38 tmp->array = (type *) ourcalloc(1, sizeof(type) * capacity); \
41 Vector ## name * allocVectorArray ## name(uint capacity, type * array) { \
42 Vector ## name * tmp = allocVector ## name(capacity); \
44 memcpy(tmp->array, array, capacity * sizeof(type)); \
47 void popVector ## name(Vector ## name *vector) { \
50 type lastVector ## name(Vector ## name *vector) { \
51 return vector->array[vector->size]; \
53 void setSizeVector ## name(Vector ## name *vector, uint size) { \
54 if (size <= vector->size) { \
57 } else if (size > vector->capacity) { \
58 vector->array=(type *)ourrealloc(vector->array, size); \
59 vector->capacity=size; \
61 bzero(&vector->array[vector->size], (size-vector->size)*sizeof(type)); \
64 void pushVector ## name(Vector ## name *vector, type item) { \
65 if (vector->size >= vector->capacity) { \
66 uint newcap=vector->capacity * 2; \
67 vector->array=(type *)ourrealloc(vector->array, newcap); \
69 vector->array[vector->size++] = item; \
71 type getVector ## name(Vector ## name * vector, uint index) { \
72 return vector->array[index]; \
74 void setVector ## name(Vector ## name * vector, uint index, type item) { \
75 vector->array[index]=item; \
77 uint getSizeVector ## name(Vector ## name *vector) { \
78 return vector->size; \
80 void deleteVector ## name(Vector ## name *vector) { \
81 ourfree(vector->array); \
84 void clearVector ## name(Vector ## name *vector) { \
87 type * exposeArray ## name(Vector ## name * vector) { \
88 return vector->array; \
90 void deleteVectorArray ## name(Vector ## name *vector) { \
91 ourfree(vector->array); \
93 void allocInlineVector ## name(Vector ## name * vector, uint capacity) { \
95 vector->capacity = capacity; \
96 vector->array = (type *) ourcalloc(1, sizeof(type) * capacity); \
98 void allocInlineDefVector ## name(Vector ## name * vector) { \
99 allocInlineVector ## name(vector, defcap); \
101 void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array) { \
102 allocInlineVector ##name(vector, capacity); \
103 vector->size=capacity; \
104 memcpy(vector->array, array, capacity * sizeof(type)); \