Blender  V3.3
Classes | Macros | Typedefs | Enumerations | Functions
BLI_buffer.h File Reference

Go to the source code of this file.

Classes

struct  BLI_Buffer
 

Macros

#define BLI_buffer_declare_static(type_, name_, flag_, static_count_)
 
#define BLI_buffer_declare(type_, name_, flag_)
 
#define BLI_buffer_at(buffer_, type_, index_)
 
#define BLI_buffer_array(buffer_, type_)   (&(BLI_buffer_at(buffer_, type_, 0)))
 
#define BLI_buffer_resize_data(buffer_, type_, new_count_)    ((BLI_buffer_resize(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))
 
#define BLI_buffer_reinit_data(buffer_, type_, new_count_)    ((BLI_buffer_reinit(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))
 
#define BLI_buffer_append(buffer_, type_, val_)
 
#define BLI_buffer_clear(buffer_)
 
#define BLI_buffer_append_array(buffer_, type_, data_, count_)
 
#define BLI_buffer_free(name_)
 
#define BLI_buffer_field_init(name_, type_)
 
#define BLI_buffer_field_free(name_)   _bli_buffer_free(name_)
 

Typedefs

typedef struct BLI_Buffer BLI_Buffer
 

Enumerations

enum  { BLI_BUFFER_NOP = 0 , BLI_BUFFER_USE_STATIC = (1 << 0) }
 

Functions

void BLI_buffer_resize (BLI_Buffer *buffer, size_t new_count)
 
void BLI_buffer_reinit (BLI_Buffer *buffer, size_t new_count)
 
void _bli_buffer_append_array (BLI_Buffer *buffer, void *data, size_t count)
 
void _bli_buffer_free (BLI_Buffer *buffer)
 

Macro Definition Documentation

◆ BLI_buffer_append

#define BLI_buffer_append (   buffer_,
  type_,
  val_ 
)
Value:
(BLI_buffer_resize(buffer_, (buffer_)->count + 1), \
(BLI_buffer_at(buffer_, type_, (buffer_)->count - 1) = val_))
#define BLI_buffer_at(buffer_, type_, index_)
Definition: BLI_buffer.h:36
void BLI_buffer_resize(BLI_Buffer *buffer, size_t new_count)
Definition: buffer.c:49
int count

Definition at line 50 of file BLI_buffer.h.

◆ BLI_buffer_append_array

#define BLI_buffer_append_array (   buffer_,
  type_,
  data_,
  count_ 
)
Value:
{ \
type_ *__tmp = (data_); \
BLI_assert(sizeof(type_) == (buffer_)->elem_size); \
_bli_buffer_append_array(buffer_, __tmp, count_); \
} \
(void)0
SyclQueue void void size_t num_bytes void
T * data_
Definition: eval_output.h:163

Definition at line 80 of file BLI_buffer.h.

◆ BLI_buffer_array

#define BLI_buffer_array (   buffer_,
  type_ 
)    (&(BLI_buffer_at(buffer_, type_, 0)))

Definition at line 42 of file BLI_buffer.h.

◆ BLI_buffer_at

#define BLI_buffer_at (   buffer_,
  type_,
  index_ 
)
Value:
((((type_ *)(buffer_) \
->data)[(BLI_assert(sizeof(type_) == (buffer_)->elem_size)), \
(BLI_assert((int)(index_) >= 0 && (size_t)(index_) < (buffer_)->count)), \
index_]))
#define BLI_assert(a)
Definition: BLI_assert.h:46

Definition at line 36 of file BLI_buffer.h.

◆ BLI_buffer_clear

#define BLI_buffer_clear (   buffer_)
Value:
{ \
(buffer_)->count = 0; \
} \
(void)0

Definition at line 54 of file BLI_buffer.h.

◆ BLI_buffer_declare

#define BLI_buffer_declare (   type_,
  name_,
  flag_ 
)
Value:
bool name_##user; /* warn for free only */ \
BLI_Buffer name_ = {NULL, sizeof(type_), 0, 0, (flag_)}

Definition at line 32 of file BLI_buffer.h.

◆ BLI_buffer_declare_static

#define BLI_buffer_declare_static (   type_,
  name_,
  flag_,
  static_count_ 
)
Value:
char name_##user; /* warn for free only */ \
type_ name_##_static_[static_count_]; \
BLI_Buffer name_ = { \
(name_##_static_), sizeof(type_), 0, static_count_, BLI_BUFFER_USE_STATIC | (flag_)}
@ BLI_BUFFER_USE_STATIC
Definition: BLI_buffer.h:22

Definition at line 25 of file BLI_buffer.h.

◆ BLI_buffer_field_free

#define BLI_buffer_field_free (   name_)    _bli_buffer_free(name_)

Definition at line 111 of file BLI_buffer.h.

◆ BLI_buffer_field_init

#define BLI_buffer_field_init (   name_,
  type_ 
)
Value:
{ \
memset(name_, 0, sizeof(*name_)); \
*(size_t *)&((name_)->elem_size) = sizeof(type_); \
} \
(void)0

A buffer embedded in a struct. Using #memcpy is allowed until first resize.

Definition at line 104 of file BLI_buffer.h.

◆ BLI_buffer_free

#define BLI_buffer_free (   name_)
Value:
{ \
_bli_buffer_free(name_); \
(void)name_##user; /* ensure we free */ \
} \
(void)0

Definition at line 94 of file BLI_buffer.h.

◆ BLI_buffer_reinit_data

#define BLI_buffer_reinit_data (   buffer_,
  type_,
  new_count_ 
)     ((BLI_buffer_reinit(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))

Definition at line 47 of file BLI_buffer.h.

◆ BLI_buffer_resize_data

#define BLI_buffer_resize_data (   buffer_,
  type_,
  new_count_ 
)     ((BLI_buffer_resize(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))

Definition at line 44 of file BLI_buffer.h.

Typedef Documentation

◆ BLI_Buffer

typedef struct BLI_Buffer BLI_Buffer

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
BLI_BUFFER_NOP 
BLI_BUFFER_USE_STATIC 

Definition at line 20 of file BLI_buffer.h.

Function Documentation

◆ _bli_buffer_append_array()

void _bli_buffer_append_array ( BLI_Buffer buffer,
void data,
size_t  count 
)

Append an array of elements.

Callers use BLI_buffer_append_array.

Definition at line 98 of file buffer.c.

References BLI_buffer_resize(), buffer, count, and size().

◆ _bli_buffer_free()

void _bli_buffer_free ( BLI_Buffer buffer)

Does not free the buffer structure itself.

Callers use BLI_buffer_free.

Definition at line 107 of file buffer.c.

References BLI_BUFFER_USE_STATIC, buffer, and MEM_freeN.

◆ BLI_buffer_reinit()

void BLI_buffer_reinit ( BLI_Buffer buffer,
size_t  new_count 
)

Ensure size, throwing away old data, respecting #BLI_BUFFER_USE_CALLOC.

Similar to BLI_buffer_resize, but use when the existing data can be:

  • Ignored (malloc'd).
  • Cleared (when #BLI_BUFFER_USE_CALLOC is set).

Definition at line 75 of file buffer.c.

References BLI_BUFFER_USE_STATIC, buffer, buffer_alloc(), MEM_freeN, and UNLIKELY.

Referenced by pbvh_bmesh_edge_loops().

◆ BLI_buffer_resize()

void BLI_buffer_resize ( BLI_Buffer buffer,
size_t  new_count 
)
Note
Never decreases the amount of memory allocated.

Definition at line 49 of file buffer.c.

References BLI_BUFFER_USE_STATIC, buffer, buffer_alloc(), buffer_realloc(), and UNLIKELY.

Referenced by _bli_buffer_append_array().