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