acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
malloc.h
1//
2// acme_malloc.h
3// acme
4//
5// Created by Camilo Sasuke Thomas Borregaard Soerensen on 26/11/17. tbs in <3
6//
7#pragma once
8
9
10#include "del.h"
11
12
13namespace acme
14{
15
16 // template < typename P >
17 // void free(P * & p)
18 // {
19 //
20 // if(p != nullptr)
21 // {
22 //
23 // ::free((void *) p);
24 //
25 // p = nullptr;
26 //
27 // }
28 //
29 // }
30
31 template < typename POINTER >
32 class malloc
33 {
34 public:
35
36
37 POINTER m_p;
38 ::i64 m_iSize;
39
40 malloc(POINTER p = nullptr)
41 {
42
43 m_iSize = -1;
44 m_p = p;
45
46 }
47
48 ~malloc()
49 {
50
51 free();
52
53 }
54
55 operator POINTER() { return (POINTER) m_p; }
56
57 bool is_null() const {return ::is_null(m_p);}
58 bool is_set() const {return ::is_set(m_p);}
59
60
61 POINTER alloc(size_t size)
62 {
63
64 if(m_p != nullptr)
65 {
66
67 m_p = (POINTER) ::realloc(m_p, size);
68
69 }
70 else
71 {
72
73 m_p = (POINTER) ::malloc(size);
74
75 }
76
77 if (m_p != nullptr)
78 {
79
80 m_iSize = size;
81
82 }
83
84 return m_p;
85
86 }
87
88 POINTER calloc(::collection::count c)
89 {
90
91 free();
92
93 m_iSize = c * sizeof(*m_p);
94
95 m_p = calloc(m_iSize);
96
97 if (m_p == nullptr)
98 {
99
100 m_iSize = -1;
101
102 }
103
104 return m_p;
105
106 }
107
108 void free()
109 {
110
111 ::acme::free(m_p);
112
113 m_iSize = -1;
114
115 }
116
117 template < typename POINTER2 >
118 malloc & operator = ( POINTER2 p)
119 {
120
121 if((POINTER)p == m_p)
122 {
123
124 return *this;
125
126 }
127
128 free();
129
130 m_p = (POINTER)p;
131
132 return *this;
133
134 }
135
136 auto operator ->() {return m_p;}
137 auto operator ->() const {return m_p;}
138
139 auto operator *() {return *m_p;}
140 auto operator *() const {return *m_p;}
141
142
143 POINTER get() {return m_p;}
144 const POINTER get() const {return m_p;}
145
146 };
147
148
149 template < typename POINTER >
150 class memory_allocate
151 {
152 public:
153
154
155 POINTER m_p;
156 memsize m_iSize;
157
158 memory_allocate(void * p = nullptr)
159 {
160
161 m_iSize = -1;
162 m_p = (POINTER) p;
163
164 }
165
166 memory_allocate(memsize s)
167 {
168
169 m_iSize = 0;
170 m_p = nullptr;
171
172 alloc(s * sizeof(*m_p));
173
174 }
175
176 ~memory_allocate()
177 {
178
179 free();
180
181 }
182
183 operator POINTER() { return (POINTER)m_p; }
184
185 operator const POINTER() const { return (const POINTER)m_p; }
186
187
188 POINTER alloc(size_t size)
189 {
190
191 if (m_p != nullptr)
192 {
193
194 m_p = (POINTER) ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_main)->reallocate(m_p, size);
195
196 }
197 else
198 {
199
200 m_p = (POINTER) ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_main)->allocate(size, nullptr);
201
202 }
203
204 if (m_p != nullptr)
205 {
206
207 m_iSize = size;
208
209 }
210
211 return m_p;
212
213 }
214
215 POINTER calloc(::collection::count c)
216 {
217
218 free();
219
220 m_iSize = c * sizeof(*m_p);
221
222 m_p = ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_main)->allocate(m_iSize, nullptr);
223
224 if (m_p == nullptr)
225 {
226
227 m_iSize = -1;
228
229 }
230
231 return m_p;
232
233 }
234
235 memsize get_size() const
236 {
237
238 return m_iSize;
239
240 }
241
242 ::collection::count get_count() const
243 {
244
245 return get_size() / sizeof(*m_p);
246
247 }
248
249 void free()
250 {
251
252 ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_main)->free(m_p);
253
254 m_p = nullptr;
255
256 m_iSize = -1;
257
258 }
259
260 template < typename POINTER2 >
261 memory_allocate & operator = (POINTER2 p)
262 {
263
264 if ((POINTER)p == m_p)
265 {
266
267 return *this;
268
269 }
270
271 free();
272
273 m_p = (POINTER)p;
274
275 return *this;
276
277 }
278
279 };
280
281} // namespace acme
282
283
284// namespace str
285// {
286
287
288
289
290// } // namespace str
291
292
293//template < typename POINTER >
294//::acme::malloc < POINTER > __malloc(POINTER p)
295//{
296//
297// return ::acme::malloc < POINTER >(p);
298//
299//}
300
301
302
303
304
305
include "aura/graphics/image/context.h"
Definition aaaa__defer.h:32