6 #ifndef realroot_SOLVE_MEMORY_NSTACK_HPP
7 #define realroot_SOLVE_MEMORY_NSTACK_HPP
17 template<
typename T >
23 inline void *
_alloc_( sz_t sz ) {
return malloc( sz ); };
25 if ( m_frees ) { T * tmp =
m_frees; m_frees =
prev(m_frees);
prev(tmp) = 0;
return tmp; };
27 for ( sz_t i = 0; i <
m_n; i ++ )
new((
void*)(tmp+i)) T;
31 inline T*&
prev( T * chnk ) {
return *(T**)(chnk+m_n); };
39 if (
sizeof(T) >
sizeof(T*) ) m_sz = n+1;
else m_sz = n+2;
49 if ( ! tmp )
return 0;
50 while (
prev(tmp) ) { rslt ++; tmp =
prev(tmp); };
61 for ( sz_t i = 0; i <
m_n; i ++ ) (tmp+i)->~T();
void popall()
Definition: system_nstack.h:54
void push()
Definition: system_nstack.h:35
T * m_top
Definition: system_nstack.h:22
T * alloc()
Definition: system_nstack.h:24
T * top()
Definition: system_nstack.h:34
T *& prev(T *chnk)
Definition: system_nstack.h:31
Definition: system_nstack.h:18
nstack(unsigned n=1)
Definition: system_nstack.h:37
~nstack()
Definition: system_nstack.h:56
unsigned int sz_t
Definition: system_nstack.h:20
sz_t m_sz
Definition: system_nstack.h:21
void pop()
Definition: system_nstack.h:33
unsigned deep()
Definition: system_nstack.h:45
T * m_frees
Definition: system_nstack.h:22
sz_t m_n
Definition: system_nstack.h:21
void * _alloc_(sz_t sz)
Definition: system_nstack.h:23