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 initVector ## name(Vector ## name * vector, uint capacity); \
27 void initDefVector ## name(Vector ## name * vector); \
28 void initVectorArray ## 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 *) ourmalloc(sizeof(type) * capacity); \
41 Vector ## name * allocVectorArray ## name(uint capacity, type * array) { \
42 Vector ## name * tmp = allocVector ## name(capacity); \
43 tmp->size = 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 - 1]; \
53 void setSizeVector ## name(Vector ## name * vector, uint size) { \
54 if (size <= vector->size) { \
55 vector->size = size; \
57 } else if (size > vector->capacity) { \
58 vector->array = (type *)ourrealloc(vector->array, size * sizeof(type)); \
59 vector->capacity = size; \
61 bzero(&vector->array[vector->size], (size - vector->size) * sizeof(type)); \
62 vector->size = size; \
64 void pushVector ## name(Vector ## name * vector, type item) { \
65 if (vector->size >= vector->capacity) { \
66 uint newcap = vector->capacity << 1; \
67 vector->array = (type *)ourrealloc(vector->array, newcap * sizeof(type)); \
68 vector->capacity = newcap; \
70 vector->array[vector->size++] = item; \
72 type getVector ## name(Vector ## name * vector, uint index) { \
73 return vector->array[index]; \
75 void setVector ## name(Vector ## name * vector, uint index, type item) { \
76 vector->array[index] = item; \
78 uint getSizeVector ## name(Vector ## name * vector) { \
79 return vector->size; \
81 void deleteVector ## name(Vector ## name * vector) { \
82 ourfree(vector->array); \
85 void clearVector ## name(Vector ## name * vector) { \
88 type *exposeArray ## name(Vector ## name * vector) { \
89 return vector->array; \
91 void deleteVectorArray ## name(Vector ## name * vector) { \
92 ourfree(vector->array); \
94 void initVector ## name(Vector ## name * vector, uint capacity) { \
96 vector->capacity = capacity; \
97 vector->array = (type *) ourmalloc(sizeof(type) * capacity); \
99 void initDefVector ## name(Vector ## name * vector) { \
100 initVector ## name(vector, defcap); \
102 void initVectorArray ## name(Vector ## name * vector, uint capacity, type * array) { \
103 initVector ## name(vector, capacity); \
104 vector->size = capacity; \
105 memcpy(vector->array, array, capacity * sizeof(type)); \