diff options
Diffstat (limited to 'Source/cmConstStack.tcc')
-rw-r--r-- | Source/cmConstStack.tcc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Source/cmConstStack.tcc b/Source/cmConstStack.tcc new file mode 100644 index 0000000..81918ee --- /dev/null +++ b/Source/cmConstStack.tcc @@ -0,0 +1,62 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ + +#include <cassert> +#include <memory> +#include <utility> + +template <typename T, typename Stack> +struct cmConstStack<T, Stack>::Entry +{ + Entry(std::shared_ptr<Entry const> parent, T value) + : Value(std::move(value)) + , Parent(std::move(parent)) + { + } + + T Value; + std::shared_ptr<Entry const> Parent; +}; + +template <typename T, typename Stack> +cmConstStack<T, Stack>::cmConstStack() = default; + +template <typename T, typename Stack> +Stack cmConstStack<T, Stack>::Push(T value) const +{ + return Stack(this->TopEntry, std::move(value)); +} + +template <typename T, typename Stack> +Stack cmConstStack<T, Stack>::Pop() const +{ + assert(this->TopEntry); + return Stack(this->TopEntry->Parent); +} + +template <typename T, typename Stack> +T const& cmConstStack<T, Stack>::Top() const +{ + assert(this->TopEntry); + return this->TopEntry->Value; +} + +template <typename T, typename Stack> +bool cmConstStack<T, Stack>::Empty() const +{ + return !this->TopEntry; +} + +template <typename T, typename Stack> +cmConstStack<T, Stack>::cmConstStack(std::shared_ptr<Entry const> parent, + T value) + : TopEntry( + std::make_shared<Entry const>(std::move(parent), std::move(value))) +{ +} + +template <typename T, typename Stack> +cmConstStack<T, Stack>::cmConstStack(std::shared_ptr<Entry const> top) + : TopEntry(std::move(top)) +{ +} |