| /* 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)) |
| { |
| } |