From 469bbcf0701e1eb8a6670c23145b0da87357e178 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sun, 25 Mar 2012 20:00:08 +0000 Subject: Code is all reorganized. We're about ready to release. I should write up a little explenation of the arrangement. --- src/stable/stack.h | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/stable/stack.h (limited to 'src/stable/stack.h') diff --git a/src/stable/stack.h b/src/stable/stack.h new file mode 100644 index 0000000..0d1ed3c --- /dev/null +++ b/src/stable/stack.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2007-2011 Xagasoft, All rights reserved. + * + * This file is part of the libbu++ library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#ifndef BU_STACK_H +#define BU_STACK_H + +#include +#include "bu/config.h" + +namespace Bu +{ + template > + class Stack + { + private: + typedef struct Chunk + { + value *pValue; + Chunk *pPrev; + } Chunk; + public: + Stack() : + pTop( NULL ) + { + } + + virtual ~Stack() + { + } + + void push( const value &v ) + { + Chunk *pChnk = new Chunk; + pChnk->pValue = va.allocate( 1 ); + va.construct( pChnk->pValue, v ); + pChnk->pPrev = pTop; + pTop = pChnk; + } + + value &peek() + { + return *pTop->pValue; + } + + value &top() + { + return *pTop->pValue; + } + + value pop() + { + value ret( *pTop->pValue ); + + Chunk *pChnk = pTop; + pTop = pTop->pPrev; + + va.destroy( pChnk->pValue ); + va.deallocate( pChnk->pValue, 1 ); + delete pChnk; + + return ret; + } + + void clear() + { + while( !isEmpty() ) + pop(); + } + + bool isEmpty() + { + return pTop == NULL; + } + + private: + Chunk *pTop; + valuealloc va; + }; +} + +#endif -- cgit v1.2.3