Blender V5.0
BLI_memiter.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include "BLI_compiler_attrs.h"
12#include "BLI_compiler_compat.h"
13#include "BLI_sys_types.h"
14
15/* 512kb, good default for small elems. */
16#define BLI_MEMITER_DEFAULT_SIZE (1 << 19)
17
18struct BLI_memiter;
19
20typedef struct BLI_memiter BLI_memiter;
21
31BLI_memiter *BLI_memiter_create(unsigned int chunk_size_min)
33void *BLI_memiter_alloc(BLI_memiter *mi, unsigned int elem_size)
34 /* WARNING: `ATTR_MALLOC` attribute on #BLI_memiter_alloc causes crash, see: D2756. */
36void BLI_memiter_alloc_from(BLI_memiter *mi, uint elem_size, const void *data_from)
37 ATTR_NONNULL(1, 3);
39 unsigned int elem_size) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
40 ATTR_NONNULL(1);
44
45/* Utilities. */
46
51void *BLI_memiter_elem_first_size(BLI_memiter *mi, unsigned int *r_size);
52
58
63 ATTR_NONNULL(1, 2);
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_MALLOC
#define ATTR_RETURNS_NONNULL
#define ATTR_NONNULL(...)
void * BLI_memiter_elem_first(BLI_memiter *mi)
void BLI_memiter_destroy(BLI_memiter *mi) ATTR_NONNULL(1)
void bool BLI_memiter_iter_done(const BLI_memiter_handle *iter) ATTR_NONNULL(1)
void BLI_memiter_alloc_from(BLI_memiter *mi, uint elem_size, const void *data_from) ATTR_NONNULL(1
unsigned int BLI_memiter_count(const BLI_memiter *mi) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_memiter_iter_step(BLI_memiter_handle *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_memiter_elem_first_size(BLI_memiter *mi, unsigned int *r_size)
BLI_memiter * BLI_memiter_create(unsigned int chunk_size_min) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void * BLI_memiter_alloc(BLI_memiter *mi, unsigned int elem_size) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void void * BLI_memiter_calloc(BLI_memiter *mi, unsigned int elem_size) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void BLI_memiter_clear(BLI_memiter *mi) ATTR_NONNULL(1)
void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) ATTR_NONNULL(1
void * BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
unsigned int uint
struct BLI_memiter_elem * elem
Definition BLI_memiter.h:55