1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* See LICENSE file for copyright and license details. */
enum libsimple_memalloc_option {
LIBSIMPLE_MEMALLOC_END,
LIBSIMPLE_MEMALLOC_ZERO_INIT,
LIBSIMPLE_MEMALLOC_CONDITIONAL_ZERO_INIT,
LIBSIMPLE_MEMALLOC_UNIQUE_IF_ZERO,
LIBSIMPLE_MEMALLOC_NULL_IF_ZERO,
LIBSIMPLE_MEMALLOC_ALIGNMENT,
LIBSIMPLE_MEMALLOC_PAGE_ALIGNMENT,
LIBSIMPLE_MEMALLOC_ALIGNMENT_TO_CACHE_LINE,
LIBSIMPLE_MEMALLOC_ALLOW_CACHE_LINE_SPLITTING,
LIBSIMPLE_MEMALLOC_ROUND_UP_SIZE_TO_ALIGNMENT,
LIBSIMPLE_MEMALLOC_ELEMENT_SIZE,
LIBSIMPLE_MEMALLOC_PRODUCT_SIZE,
LIBSIMPLE_MEMALLOC_VA_PRODUCT_SIZE,
LIBSIMPLE_MEMALLOC_1_VA_PRODUCT_SIZE,
LIBSIMPLE_MEMALLOC_VA_LIST
};
#define libsimple_arrayalloc_option libsimple_memalloc_option
#define LIBSIMPLE_MEMALLOC_END LIBSIMPLE_MEMALLOC_END
#define LIBSIMPLE_MEMALLOC_ZERO_INIT LIBSIMPLE_MEMALLOC_ZERO_INIT
#define LIBSIMPLE_MEMALLOC_CONDITIONAL_ZERO_INIT LIBSIMPLE_MEMALLOC_CONDITIONAL_ZERO_INIT
#define LIBSIMPLE_MEMALLOC_UNIQUE_IF_ZERO LIBSIMPLE_MEMALLOC_UNIQUE_IF_ZERO
#define LIBSIMPLE_MEMALLOC_NULL_IF_ZERO LIBSIMPLE_MEMALLOC_NULL_IF_ZERO
#define LIBSIMPLE_MEMALLOC_ALIGNMENT LIBSIMPLE_MEMALLOC_ALIGNMENT
#define LIBSIMPLE_MEMALLOC_PAGE_ALIGNMENT LIBSIMPLE_MEMALLOC_PAGE_ALIGNMENT
#define LIBSIMPLE_MEMALLOC_ALIGNMENT_TO_CACHE_LINE LIBSIMPLE_MEMALLOC_ALIGNMENT_TO_CACHE_LINE
#define LIBSIMPLE_MEMALLOC_ALLOW_CACHE_LINE_SPLITTING LIBSIMPLE_MEMALLOC_ALLOW_CACHE_LINE_SPLITTING
#define LIBSIMPLE_MEMALLOC_ROUND_UP_SIZE_TO_ALIGNMENT LIBSIMPLE_MEMALLOC_ROUND_UP_SIZE_TO_ALIGNMENT
#define LIBSIMPLE_MEMALLOC_ELEMENT_SIZE LIBSIMPLE_MEMALLOC_ELEMENT_SIZE
#define LIBSIMPLE_MEMALLOC_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_PRODUCT_SIZE
#define LIBSIMPLE_MEMALLOC_VA_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_VA_PRODUCT_SIZE
#define LIBSIMPLE_MEMALLOC_1_VA_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_1_VA_PRODUCT_SIZE
#define LIBSIMPLE_MEMALLOC_VA_LIST LIBSIMPLE_MEMALLOC_VA_LIST
#define LIBSIMPLE_ARRAYALLOC_END LIBSIMPLE_MEMALLOC_END
#define LIBSIMPLE_ARRAYALLOC_ZERO_INIT LIBSIMPLE_MEMALLOC_ZERO_INIT
#define LIBSIMPLE_ARRAYALLOC_CONDITIONAL_ZERO_INIT LIBSIMPLE_MEMALLOC_CONDITIONAL_ZERO_INIT
#define LIBSIMPLE_ARRAYALLOC_UNIQUE_IF_ZERO LIBSIMPLE_MEMALLOC_UNIQUE_IF_ZERO
#define LIBSIMPLE_ARRAYALLOC_NULL_IF_ZERO LIBSIMPLE_MEMALLOC_NULL_IF_ZERO
#define LIBSIMPLE_ARRAYALLOC_ALIGNMENT_TO_CACHE_LINE LIBSIMPLE_MEMALLOC_ALIGNMENT_TO_CACHE_LINE
#define LIBSIMPLE_ARRAYALLOC_ALLOW_CACHE_LINE_SPLITTING LIBSIMPLE_MEMALLOC_ALLOW_CACHE_LINE_SPLITTING
#define LIBSIMPLE_ARRAYALLOC_ROUND_UP_SIZE_TO_ALIGNMENT LIBSIMPLE_MEMALLOC_ROUND_UP_SIZE_TO_ALIGNMENT
#define LIBSIMPLE_ARRAYALLOC_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_PRODUCT_SIZE
#define LIBSIMPLE_ARRAYALLOC_VA_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_VA_PRODUCT_SIZE
#define LIBSIMPLE_ARRAYALLOC_1_VA_PRODUCT_SIZE LIBSIMPLE_MEMALLOC_1_VA_PRODUCT_SIZE
#define LIBSIMPLE_ARRAYALLOC_VA_LIST LIBSIMPLE_MEMALLOC_VA_LIST
#define libsimple_varrayalloc(TYPE, N, AP)\
libsimple_memalloc(N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
LIBSIMPLE_MEMALLOC_VA_LIST, AP, LIBSIMPLE_MEMALLOC_END)
#define libsimple_evarrayalloc(TYPE, N, AP)\
libsimple_ememalloc(N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
LIBSIMPLE_MEMALLOC_VA_LIST, AP, LIBSIMPLE_MEMALLOC_END)
#define libsimple_envarrayalloc(STATUS, TYPE, N, AP)\
libsimple_enmemalloc(STATUS, N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
LIBSIMPLE_MEMALLOC_VA_LIST, AP, LIBSIMPLE_MEMALLOC_END)
#define libsimple_arrayalloc(TYPE, N, ... /*, LIBSIMPLE_ARRAYALLOC_END */)\
libsimple_memalloc(N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
__VA_ARGS__)
#define libsimple_earrayalloc(TYPE, N, ... /*, LIBSIMPLE_ARRAYALLOC_END */)\
libsimple_ememalloc(N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
__VA_ARGS__)
#define libsimple_enarrayalloc(STATUS, TYPE, N, ... /*, LIBSIMPLE_ARRAYALLOC_END */)\
libsimple_enmemalloc(STATUS, N, LIBSIMPLE_MEMALLOC_ELEMENT_SIZE, sizeof(TYPE),\
LIBSIMPLE_MEMALLOC_ALIGNMENT, _Alignof(TYPE),\
__VA_ARGS__)
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
void *libsimple_vmemalloc(size_t, va_list);
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
void *libsimple_envmemalloc(int, size_t, va_list);
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
inline void *
libsimple_evmemalloc(size_t n__, va_list ap__)
{
return libsimple_envmemalloc(libsimple_default_failure_exit, n__, ap__);
}
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
inline void *
libsimple_memalloc(size_t n__, ... /*, LIBSIMPLE_MEMALLOC_END */)
{
va_list ap__;
va_start(ap__, n__);
return libsimple_vmemalloc(n__, ap__);
va_end(ap__);
}
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
inline void *
libsimple_enmemalloc(int status__, size_t n__, ... /*, LIBSIMPLE_MEMALLOC_END */)
{
va_list ap__;
va_start(ap__, n__);
return libsimple_envmemalloc(status__, n__, ap__);
va_end(ap__);
}
LIBSIMPLE_GCC_ONLY__(__attribute__((__malloc__, __warn_unused_result__)))
inline void *
libsimple_ememalloc(size_t n__, ... /*, LIBSIMPLE_MEMALLOC_END */)
{
va_list ap__;
va_start(ap__, n__);
return libsimple_evmemalloc(n__, ap__);
va_end(ap__);
}
|