9 #ifndef OS_GENERIC_PRIORITYQUEUE_HPP
10 #define OS_GENERIC_PRIORITYQUEUE_HPP
uint8_t U8
8-bit unsigned integer
PlatformSizeType FwSizeType
PlatformQueuePriorityType FwQueuePriorityType
condition variable implementation
generic priority queue implementation
PriorityQueue()=default
default queue interface constructor
PriorityQueue & operator=(const QueueInterface &other) override=delete
assignment operator is forbidden
Status receive(U8 *destination, FwSizeType capacity, BlockingType blockType, FwSizeType &actualSize, FwQueuePriorityType &priority) override
receive a message from the queue
Status send(const U8 *buffer, FwSizeType size, FwQueuePriorityType priority, BlockingType blockType) override
send a message into the queue
PriorityQueue(const QueueInterface *other)=delete
copy constructor is forbidden
virtual ~PriorityQueue()
default queue destructor
PriorityQueueHandle m_handle
Status create(const Fw::StringBase &name, FwSizeType depth, FwSizeType messageSize) override
create queue storage
FwSizeType getMessagesAvailable() const override
get number of messages available
PriorityQueue(const QueueInterface &other)=delete
copy constructor is forbidden
FwSizeType getMessageHighWaterMark() const override
get maximum messages stored at any given time
QueueHandle * getHandle() override
return the underlying queue handle (implementation specific)
QueueHandle parent class.
Status
status returned from the queue send function
A stable max heap data structure.
critical data stored for priority queue
Os::Mutex m_data_lock
Lock against data manipulation.
void store_data(FwSizeType index, const U8 *source, FwSizeType size)
store data into a set index in the data store
FwSizeType m_startIndex
Start index of the circular data structure.
void load_data(FwSizeType index, U8 *destination, FwSizeType capacity)
load data from a set index in the data store
void return_index(FwSizeType index)
return index to the circular data structure
FwSizeType * m_sizes
Size store for each method.
FwSizeType m_maxSize
Maximum size allowed of a message.
FwSizeType find_index()
find an available index to store data from the list
Types::MaxHeap m_heap
MaxHeap data store for tracking priority.
FwSizeType * m_indices
List of indices into data.
Os::ConditionVariable m_empty
Queue empty condition variable to support blocking.
FwSizeType m_stopIndex
End index of the circular data structure.
U8 * m_data
Pointer to data allocation.
FwSizeType m_depth
Depth of the queue.
FwSizeType m_highMark
Message count high water mark.
Os::ConditionVariable m_full
Queue full condition variable to support blocking.