#include namespace omega { #if ListElementFreeList static List_Element *_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) && _kludgy_List_Element_free_list_pointer) { List_Element *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)) { List_Element *it = (List_Element *) ptr; it->tail = _kludgy_List_Element_free_list_pointer; _kludgy_List_Element_free_list_pointer = it; } else ::operator delete(ptr); } #endif } // namespace