#ifndef __STACK_H
#define __STACK_H

#ifndef __ARRAY_H
#include <array.h>
#endif

// @doc EXTERNAL

// @class TStack | Classe per la gestione dello stack a basso livello
//
// @base public | TArray
class TStack : private TArray

// @author:(INTERNAL) Alex

// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Puntatore alla cima dello stack
  int _sp;

// @access Public Member
public:
  // @cmember Ritorna il puntatore allo stack
  int count() const 
  { return _sp; }
  // @cmember Aggiunge un oggetto sullo stack
  void push(const TObject& o);
  // @cmember Aggiunge un oggetto sullo stack
  void push(TObject* o);
  // @cmember Ritorna il primo oggetto sulla cima dello stack
  TObject& pop();       
  // @cmember Ritorna l'oggetto ad una data profondita' nello stack
  TObject& peek(int depth = 0) const;
  // @cmember Costruttore. Chiama il costruttore di <c TArray>
  TStack(int size = 16);
  // @cmember Distruttore. Chiama il distruttore di <c TArray>
  virtual ~TStack() { }
};

#endif
