using System.Collections.Generic;
namespace Utility
{
///
/// Ermöglicht das erstellen einer Variable mit gestapeltem Wert, sodass überschreiben und zurücksetzen möglich ist.
///
public class ValueStack : Stack
{
///
/// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem Standardwert.
///
public ValueStack()
{
Push(default);
}
///
/// Erzeugt eine neue Instanz des ValueStacks und initialisiert diesen mit dem gegebenen Wert.
///
/// Der Wert, mit dem der Stack initialisiert werden soll.
public ValueStack(T initialValue)
{
Push(initialValue);
}
///
/// Setzt den Wert des Stacks auf den gegebenen Wert.
///
/// Der Wert, auf den der Stack gesetzt werden soll.
/// Der gegebene Wert um Verkettung von Expression zu ermöglichen.
public new T Push(T value)
{
base.Push(value);
return value;
}
///
/// Popt den obersten Wert des Stacks, wenn der Stack nur noch einen Wert enthält, wird nicht gepopt und dieser zurückgegeben.
///
public new T Pop()
{
if (Count == 1)
return Peek();
return base.Pop();
}
///
/// Gibt den aktuellen Wert des ValueStacks zurück.
///
public T CurrentValue() => Peek();
public static implicit operator T(ValueStack stack) => stack.CurrentValue();
}
}