F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
Stack.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \file Stack.hpp
3 // \author bocchino
4 // \brief A stack with internal storage
5 // ======================================================================
6 
7 #ifndef Fw_Stack_HPP
8 #define Fw_Stack_HPP
9 
12 
13 namespace Fw {
14 
15 template <typename T, FwSizeType C>
16 class Stack final : public StackBase<T> {
17  // ----------------------------------------------------------------------
18  // Static assertions
19  // ----------------------------------------------------------------------
20 
21  static_assert(std::is_default_constructible<T>::value, "T must be default constructible");
22  static_assert(C > 0, "capacity must be greater than zero");
23 
24  // ----------------------------------------------------------------------
25  // Friend class for testing
26  // ----------------------------------------------------------------------
27 
28  template <typename TT, FwSizeType CC>
29  friend class StackTester;
30 
31  public:
32  // ----------------------------------------------------------------------
33  // Public constructors and destructors
34  // ----------------------------------------------------------------------
35 
37  Stack() : StackBase<T>(), m_extStack(m_items, C) {}
38 
40  Stack(const Stack<T, C>& stack) : StackBase<T>(), m_extStack(m_items, C) { *this = stack; }
41 
43  ~Stack() override = default;
44 
45  public:
46  // ----------------------------------------------------------------------
47  // Public member functions
48  // ----------------------------------------------------------------------
49 
52  this->m_extStack.copyDataFrom(stack);
53  return *this;
54  }
55 
57  void clear() override { this->m_extStack.clear(); }
58 
61  Success push(const T& e
62  ) override {
63  return this->m_extStack.push(e);
64  }
65 
68  Success pop(T& e
69  ) override {
70  return this->m_extStack.pop(e);
71  }
72 
75  FwSizeType getSize() const override { return this->m_extStack.getSize(); }
76 
79  FwSizeType getCapacity() const override { return this->m_extStack.getCapacity(); }
80 
86  const T& at(FwSizeType index
87  ) const override {
88  return this->m_extStack.at(index);
89  }
90 
91  private:
92  // ----------------------------------------------------------------------
93  // Private member variables
94  // ----------------------------------------------------------------------
95 
97  ExternalStack<T> m_extStack = {};
98 
100  T m_items[C] = {};
101 };
102 
103 } // namespace Fw
104 
105 #endif
friend class StackTester
Definition: Stack.hpp:21
~Stack() override=default
Destructor.
PlatformSizeType FwSizeType
FwSizeType getSize() const override
Definition: Stack.hpp:75
Stack(const Stack< T, C > &stack)
Copy constructor.
Definition: Stack.hpp:40
Success push(const T &e) override
Definition: Stack.hpp:61
void clear() override
Clear the stack.
Definition: Stack.hpp:57
const T & at(FwSizeType index) const override
Definition: Stack.hpp:86
Stack()
Zero-argument constructor.
Definition: Stack.hpp:37
FwSizeType getCapacity() const override
Definition: Stack.hpp:79
Stack< T, C > & operator=(const Stack< T, C > &stack)
operator=
Definition: Stack.hpp:51
Success/Failure.
Success pop(T &e) override
Definition: Stack.hpp:68