5 #define VectorDef(name, type, defcap) \
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 getVector ## name(Vector ## name *vector, uint index); \
17 void setVector ## name(Vector ## name *vector, uint index, type item); \
18 uint getSizeVector ## name(Vector ## name *vector); \
19 void deleteVector ## name(Vector ## name *vector); \
20 void clearVector ## name(Vector ## name *vector); \
21 void deleteVectorArray ## name(Vector ## name *vector); \
22 type * exposeArray ## name(Vector ## name * vector);
24 #define VectorImpl(name, type, defcap) \
25 Vector ## name * allocDefVector ## name() { \
26 return allocVector ## name(defcap); \
28 Vector ## name * allocVector ## name(uint capacity) { \
29 Vector ## name * tmp = (Vector ## name *)ourmalloc(sizeof(type)); \
31 tmp->capacity = capacity; \
32 tmp->array = (type *) ourcalloc(1, sizeof(type) * capacity); \
35 Vector ## name * allocVectorArray ## name(uint capacity, type * array) { \
36 Vector ## name * tmp = allocVector ## name(capacity); \
37 memcpy(tmp->array, array, capacity * sizeof(type)); \
40 void pushVector ## name(Vector ## name *vector, type item) { \
41 if (vector->size >= vector->capacity) { \
42 uint newcap=vector->capacity * 2; \
43 vector->array=(type *)ourrealloc(vector->array, newcap); \
45 vector->array[vector->size++] = item; \
47 type getVector ## name(Vector ## name * vector, uint index) { \
48 return vector->array[index]; \
50 void setVector ## name(Vector ## name * vector, uint index, type item) { \
51 vector->array[index]=item; \
53 uint getSizeVector ## name(Vector ## name *vector) { \
54 return vector->size; \
56 void deleteVector ## name(Vector ## name *vector) { \
57 ourfree(vector->array); \
60 void clearVector ## name(Vector ## name *vector) { \
63 type * exposeArray ## name(Vector ## name * vector) { \
64 return vector->array; \
66 void deleteVectorArray ## name(Vector ## name *vector) { \
67 ourfree(vector->array); \