F´ Flight Software - C/C++ Documentation NASA-v1.6.0
A framework for building embedded system applications to NASA flight quality standards.
Loading...
Searching...
No Matches
Queue.cpp
Go to the documentation of this file.
1/*
2 * Queue.cpp:
3 *
4 * Implementation of the queue data type.
5 *
6 * Created on: July 5th, 2022
7 * Author: lestarch
8 *
9 */
10#include "Queue.hpp"
11#include <Fw/Types/Assert.hpp>
12
13namespace Types {
14
15Queue::Queue() : m_internal(), m_message_size(0) {}
16
17void Queue::setup(U8* const storage, const FwSizeType storage_size, const FwSizeType depth, const FwSizeType message_size) {
18 // Ensure that enough storage was supplied
19 const FwSizeType total_needed_size = depth * message_size;
20 FW_ASSERT(storage_size >= total_needed_size, storage_size, depth, message_size);
21 m_internal.setup(storage, total_needed_size);
22 m_message_size = message_size;
23}
24
25Fw::SerializeStatus Queue::enqueue(const U8* const message, const FwSizeType size) {
26 FW_ASSERT(m_message_size > 0, m_message_size); // Ensure initialization
27 FW_ASSERT(m_message_size == size, size, m_message_size); // Message size is as expected
28 return m_internal.serialize(message, static_cast<NATIVE_UINT_TYPE>(m_message_size));
29}
30
31Fw::SerializeStatus Queue::dequeue(U8* const message, const FwSizeType size) {
32 FW_ASSERT(m_message_size > 0); // Ensure initialization
33 FW_ASSERT(m_message_size <= size, size, m_message_size); // Sufficient storage space for read message
34 Fw::SerializeStatus result = m_internal.peek(message, static_cast<NATIVE_UINT_TYPE>(m_message_size), 0);
35 if (result != Fw::FW_SERIALIZE_OK) {
36 return result;
37 }
38 return m_internal.rotate(m_message_size);
39}
40
42 FW_ASSERT(m_message_size > 0, m_message_size);
43 return m_internal.get_high_water_mark() / m_message_size;
44}
45
49
51 FW_ASSERT(m_message_size > 0, m_message_size);
52 return m_internal.get_allocated_size()/m_message_size;
53}
54
55
56}; // namespace Types
#define FW_ASSERT(...)
Definition Assert.hpp:7
uint8_t U8
8-bit unsigned integer
Definition BasicTypes.h:26
PlatformUIntType NATIVE_UINT_TYPE
Definition BasicTypes.h:52
PlatformSizeType FwSizeType
Definition FpConfig.h:18
Fw::SerializeStatus serialize(const U8 *const buffer, const NATIVE_UINT_TYPE size)
NATIVE_UINT_TYPE get_allocated_size() const
NATIVE_UINT_TYPE get_high_water_mark() const
void setup(U8 *const buffer, const NATIVE_UINT_TYPE size)
Fw::SerializeStatus peek(char &value, NATIVE_UINT_TYPE offset=0) const
Fw::SerializeStatus rotate(NATIVE_UINT_TYPE amount)
NATIVE_UINT_TYPE get_high_water_mark() const
Definition Queue.cpp:41
Fw::SerializeStatus enqueue(const U8 *const message, const FwSizeType size)
pushes a fixed-size message onto the back of the queue
Definition Queue.cpp:25
void setup(U8 *const storage, const FwSizeType storage_size, const FwSizeType depth, const FwSizeType message_size)
setup the queue object to setup storage
Definition Queue.cpp:17
void clear_high_water_mark()
Definition Queue.cpp:46
NATIVE_UINT_TYPE getQueueSize() const
Definition Queue.cpp:50
Queue()
constructs an uninitialized queue
Definition Queue.cpp:15
Fw::SerializeStatus dequeue(U8 *const message, const FwSizeType size)
pops a fixed-size message off the front of the queue
Definition Queue.cpp:31
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.