#ifndef RXPUTIL_H #define RXPUTIL_H #define Vector(type, name) \ int name##_count, name##_alloc; \ type *name #define VectorInit(v) \ (v##_count = v##_alloc = 0, v = 0) #define VectorAlloc(v, n) \ (v##_alloc = n, \ (v = Realloc(v, v##_alloc * sizeof(*v))) ? 1 : 0) #define VectorPush(v, value) \ ((v##_count < v##_alloc || \ (v = VectorExtend(v))) ? \ (v[v##_count++] = (value), 1) : \ 0) #define VectorPushNothing(v) \ ((v##_count < v##_alloc || \ (v = VectorExtend(v))) ? \ (v##_count++, 1) : \ 0) #define VectorPop(v) (v##_count--) #define VectorLast(v) (v[v##_count-1]) #define VectorExtend(v) \ (v##_alloc = (v##_alloc == 0 ? 8 : v##_alloc * 2), \ Realloc(v, v##_alloc * sizeof(*v))) #define VectorCount(v) v##_count #endif /* RXPUTIL_H */