|
|
@ -35,7 +35,7 @@ typedef struct { |
|
|
|
} while (0) |
|
|
|
|
|
|
|
#define xc_vector_init(type, vector) xc_vector_init_ex(type, vector, NULL, 0, 0) |
|
|
|
#define xc_vector_pinit(type, vector) xc_vector_init_ex(type, vector, NULL, 0, 1) |
|
|
|
#define xc_vector_init_persistent(type, vector) xc_vector_init_ex(type, vector, NULL, 0, 1) |
|
|
|
|
|
|
|
static inline void xc_vector_destroy_impl(xc_vector_t *vector TSRMLS_DC) |
|
|
|
{ |
|
|
@ -67,17 +67,37 @@ static inline xc_vector_t *xc_vector_check_type_(xc_vector_t *vector, size_t dat |
|
|
|
|
|
|
|
#define xc_vector_data(type, vector) ((type *) xc_vector_check_type_(vector, sizeof(type))->data_) |
|
|
|
|
|
|
|
static void xc_vector_reserve_impl(xc_vector_t *vector, size_t capacity TSRMLS_DC) |
|
|
|
{ |
|
|
|
assert(capacity); |
|
|
|
if (!vector->capacity_) { |
|
|
|
vector->capacity_ = 8; |
|
|
|
} |
|
|
|
while (vector->capacity_ <= capacity) { |
|
|
|
vector->capacity_ <<= 1; |
|
|
|
} |
|
|
|
vector->data_ = perealloc(vector->data_, vector->data_size_ * vector->capacity_, vector->persistent_); |
|
|
|
} |
|
|
|
#define xc_vector_reserve(vector, capacity) xc_vector_reserve_impl(vector, capacity TSRMLS_CC) |
|
|
|
|
|
|
|
static void xc_vector_resize_impl(xc_vector_t *vector, size_t size TSRMLS_DC) |
|
|
|
{ |
|
|
|
assert(size); |
|
|
|
xc_vector_reserve(vector, size); |
|
|
|
vector->size_ = size; |
|
|
|
} |
|
|
|
#define xc_vector_resize(vector, size) xc_vector_resize_impl(vector, size TSRMLS_CC) |
|
|
|
|
|
|
|
static inline void xc_vector_check_reserve_(xc_vector_t *vector TSRMLS_DC) |
|
|
|
{ |
|
|
|
if (vector->size_ == vector->capacity_) { |
|
|
|
if (vector->capacity_) { |
|
|
|
vector->capacity_ <<= 1; |
|
|
|
vector->data_ = perealloc(vector->data_, vector->data_size_ * vector->capacity_, vector->persistent_); |
|
|
|
} |
|
|
|
else { |
|
|
|
vector->capacity_ = 8; |
|
|
|
vector->data_ = pemalloc(vector->data_size_ * vector->capacity_, vector->persistent_); |
|
|
|
} |
|
|
|
vector->data_ = perealloc(vector->data_, vector->data_size_ * vector->capacity_, vector->persistent_); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|