1 #ifndef _PROTO_STACK_H_ 2 #define _PROTO_STACK_H_ 11 #define PR_STACK_ALLOC 4294967296 //4GB 13 #define PR_STACK_OVERFLOW 536870912 //512MB 16 template<MemType MEM = MEMTYPE_DEFAULT>
48 "Stack::alloc | Error: Tried to allocate an array of size 0 to Stack.");
50 "Stack::alloc | Error: Tried to use the stack when it is not turned on. Did you forget to call PR_STACK_ON?");
52 const size_t align = 256;
53 size_t increment = align*((a_sz+align-1)/align);
55 size_t increment = a_sz;
69 "Stack::toggleStack | Error: Toggling stack usage to %d when it is already %d. Did you forget to call PR_STACK_OFF?", a_flag,
m_useStack);
111 void* rtn = (
void*)(
m_top);
112 m_top += a_increment;
153 #define PR_STACK_ON Stack<MEMTYPE_DEFAULT>::getStack().toggleStack(true); 154 #define PR_STACK_OFF Stack<MEMTYPE_DEFAULT>::getStack().toggleStack(false); 157 #endif // end include guard
void * alloc(size_t a_sz)
Public Allocate.
Definition: Proto_Stack.H:45
std::shared_ptr< Stack< MEM > > m_overflow
Definition: Proto_Stack.H:149
char * m_stack
Definition: Proto_Stack.H:143
static Stack< MEM > & getStack()
Get Stack Singleton.
Definition: Proto_Stack.H:22
size_t used()
Query Unused.
Definition: Proto_Stack.H:93
#define PR_STACK_ALLOC
Definition: Proto_Stack.H:11
#define protoFree(memtype, PTR)
Definition: Proto_Macros.H:22
char * m_top
Definition: Proto_Stack.H:144
void freeStack()
Free Stack.
Definition: Proto_Stack.H:128
#define protoMalloc(memtype, PTR, NBYTES)
Definition: Proto_Macros.H:21
Definition: Proto_Stack.H:17
bool enabled()
Query Stack Active.
Definition: Proto_Stack.H:75
#define PROTO_ASSERT(stmt, args...)
Definition: Proto_PAssert.H:48
std::stack< size_t > m_increments
Definition: Proto_Stack.H:146
size_t m_capacity
Definition: Proto_Stack.H:145
Stack(size_t a_capacity)
Constructor.
Definition: Proto_Stack.H:29
Definition: Proto_Array.H:17
int m_bufferIndex
Definition: Proto_Stack.H:147
void toggleStack(bool a_flag)
Toggle Stack.
Definition: Proto_Stack.H:66
~Stack()
Destructor.
Definition: Proto_Stack.H:39
#define PR_STACK_OVERFLOW
Definition: Proto_Stack.H:13
bool m_useStack
Definition: Proto_Stack.H:142
void * doAlloc(size_t a_increment)
Private Allocate.
Definition: Proto_Stack.H:107
bool m_hasOverflow
Definition: Proto_Stack.H:148
size_t unused()
Query Unused.
Definition: Proto_Stack.H:81