cmConstStack.tcc 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file LICENSE.rst or https://cmake.org/licensing for details. */
  3. #include <cassert>
  4. #include <memory>
  5. #include <utility>
  6. template <typename T, typename Stack>
  7. struct cmConstStack<T, Stack>::Entry
  8. {
  9. Entry(std::shared_ptr<Entry const> parent, T value)
  10. : Value(std::move(value))
  11. , Parent(std::move(parent))
  12. {
  13. }
  14. T Value;
  15. std::shared_ptr<Entry const> Parent;
  16. };
  17. template <typename T, typename Stack>
  18. cmConstStack<T, Stack>::cmConstStack() = default;
  19. template <typename T, typename Stack>
  20. Stack cmConstStack<T, Stack>::Push(T value) const
  21. {
  22. return Stack(this->TopEntry, std::move(value));
  23. }
  24. template <typename T, typename Stack>
  25. Stack cmConstStack<T, Stack>::Pop() const
  26. {
  27. assert(this->TopEntry);
  28. return Stack(this->TopEntry->Parent);
  29. }
  30. template <typename T, typename Stack>
  31. T const& cmConstStack<T, Stack>::Top() const
  32. {
  33. assert(this->TopEntry);
  34. return this->TopEntry->Value;
  35. }
  36. template <typename T, typename Stack>
  37. bool cmConstStack<T, Stack>::Empty() const
  38. {
  39. return !this->TopEntry;
  40. }
  41. template <typename T, typename Stack>
  42. cmConstStack<T, Stack>::cmConstStack(std::shared_ptr<Entry const> parent,
  43. T value)
  44. : TopEntry(
  45. std::make_shared<Entry const>(std::move(parent), std::move(value)))
  46. {
  47. }
  48. template <typename T, typename Stack>
  49. cmConstStack<T, Stack>::cmConstStack(std::shared_ptr<Entry const> top)
  50. : TopEntry(std::move(top))
  51. {
  52. }