acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
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
13
namespace
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
acme
include "aura/graphics/image/context.h"
Definition
aaaa__defer.h:32
memory
malloc.h
Generated by
1.17.0