27#define BLI_buffer_declare_static(type_, name_, flag_, static_count_) \
29 type_ name_##_static_[static_count_]; \
30 BLI_Buffer name_ = { \
31 (name_##_static_), sizeof(type_), 0, static_count_, BLI_BUFFER_USE_STATIC | (flag_)}
34#define BLI_buffer_declare(type_, name_, flag_) \
36 BLI_Buffer name_ = {NULL, sizeof(type_), 0, 0, (flag_)}
38#define BLI_buffer_at(buffer_, type_, index_) \
39 ((((type_ *)(buffer_) \
40 ->data)[((BLI_assert(sizeof(type_) == (buffer_)->elem_size)), \
41 (BLI_assert((int)(index_) >= 0 && (size_t)(index_) < (buffer_)->count)), \
44#define BLI_buffer_array(buffer_, type_) (&(BLI_buffer_at(buffer_, type_, 0)))
46#define BLI_buffer_resize_data(buffer_, type_, new_count_) \
47 ((BLI_buffer_resize(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))
49#define BLI_buffer_reinit_data(buffer_, type_, new_count_) \
50 ((BLI_buffer_reinit(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))
52#define BLI_buffer_append(buffer_, type_, val_) \
53 ((BLI_buffer_resize(buffer_, (buffer_)->count + 1), \
54 (BLI_buffer_at(buffer_, type_, (buffer_)->count - 1) = val_)))
56#define BLI_buffer_clear(buffer_) \
58 (buffer_)->count = 0; \
82#define BLI_buffer_append_array(buffer_, type_, data_, count_) \
84 type_ *__tmp = (data_); \
85 BLI_assert(sizeof(type_) == (buffer_)->elem_size); \
86 _bli_buffer_append_array(buffer_, __tmp, count_); \
96#define BLI_buffer_free(name_) \
98 _bli_buffer_free(name_); \
106#define BLI_buffer_field_init(name_, type_) \
108 memset((void *)name_, 0, sizeof(*name_)); \
109 *(size_t *)&((name_)->elem_size) = sizeof(type_); \
113#define BLI_buffer_field_free(name_) _bli_buffer_free(name_)
void BLI_buffer_reinit(BLI_Buffer *buffer, size_t new_count)
void _bli_buffer_append_array(BLI_Buffer *buffer, void *new_data, size_t count)
struct BLI_Buffer BLI_Buffer
void _bli_buffer_free(BLI_Buffer *buffer)
void BLI_buffer_resize(BLI_Buffer *buffer, size_t new_count)