|
Blender
V2.93
|
#include <stdlib.h>#include <string.h>#include "BLI_asan.h"#include "BLI_utildefines.h"#include "BLI_memiter.h"#include "MEM_guardedalloc.h"#include "BLI_strict_flags.h"Go to the source code of this file.
Classes | |
| struct | BLI_memiter_elem |
| struct | BLI_memiter_chunk |
| struct | BLI_memiter |
Macros | |
| #define | PADUP(num, pad) (((num) + ((pad)-1)) & ~((pad)-1)) |
Typedefs | |
| typedef uintptr_t | data_t |
| typedef intptr_t | offset_t |
| typedef struct BLI_memiter_elem | BLI_memiter_elem |
| typedef struct BLI_memiter_chunk | BLI_memiter_chunk |
| typedef struct BLI_memiter | BLI_memiter |
Functions | |
| BLI_INLINE uint | data_offset_from_size (uint size) |
| static void | memiter_set_rewind_offset (BLI_memiter *mi) |
| static void | memiter_init (BLI_memiter *mi) |
Public API's | |
| BLI_memiter * | BLI_memiter_create (uint chunk_size_min) |
| void * | BLI_memiter_alloc (BLI_memiter *mi, uint elem_size) |
| void * | BLI_memiter_calloc (BLI_memiter *mi, uint elem_size) |
| void | BLI_memiter_alloc_from (BLI_memiter *mi, uint elem_size, const void *data_from) |
| static void | memiter_free_data (BLI_memiter *mi) |
| void | BLI_memiter_destroy (BLI_memiter *mi) |
| void | BLI_memiter_clear (BLI_memiter *mi) |
| uint | BLI_memiter_count (const BLI_memiter *mi) |
Helper API's | |
| void * | BLI_memiter_elem_first (BLI_memiter *mi) |
| void * | BLI_memiter_elem_first_size (BLI_memiter *mi, uint *r_size) |
Iterator API's | |
| |
| void | BLI_memiter_iter_init (BLI_memiter *mi, BLI_memiter_handle *iter) |
| bool | BLI_memiter_iter_done (const BLI_memiter_handle *iter) |
| BLI_INLINE void | memiter_chunk_step (BLI_memiter_handle *iter) |
| void * | BLI_memiter_iter_step_size (BLI_memiter_handle *iter, uint *r_size) |
| void * | BLI_memiter_iter_step (BLI_memiter_handle *iter) |
Simple, fast memory allocator for allocating many small elements of different sizes in fixed size memory chunks, although allocations bigger than the chunk size are supported. They will reduce the efficiency of this data-structure. Elements are pointer aligned.
Supports:
Unsupported:
Definition in file BLI_memiter.c.
| #define PADUP | ( | num, | |
| pad | |||
| ) | (((num) + ((pad)-1)) & ~((pad)-1)) |
Definition at line 65 of file BLI_memiter.c.
| typedef struct BLI_memiter BLI_memiter |
| typedef struct BLI_memiter_chunk BLI_memiter_chunk |
| typedef struct BLI_memiter_elem BLI_memiter_elem |
Definition at line 54 of file BLI_memiter.c.
Definition at line 55 of file BLI_memiter.c.
| void* BLI_memiter_alloc | ( | BLI_memiter * | mi, |
| uint | elem_size | ||
| ) |
Definition at line 154 of file BLI_memiter.c.
References BLI_asan_poison, BLI_asan_unpoison, BLI_assert, BLI_memiter::chunk_size_in_bytes_min, BLI_memiter::count, BLI_memiter_elem::data, BLI_memiter_chunk::data, BLI_memiter::data_curr, BLI_memiter::data_last, data_offset_from_size(), BLI_memiter::head, MEM_mallocN, memiter_set_rewind_offset(), BLI_memiter_chunk::next, NULL, BLI_memiter_elem::size, BLI_memiter::tail, and UNLIKELY.
Referenced by BLI_memiter_alloc_from(), BLI_memiter_calloc(), DRW_text_cache_add(), memiter_empty_test(), and memiter_words10k_test().
| void BLI_memiter_alloc_from | ( | BLI_memiter * | mi, |
| uint | elem_size, | ||
| const void * | data_from | ||
| ) |
Definition at line 221 of file BLI_memiter.c.
References BLI_memiter_alloc(), and data.
| void* BLI_memiter_calloc | ( | BLI_memiter * | mi, |
| uint | elem_size | ||
| ) |
Definition at line 214 of file BLI_memiter.c.
References BLI_memiter_alloc(), and data.
| void BLI_memiter_clear | ( | BLI_memiter * | mi | ) |
Definition at line 247 of file BLI_memiter.c.
References memiter_free_data(), and memiter_init().
| uint BLI_memiter_count | ( | const BLI_memiter * | mi | ) |
Definition at line 253 of file BLI_memiter.c.
References BLI_memiter::count.
| BLI_memiter* BLI_memiter_create | ( | uint | chunk_size_min | ) |
| chunk_size_min | Should be a power of two and significantly larger than the average element size used. |
While allocations of any size are supported, they won't be efficient (effectively becoming a single-linked list).
Its intended that many elements can be stored per chunk.
Definition at line 137 of file BLI_memiter.c.
References BLI_memiter::chunk_size_in_bytes_min, MEM_mallocN, MEM_SIZE_OVERHEAD, and memiter_init().
Referenced by DRW_text_cache_create(), memiter_empty_test(), memiter_string_test(), memiter_words10k_test(), and TEST().
| void BLI_memiter_destroy | ( | BLI_memiter * | mi | ) |
Definition at line 241 of file BLI_memiter.c.
References MEM_freeN, and memiter_free_data().
Referenced by DRW_text_cache_destroy(), memiter_empty_test(), memiter_string_test(), memiter_words10k_test(), and TEST().
| void* BLI_memiter_elem_first | ( | BLI_memiter * | mi | ) |
Definition at line 265 of file BLI_memiter.c.
References BLI_memiter_elem::data, BLI_memiter_chunk::data, BLI_memiter::head, and NULL.
| void* BLI_memiter_elem_first_size | ( | BLI_memiter * | mi, |
| uint * | r_size | ||
| ) |
Definition at line 275 of file BLI_memiter.c.
References BLI_memiter_elem::data, BLI_memiter_chunk::data, BLI_memiter::head, NULL, and BLI_memiter_elem::size.
| bool BLI_memiter_iter_done | ( | const BLI_memiter_handle * | iter | ) |
Definition at line 305 of file BLI_memiter.c.
References BLI_memiter_handle::elem_left.
| void BLI_memiter_iter_init | ( | BLI_memiter * | mi, |
| BLI_memiter_handle * | iter | ||
| ) |
Definition at line 299 of file BLI_memiter.c.
References BLI_memiter::count, BLI_memiter_chunk::data, BLI_memiter_handle::elem, BLI_memiter_handle::elem_left, BLI_memiter::head, and NULL.
Referenced by DRW_text_cache_draw(), drw_text_cache_draw_ex(), memiter_empty_test(), memiter_string_test(), and memiter_words10k_test().
| void* BLI_memiter_iter_step | ( | BLI_memiter_handle * | iter | ) |
Definition at line 336 of file BLI_memiter.c.
References BLI_assert, BLI_memiter_elem::data, data, data_offset_from_size(), BLI_memiter_handle::elem, BLI_memiter_handle::elem_left, memiter_chunk_step(), NULL, size(), BLI_memiter_elem::size, and UNLIKELY.
Referenced by DRW_text_cache_draw(), and drw_text_cache_draw_ex().
| void* BLI_memiter_iter_step_size | ( | BLI_memiter_handle * | iter, |
| uint * | r_size | ||
| ) |
Definition at line 319 of file BLI_memiter.c.
References BLI_assert, BLI_memiter_elem::data, data, data_offset_from_size(), BLI_memiter_handle::elem, BLI_memiter_handle::elem_left, memiter_chunk_step(), NULL, size(), BLI_memiter_elem::size, and UNLIKELY.
Referenced by memiter_empty_test(), memiter_string_test(), and memiter_words10k_test().
| BLI_INLINE uint data_offset_from_size | ( | uint | size | ) |
Definition at line 97 of file BLI_memiter.c.
Referenced by BLI_memiter_alloc(), BLI_memiter_iter_step(), and BLI_memiter_iter_step_size().
| BLI_INLINE void memiter_chunk_step | ( | BLI_memiter_handle * | iter | ) |
Definition at line 310 of file BLI_memiter.c.
References BLI_assert, BLI_memiter_chunk::data, BLI_memiter_handle::elem, BLI_memiter_chunk::next, NULL, and BLI_memiter_elem::size.
Referenced by BLI_memiter_iter_step(), and BLI_memiter_iter_step_size().
|
static |
Definition at line 227 of file BLI_memiter.c.
References BLI_asan_unpoison, BLI_memiter::head, MEM_allocN_len, MEM_freeN, and BLI_memiter_chunk::next.
Referenced by BLI_memiter_clear(), and BLI_memiter_destroy().
|
static |
Definition at line 112 of file BLI_memiter.c.
References BLI_memiter::count, BLI_memiter::data_curr, BLI_memiter::data_last, BLI_memiter::head, NULL, and BLI_memiter::tail.
Referenced by BLI_memiter_clear(), and BLI_memiter_create().
|
static |
Definition at line 102 of file BLI_memiter.c.
References BLI_asan_unpoison, BLI_assert, BLI_memiter::data_curr, BLI_memiter_elem::size, and BLI_memiter::tail.
Referenced by BLI_memiter_alloc().