blob: 50b94415359f2a952b83e3f4898df32cbc1b27d3 (
plain)
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
|
#include <basic/Link.h>
namespace omega {
#if ListElementFreeList
static List_Element<void*> *_kludgy_List_Element_free_list_pointer;
// we rely on the fact that that is initialized to 0 before any
// constructor-based initialization that could call List_Element::new.
void *kludgy_List_Element_new(size_t size)
{
void *mem;
if (size == sizeof(List_Element<void*>) &&
_kludgy_List_Element_free_list_pointer)
{
List_Element<void*> *it = _kludgy_List_Element_free_list_pointer;
_kludgy_List_Element_free_list_pointer = it->tail;
mem = it;
}
else
mem = ::operator new(size);
return mem;
}
void kludgy_List_Element_delete(void *ptr, size_t size)
{
if (ptr)
if (size == sizeof(List_Element<void*>))
{
List_Element<void*> *it = (List_Element<void*> *) ptr;
it->tail = _kludgy_List_Element_free_list_pointer;
_kludgy_List_Element_free_list_pointer = it;
}
else
::operator delete(ptr);
}
#endif
} // namespace
|