Blender
V3.3
|
#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 |
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.
Definition at line 51 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 40 of file BLI_memiter.c.
Definition at line 41 of file BLI_memiter.c.
void* BLI_memiter_alloc | ( | BLI_memiter * | mi, |
uint | elem_size | ||
) |
Definition at line 131 of file BLI_memiter.c.
References BLI_asan_poison, BLI_asan_unpoison, BLI_assert, blender::io::obj::chunk_size, 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 198 of file BLI_memiter.c.
References BLI_memiter_alloc(), and data.
void* BLI_memiter_calloc | ( | BLI_memiter * | mi, |
uint | elem_size | ||
) |
Definition at line 191 of file BLI_memiter.c.
References BLI_memiter_alloc(), and data.
void BLI_memiter_clear | ( | BLI_memiter * | mi | ) |
Definition at line 224 of file BLI_memiter.c.
References memiter_free_data(), and memiter_init().
uint BLI_memiter_count | ( | const BLI_memiter * | mi | ) |
Definition at line 230 of file BLI_memiter.c.
References BLI_memiter::count.
BLI_memiter* BLI_memiter_create | ( | unsigned int | 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 114 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 218 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 | ) |
Support direct lookup for the first item.
Definition at line 241 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 251 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 281 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 275 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.
void* BLI_memiter_iter_step | ( | BLI_memiter_handle * | iter | ) |
Definition at line 312 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 295 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.
BLI_INLINE uint data_offset_from_size | ( | uint | size | ) |
Definition at line 83 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 286 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 204 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 98 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 88 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().