F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
FifoQueueBase.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title FifoQueueBase
3 // \author bocchino
4 // \brief An abstract base class template for a FIFO queue
5 // ======================================================================
6 
7 #ifndef Fw_FifoQueueBase_HPP
8 #define Fw_FifoQueueBase_HPP
9 
11 #include "Fw/Types/Assert.hpp"
13 
14 namespace Fw {
15 
16 template <typename T>
17 class FifoQueueBase : public SizedContainer {
18  private:
19  // ----------------------------------------------------------------------
20  // Private constructors
21  // ----------------------------------------------------------------------
22 
25  FifoQueueBase(const FifoQueueBase<T>&) = delete;
26 
27  protected:
28  // ----------------------------------------------------------------------
29  // Protected constructors and destructors
30  // ----------------------------------------------------------------------
31 
34 
36  virtual ~FifoQueueBase() = default;
37 
38  private:
39  // ----------------------------------------------------------------------
40  // Private member functions
41  // ----------------------------------------------------------------------
42 
46  FifoQueueBase<T>& operator=(const FifoQueueBase<T>&) = delete;
47 
48  public:
49  // ----------------------------------------------------------------------
50  // Public member functions
51  // ----------------------------------------------------------------------
52 
57  virtual const T& at(FwSizeType index
58  ) const = 0;
59 
61  void copyDataFrom(const FifoQueueBase<T>& queue
62  ) {
63  if (&queue != this) {
64  this->clear();
65  const FwSizeType size = FW_MIN(queue.getSize(), this->getCapacity());
66  for (FwSizeType i = 0; i < size; i++) {
67  const auto& e = queue.at(i);
68  const auto status = this->enqueue(e);
69  FW_ASSERT(status == Fw::Success::SUCCESS, static_cast<FwAssertArgType>(status));
70  }
71  }
72  }
73 
76  virtual Success enqueue(const T& e
77  ) = 0;
78 
82  Success peek(T& e,
83  FwSizeType index = 0
84  ) const {
85  auto status = Success::FAILURE;
86  if (index < this->getSize()) {
87  e = this->at(index);
88  status = Success::SUCCESS;
89  }
90  return status;
91  }
92 
95  virtual Success dequeue(T& e
96  ) = 0;
97 };
98 
99 } // namespace Fw
100 
101 #endif
FifoQueueBase()
Zero-argument constructor.
virtual Success dequeue(T &e)=0
Representing success.
PlatformSizeType FwSizeType
Success peek(T &e, FwSizeType index=0) const
virtual FwSizeType getSize() const =0
virtual Success enqueue(const T &e)=0
#define FW_MIN(a, b)
MIN macro.
Definition: BasicTypes.h:92
virtual FwSizeType getCapacity() const =0
void copyDataFrom(const FifoQueueBase< T > &queue)
Copy data from another queue.
Representing failure.
virtual const T & at(FwSizeType index) const =0
virtual ~FifoQueueBase()=default
Destructor.
virtual void clear()=0
Clear the container.
#define FW_ASSERT(...)
Definition: Assert.hpp:14
Success/Failure.