Blender V5.0
BLI_memarena.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include <cstddef>
12
13#include "BLI_compiler_attrs.h"
14
15#include "MEM_guardedalloc.h"
16
21#define BLI_MEMARENA_STD_BUFSIZE MEM_SIZE_OPTIMAL(1 << 14)
22
23struct MemArena;
24
36
40template<typename T>
42 const size_t num = 1)
43{
44 static_assert(std::is_trivial_v<T>,
45 "Only trivial types may be allocated with BLI_memarena_alloc");
46 return static_cast<T *>(BLI_memarena_alloc(ma, sizeof(T) * num));
47}
48template<typename T>
50 const size_t num = 1)
51{
52 static_assert(std::is_trivial_v<T>,
53 "Only trivial types may be allocated with BLI_memarena_calloc");
54 return static_cast<T *>(BLI_memarena_calloc(ma, sizeof(T) * num));
55}
56
67void BLI_memarena_merge(MemArena *ma_dst, MemArena *ma_src) ATTR_NONNULL(1, 2);
68
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_MALLOC
#define ATTR_ALLOC_SIZE(...)
#define ATTR_RETURNS_NONNULL
#define ATTR_NONNULL(...)
void BLI_memarena_merge(MemArena *ma_dst, MemArena *ma_src)
MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
void * BLI_memarena_calloc(MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
void BLI_memarena_free(MemArena *ma) ATTR_NONNULL(1)
void * BLI_memarena_alloc(MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
void BLI_memarena_clear(MemArena *ma) ATTR_NONNULL(1)
ATTR_WARN_UNUSED_RESULT const size_t num
void BLI_memarena_use_malloc(MemArena *ma) ATTR_NONNULL(1)
void BLI_memarena_use_align(MemArena *ma, size_t align) ATTR_NONNULL(1)
void BLI_memarena_use_calloc(MemArena *ma) ATTR_NONNULL(1)
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
#define T
const char * name
size_t align
size_t bufsize