头文件
#ifndef __BlockVector_H_
#define __BlockVector_H_
#define BLOCK_VECTOR_DEF(Type) \
struct jdaVector##Type { \
int size; \
int capacity; \
Type *data; \
}
#define BLOCK_VECTOR(Type) \
struct jdaVector##Type
#define BLOCK_VECTOR_NEW(v, size_, Type) \
do { \
(v).size = 0; \
(v).capacity = 2 * size_; \
(v).data = (Type*)malloc((v).capacity * sizeof((v).data[0])); \
} while (0)
#define BLOCK_VECTOR_INSERT(v, value, Type) \
do { \
(v).size++; \
if ((v).size > (v).capacity) { \
int capacity_new = 2 * (v).capacity; \
(v).data = (Type*)realloc((v).data, capacity_new * sizeof(value)); \
(v).capacity = capacity_new; \
} \
(v).data[(v).size - 1] = (value); \
} while (0)
#define BLOCK_VECTOR_INSERT_MORE(v, values, size_, Type) \
do { \
int size_new; \
size_new = (v).size + size_; \
if (size_new > (v).capacity) { \
int capacity_new = 2 * (((v).capacity < size_new) ? size_new : (v).capacity); \
(v).data = (Type*)realloc((v).data, capacity_new * sizeof((values)[0])); \
(v).capacity = capacity_new; \
} \
memcpy(&(v).data[(v).size], values, size_ * sizeof((values)[0])); \
(v).size = size_new; \
} while (0)
#define BLOCK_VECTOR_DEFAULT_LEN 200
#define BLOCK_VECTOR_RELEASE(v) \
do{ if ((v).data) free((v).data);} \
while(0)
#define BLOCK_VECTOR_CLEAR(v) \
do{ \
(v).size = 0; \
} \
while(0)
BLOCK_VECTOR_DEF(int);
BLOCK_VECTOR_DEF(float);
#endif