/** @file
Parser: stack class decl.
Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
*/
#ifndef PA_STACK_H
#define PA_STACK_H
static const char* IDENT_STACK_H="$Date: 2003/04/02 08:11:31 $";
#include "pa_config_includes.h"
#include "pa_array.h"
/// simple stack based on Array
template<typename T> class Stack: public Array<T> {
public:
Stack(): ftop(0) {}
void push(T item) {
if(ftop<count()) // cell is already allocated?
/*unchecked_*/put(ftop, item); // use it
else
*this+=item; // append it
ftop++;
}
T pop() {
return get(--ftop);
}
size_t top_index() { return ftop-1; }
void top_index(size_t top_index) { ftop=top_index+1; }
T top_value() { return get(top_index()); }
/// call this prior to collecting garbage [in unused part of stack there may be pointers(unused)]
void wipe_unused() {
if(!is_full())
memset(&felements[fused], 0, (fallocated-fused)*sizeof(T));
}
private:
// deepest used index+1
size_t ftop;
};
#endif
E-mail: