|
|
@@ -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))
|
|
|
+{
|
|
|
+}
|