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 deleteVector ## name(Vector ## name *vector); \
22 void clearVector ## name(Vector ## name *vector); \
23 void deleteVectorArray ## name(Vector ## name *vector); \
24 type * exposeArray ## name(Vector ## name * vector); \
25 void allocInlineVector ## name(Vector ## name * vector, uint capacity); \
26 void allocInlineDefVector ## name(Vector ## name * vector); \
27 void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array);
29 #define VectorImpl(name, type, defcap) \
30 Vector ## name * allocDefVector ## name() { \
31 return allocVector ## name(defcap); \
33 Vector ## name * allocVector ## name(uint capacity) { \
34 Vector ## name * tmp = (Vector ## name *)ourmalloc(sizeof(Vector ## name)); \
36 tmp->capacity = capacity; \
37 tmp->array = (type *) ourcalloc(1, sizeof(type) * capacity); \
40 Vector ## name * allocVectorArray ## name(uint capacity, type * array) { \
41 Vector ## name * tmp = allocVector ## name(capacity); \
43 memcpy(tmp->array, array, capacity * sizeof(type)); \
46 void popVector ## name(Vector ## name *vector) { \
49 type lastVector ## name(Vector ## name *vector) { \
50 return vector->array[vector->size]; \
52 void pushVector ## name(Vector ## name *vector, type item) { \
53 if (vector->size >= vector->capacity) { \
54 uint newcap=vector->capacity * 2; \
55 vector->array=(type *)ourrealloc(vector->array, newcap); \
57 vector->array[vector->size++] = item; \
59 type getVector ## name(Vector ## name * vector, uint index) { \
60 return vector->array[index]; \
62 void setVector ## name(Vector ## name * vector, uint index, type item) { \
63 vector->array[index]=item; \
65 uint getSizeVector ## name(Vector ## name *vector) { \
66 return vector->size; \
68 void deleteVector ## name(Vector ## name *vector) { \
69 ourfree(vector->array); \
72 void clearVector ## name(Vector ## name *vector) { \
75 type * exposeArray ## name(Vector ## name * vector) { \
76 return vector->array; \
78 void deleteVectorArray ## name(Vector ## name *vector) { \
79 ourfree(vector->array); \
81 void allocInlineVector ## name(Vector ## name * vector, uint capacity) { \
83 vector->capacity = capacity; \
84 vector->array = (type *) ourcalloc(1, sizeof(type) * capacity); \
86 void allocInlineDefVector ## name(Vector ## name * vector) { \
87 allocInlineVector ## name(vector, defcap); \
89 void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array) { \
90 allocInlineVector ##name(vector, capacity); \
91 vector->size=capacity; \
92 memcpy(vector->array, array, capacity * sizeof(type)); \