00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_RUTZ_FREELIST_CC_UTC20050626084019_DEFINED
00035 #define GROOVX_RUTZ_FREELIST_CC_UTC20050626084019_DEFINED
00036
00037 #include "rutz/freelist.h"
00038
00039 #include "rutz/debug.h"
00040 GVX_DBG_REGISTER
00041
00042 rutz::free_list_base::free_list_base(std::size_t size_check) :
00043 m_node_list(0), m_num_allocations(0), m_size_check(size_check)
00044 {
00045 GVX_ASSERT(m_size_check >= sizeof(node));
00046 }
00047
00048 void* rutz::free_list_base::allocate(std::size_t bytes)
00049 {
00050 GVX_ASSERT(bytes == m_size_check);
00051 if (m_node_list == 0)
00052 {
00053 ++m_num_allocations;
00054 return ::operator new(bytes);
00055 }
00056 node* n = m_node_list;
00057 m_node_list = m_node_list->next;
00058 return static_cast<void*>(n);
00059 }
00060
00061 void rutz::free_list_base::deallocate(void* space)
00062 {
00063 node* n = static_cast<node*>(space);
00064 n->next = m_node_list;
00065 m_node_list = n;
00066 }
00067
00068 void rutz::free_list_base::release_free_nodes()
00069 {
00070 while (m_node_list != 0)
00071 {
00072 void* p = m_node_list;
00073 m_node_list = m_node_list->next;
00074 ::operator delete(p);
00075 }
00076 }
00077
00078 static const char __attribute__((used)) vcid_groovx_rutz_freelist_cc_utc20050626084019[] = "$Id: freelist.cc 10095 2007-08-07 19:07:44Z rjpeters $ $HeadURL: file:
00079 #endif // !GROOVX_RUTZ_FREELIST_CC_UTC20050626084019_DEFINED