/src/botan/build/include/public/botan/allocator.h
Line | Count | Source |
1 | | /* |
2 | | * (C) 2023 Jack Lloyd |
3 | | * |
4 | | * Botan is released under the Simplified BSD License (see license.txt) |
5 | | */ |
6 | | |
7 | | #ifndef BOTAN_ALLOCATOR_HELPERS_H_ |
8 | | #define BOTAN_ALLOCATOR_HELPERS_H_ |
9 | | |
10 | | #include <botan/types.h> |
11 | | #include <cstring> |
12 | | |
13 | | namespace Botan { |
14 | | |
15 | | /* |
16 | | * Define BOTAN_MALLOC_FN |
17 | | */ |
18 | | #if defined(__clang__) || defined(__GNUG__) |
19 | | #define BOTAN_MALLOC_FN __attribute__((malloc)) |
20 | | #elif defined(_MSC_VER) |
21 | | #define BOTAN_MALLOC_FN __declspec(restrict) |
22 | | #else |
23 | | #define BOTAN_MALLOC_FN |
24 | | #endif |
25 | | |
26 | | /** |
27 | | * Allocate a memory buffer by some method. This should only be used for |
28 | | * primitive types (uint8_t, uint32_t, etc). |
29 | | * |
30 | | * @param elems the number of elements |
31 | | * @param elem_size the size of each element |
32 | | * @return pointer to allocated and zeroed memory, or throw std::bad_alloc on failure |
33 | | */ |
34 | | BOTAN_PUBLIC_API(2, 3) BOTAN_MALLOC_FN void* allocate_memory(size_t elems, size_t elem_size); |
35 | | |
36 | | /** |
37 | | * Free a pointer returned by allocate_memory |
38 | | * @param p the pointer returned by allocate_memory |
39 | | * @param elems the number of elements, as passed to allocate_memory |
40 | | * @param elem_size the size of each element, as passed to allocate_memory |
41 | | */ |
42 | | BOTAN_PUBLIC_API(2, 3) void deallocate_memory(void* p, size_t elems, size_t elem_size); |
43 | | |
44 | | /** |
45 | | * Ensure the allocator is initialized |
46 | | */ |
47 | | void BOTAN_UNSTABLE_API initialize_allocator(); |
48 | | |
49 | | class Allocator_Initializer final { |
50 | | public: |
51 | 2 | Allocator_Initializer() { initialize_allocator(); } |
52 | | }; |
53 | | |
54 | | } // namespace Botan |
55 | | |
56 | | #endif |