acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
allocation.h
1// <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5//#if defined(__cplusplus)
6//extern "C" {
7//#endif
8//
9
10#if MEMORY_ANNOTATION
11
12#define MEMORY_ANNOTATION_COMMA_PARAM , const_char_pointer pszAnnotation
13#define MEMORY_ANNOTATION_COMMA_PARAM_DEF MEMORY_ANNOTATION_COMMA_PARAM = nullptr
14#define MEMORY_ANNOTATION_COMMA_ARG , pszAllocation
15
16#else
17
18#define MEMORY_ANNOTATION_COMMA_PARAM
19#define MEMORY_ANNOTATION_COMMA_PARAM_DEF
20#define MEMORY_ANNOTATION_COMMA_ARG
21
22#endif
23
24
25//#pragma pack(push, heap_memory, 1)
26
27
28#define HEAP_PADDING_SIZE 8
29
30
32{
33
34 ::u8 m_back;
35 ::heap::enum_memory m_ememory;
36 ::u8 m_blockuse;
37 ::u8 m_align;
38#if MEMORY_ANNOTATION
39 const_char_pointer m_pszAnnotation;
40#else
41 const_char_pointer m_pszMemoryAnnotationPadding;
42#endif
43 ::u32 m_size;
44
45};
46
47struct heap_memory :
49{
50
51#if HEAP_PADDING_SIZE > 0
52
53 ::u8 m_padding[HEAP_PADDING_SIZE];
54
55#endif
56
57};
58
59
60//#pragma pack(pop, heap_memory)
61
62
63inline static struct heap_memory * heap_memory_get(void * pmemory)
64{
65
66 return (struct heap_memory *)(((iptr)pmemory) - sizeof(struct heap_memory));
67
68}
69
70
71inline static memsize heap_memory_aligned_provision_get_size(memsize size, ::i32 iAlignByteCount)
72{
73
74 return size + sizeof(struct heap_memory) + HEAP_PADDING_SIZE + iAlignByteCount - 1;
75
76}
77
78
79inline static memsize heap_memory_unaligned_provision_get_size(memsize size)
80{
81
82 return size + sizeof(struct heap_memory) + HEAP_PADDING_SIZE;
83
84}
85
86
87inline static void * heap_memory_unaligned(void * p, memsize size, ::i32 blockuse, ::heap::enum_memory ememory MEMORY_ANNOTATION_COMMA_PARAM_DEF)
88{
89
90 void * pmemory = (void *)((iptr)p + sizeof(struct heap_memory));
91
92 struct heap_memory * pheap = heap_memory_get(pmemory);
93
94 pheap->m_back = (::i32)(((iptr)pmemory) - ((iptr)p));
95
96 pheap->m_blockuse = blockuse;
97
98 pheap->m_align = 0;
99
100 pheap->m_size = (::u32) size;
101
102 pheap->m_ememory = ememory;
103
104 return pmemory;
105
106}
107
108
109inline static void * heap_memory_aligned(void * p, memsize size, ::i32 blockuse, ::i32 iAlignByteCount, ::heap::enum_memory ememory MEMORY_ANNOTATION_COMMA_PARAM_DEF)
110{
111
112 void * pmemory = (void *)((((iptr)p) + sizeof(struct heap_memory) + iAlignByteCount - 1) & ((~((iptr)iAlignByteCount - 1))));
113
114 struct heap_memory * pheap = heap_memory_get(pmemory);
115
116 pheap->m_back = (::i32)(((iptr)pmemory) - ((iptr)p));
117
118 pheap->m_blockuse = blockuse;
119
120 pheap->m_align = iAlignByteCount;
121
122 pheap->m_size = (::u32) size;
123
124 pheap->m_ememory = ememory;
125
126#if MEMORY_ANNOTATION
127
128 pheap->m_pszAnnotation = pszAnnotation;
129
130#endif
131
132 return pmemory;
133
134}
135
136
137inline static void * heap_memory_base_get(void * pmemory)
138{
139
140 return (void *)(((iptr)pmemory) - heap_memory_get(pmemory)->m_back);
141
142}
143
144
145inline static ::i32 heap_memory_get_block_use(void * pmemory)
146{
147
148 return heap_memory_get(pmemory)->m_blockuse;
149
150}
151
152
153inline static ::u8 heap_memory_get_align(void * pmemory)
154{
155
156 return heap_memory_get(pmemory)->m_align;
157
158}
159
160
161inline static memsize heap_memory_get_size(void * pmemory)
162{
163
164 return heap_memory_get(pmemory)->m_size;
165
166}
167
168
169void heap_memory_check_padding_after(struct heap_memory* pheapmemory);
170
171
172typedef void * MEMORY_ALLOC(memsize s);
173
174typedef MEMORY_ALLOC * PFN_MEMORY_ALLOC;
175
176
177
178typedef void * MEMORY_REALLOC(void * p, memsize s);
179
180typedef MEMORY_REALLOC * PFN_MEMORY_REALLOC;
181
182
183
184typedef void MEMORY_FREE(void * p);
185
186typedef MEMORY_FREE * PFN_MEMORY_FREE;
187
188
189
190typedef memsize MEMORY_SIZE(void *);
191
192typedef MEMORY_SIZE * PFN_MEMORY_SIZE;
193
194
195
196
197
198//CLASS_DECL_ACME void * ace_memory_alloc(memsize s);
199//CLASS_DECL_ACME void * ace_memory_realloc(void * p, memsize s);
200//CLASS_DECL_ACME void ace_memory_free(void * p);
201//CLASS_DECL_ACME memsize ace_memory_size(void * p);
202
203
204
205//CLASS_DECL_ACME void ace_set_alloc(PFN_MEMORY_ALLOC palloc, PFN_MEMORY_REALLOC prealloc, PFN_MEMORY_FREE pfree, PFN_MEMORY_SIZE psize);
206
207
208
209// CLASS_DECL_EXPORT void nodeos_set_cache_dir(const ::scoped_string & scopedstrDir);
210
211// CLASS_DECL_EXPORT const_char_pointer nodeos_get_cache_dir(void);
212
213// CLASS_DECL_EXPORT void nodeos_set_home(const ::scoped_string & scopedstrDir);
214
215// CLASS_DECL_EXPORT const_char_pointer nodeos_get_home(void);
216
217// CLASS_DECL_EXPORT void nodeos_set_temp(const ::scoped_string & scopedstrDir);
218
219// CLASS_DECL_EXPORT const_char_pointer nodeos_get_temp(void);
220
221
222
223
224//
225//#if defined(__cplusplus)
226//} // extern "C"
227//#endif
228
229
230
Definition allocation.h:32
Definition allocation.h:49