export module Stack;

// Stackgrösse festlegen
constexpr auto SSIZE = 10;

// Klassendefinition
export class Stack
{
   // Eigenschaften
   short values[SSIZE]; // Feld für Ablage der Werte
   short stackPtr = 0;  // Feldindex (Stackindex)
 public:
   // Schnittstelle
   bool Push(short val); // Wert auf Stack ablegen
   bool Pop(short& val); // Wert vom Stack abholen
};

// Definition der Memberfunktionen
// Wert auf Stack ablegen
bool Stack::Push(short val)
{
    // Wenn Stack voll
    if (stackPtr == SSIZE)
        return false;
    // Neuen Wert ablegen
    values[stackPtr] = val;
    stackPtr++;
    // Returnwert auf true setzen
    return true;
}
// Wert vom Stack holen
bool Stack::Pop(short& val)
{
    // keine Daten auf dem Stack
    if (stackPtr == 0)
        return false;
    // Wert vom Stack holen
    stackPtr--;
    val = values[stackPtr];
    return true;
}
