diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 19:27:15 +0000 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-17 19:27:15 +0000 |
commit | ad1cadf3512f3dd789151983e5c93af411f929db (patch) | |
tree | d6d25d562617d9bec7b13286cf413ed8f7567275 /omegalib/omega_lib/src/basic/Link.cc | |
parent | cfafd2ffcad803e7bb02b60c085eafd73f28f87a (diff) | |
download | chill-ad1cadf3512f3dd789151983e5c93af411f929db.tar.gz chill-ad1cadf3512f3dd789151983e5c93af411f929db.tar.bz2 chill-ad1cadf3512f3dd789151983e5c93af411f929db.zip |
restructure
Diffstat (limited to 'omegalib/omega_lib/src/basic/Link.cc')
-rw-r--r-- | omegalib/omega_lib/src/basic/Link.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/omegalib/omega_lib/src/basic/Link.cc b/omegalib/omega_lib/src/basic/Link.cc new file mode 100644 index 0000000..50b9441 --- /dev/null +++ b/omegalib/omega_lib/src/basic/Link.cc @@ -0,0 +1,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 |