#include <NQPacketQueue.h>
Inherits CNQLockMechanism.
Public Member Functions | |
CNQPacketQueue () | |
virtual | ~CNQPacketQueue () |
bool | setQueueMaxsize (INT32 maxsize, UINT32 &lasterr) |
Adjust the Queue depth. | |
UINT32 | getLastError () |
Returns last error code happened. | |
bool | pop_front (CNQMessage **obj, UINT32 &lasterr) |
Gets the first message (FIFO) out of the queue. | |
bool | push_back (const CNQMessage *obj, UINT32 &lasterr) |
Appends a CNQMessage object to the end of the (FIFO) queue. | |
bool | remove_elem (UINT16 requestid, UINT32 &lasterr) |
bool | find_elem (UINT16 requestid, CNQMessage **obj, UINT32 &lasterr) |
bool | find_and_remove_elem (UINT16 requestid, CNQMessage **obj, UINT32 &lasterr) |
int | size (UINT32 &lasterr) |
bool | find_elem_ack_and_signal (const CNQMessage &aAckPacket, UINT32 &lasterr) |
bool | find_and_remove_passed_elem (CNQMessage *obj, UINT32 &lasterr) |
bool | setQueueMaxsize (INT32 maxsize) |
bool | pop_front (CNQMessage **obj) |
bool | push_back (const CNQMessage *obj) |
bool | remove_elem (UINT16 requestid) |
bool | find_elem (UINT16 requestid, CNQMessage **obj) |
bool | find_and_remove_elem (UINT16 requestid, CNQMessage **obj) |
int | size () |
Returns the current amount of elements stored in the queue. | |
bool | find_elem_ack_and_signal (const CNQMessage &aAckPacket) |
bool | find_and_remove_passed_elem (CNQMessage *obj) |
Private Attributes | |
INT32 | m_iQueueFirstElement |
INT32 | m_iQueueLastElement |
INT32 | m_iQueueNumElements |
VOIDP * | m_pQueueValue |
INT32 * | m_iQueueNextElement |
INT32 | m_iQueueMaxSize |
UINT32 | m_iLastError |
Friends | |
class | CNQMessage |
Using C++ STL this could be done much more easily, but implementation on Nios2 platform did not work (reason not fully known, stack issues suspected). This CNQPacketQueue was created as a slightly inferior, but working solution.
Implementation details:
Definition at line 25 of file NQPacketQueue.h.
CNQPacketQueue::CNQPacketQueue | ( | ) |
Definition at line 14 of file NQPacketQueue.cpp.
CNQPacketQueue::~CNQPacketQueue | ( | ) | [virtual] |
Definition at line 39 of file NQPacketQueue.cpp.
Adjust the Queue depth.
This method adjusts the queue depth by reinitializing the queue pool. Any data accumulated in the queue might be lost after readjustment.
maxsize | new 'queue depth' | |
lasterr | unique error code |
true | successfully readjusted to 'maxsize' depth | |
false | failure, something happened (see lasterr) if lasterr ERR_PQ_LOCK, mutex locking failed |
Definition at line 124 of file NQPacketQueue.cpp.
Referenced by CNetworkQueue::CNetworkQueue(), and setQueueMaxsize().
UINT32 CNQPacketQueue::getLastError | ( | ) |
Returns last error code happened.
for detailed list of possible error codes, see Declarations.h
Definition at line 768 of file NQPacketQueue.cpp.
bool CNQPacketQueue::pop_front | ( | CNQMessage ** | obj, | |
UINT32 & | lasterr | |||
) |
Gets the first message (FIFO) out of the queue.
obj | place to store extracted element (empty variable of type CNQMessage) | |
lasterr | unique error code |
true | successful, first element extracted and put to **obj | |
false | failure, something happened (see lasterr) |
Definition at line 177 of file NQPacketQueue.cpp.
Referenced by CNetworkQueue::close(), pop_front(), CNetworkQueue::recvMsg(), and CNetworkQueue::SendProcessTask().
bool CNQPacketQueue::push_back | ( | const CNQMessage * | obj, | |
UINT32 & | lasterr | |||
) |
Appends a CNQMessage object to the end of the (FIFO) queue.
obj | object reference to store | |
lasterr | unique error code |
true | successful, element reference to obj appended | |
false | failure, something happened (see lasterr) |
Definition at line 239 of file NQPacketQueue.cpp.
Referenced by push_back(), CNetworkQueue::ReceiveProcessTask(), CNetworkQueue::sendMsgTo(), and CNetworkQueue::sendMsgToInternal().
This method traverses the queue, looks for a CNQMessage element that contains the 'requestid' and removes it.
requestid | CNQMessage object's request id (this object will be removed from the queue if found) | |
lasterr | unique error code |
true | successful, element reference was removed | |
false | failure, something happened (see lasterr) |
Definition at line 327 of file NQPacketQueue.cpp.
Referenced by remove_elem().
bool CNQPacketQueue::find_elem | ( | UINT16 | requestid, | |
CNQMessage ** | obj, | |||
UINT32 & | lasterr | |||
) |
This method traverses the queue, looks for a CNQMessage element that contains the 'requestid' and returns it without removeing it.
requestid | CNQMessage object's request id (this object will be returned if found) | |
obj | place to store element, if found (empty variable of type CNQMessage *) | |
lasterr | unique error code |
true | successful, element is returned | |
false | failure, something happened, element is NOT returned (see lasterr) |
Definition at line 428 of file NQPacketQueue.cpp.
Referenced by find_elem().
bool CNQPacketQueue::find_and_remove_elem | ( | UINT16 | requestid, | |
CNQMessage ** | obj, | |||
UINT32 & | lasterr | |||
) |
This method traverses the queue, looks for a CNQMessage element that contains the 'requestid' and returns it. The object reference is removed from the queue.
requestid | CNQMessage object's request id (this object will be returned if found) | |
obj | place to store element, if found (empty variable of type CNQMessage *) | |
lasterr | unique error code |
true | successful, element is returned and removed from queue | |
false | failure, something happened, element is NOT returned (see lasterr) |
note\ This function contains assert() which gives more failure reasons during development/debugging.
Definition at line 666 of file NQPacketQueue.cpp.
Referenced by find_and_remove_elem(), and CNetworkQueue::sendRecvMsg().
int CNQPacketQueue::size | ( | UINT32 & | lasterr | ) |
bool CNQPacketQueue::find_elem_ack_and_signal | ( | const CNQMessage & | ack_packet, | |
UINT32 & | lasterr | |||
) |
This method traverses the queue, looks for a CNQMessage element that matches the passed 'ack packet' and signals the attached semaphore in case a match is found.
This method is used in order to signal 'waiting to be ACKed' packets inside ReceiveProcessTask on successful reception of an ACK packet.
ack_packet | CNQMessage object's ack_packet | |
lasterr | unique error code |
true | successful, element is returned | |
false | failure, something happened, element is NOT returned (see lasterr) |
Definition at line 495 of file NQPacketQueue.cpp.
Referenced by find_elem_ack_and_signal(), and CNetworkQueue::ReceiveProcessTask().
bool CNQPacketQueue::find_and_remove_passed_elem | ( | CNQMessage * | obj, | |
UINT32 & | lasterr | |||
) |
This method traverses the queue, looks for a CNQMessage element that matches the passed CNQMessage and, if found, removes the object reference from the queue.
obj | a valid CNQMessage to look for inside the queue | |
lasterr | unique error code |
true | successful, element is returned and removed from queue | |
false | failure, something happened, element is NOT returned (see lasterr) |
Definition at line 564 of file NQPacketQueue.cpp.
Referenced by find_and_remove_passed_elem(), and CNetworkQueue::sendMsgTo().
bool CNQPacketQueue::setQueueMaxsize | ( | INT32 | maxsize | ) |
bool CNQPacketQueue::pop_front | ( | CNQMessage ** | obj | ) |
bool CNQPacketQueue::push_back | ( | const CNQMessage * | obj | ) |
bool CNQPacketQueue::remove_elem | ( | UINT16 | requestid | ) |
bool CNQPacketQueue::find_elem | ( | UINT16 | requestid, | |
CNQMessage ** | obj | |||
) |
bool CNQPacketQueue::find_and_remove_elem | ( | UINT16 | requestid, | |
CNQMessage ** | obj | |||
) |
int CNQPacketQueue::size | ( | ) |
Returns the current amount of elements stored in the queue.
>0 | number of elements in queue | |
0 | failure or queue is empty (see lasterr) |
Definition at line 756 of file NQPacketQueue.cpp.
bool CNQPacketQueue::find_elem_ack_and_signal | ( | const CNQMessage & | aAckPacket | ) |
bool CNQPacketQueue::find_and_remove_passed_elem | ( | CNQMessage * | obj | ) |
friend class CNQMessage [friend] |
Definition at line 27 of file NQPacketQueue.h.
INT32 CNQPacketQueue::m_iQueueFirstElement [private] |
Definition at line 58 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), find_elem(), find_elem_ack_and_signal(), pop_front(), push_back(), remove_elem(), and setQueueMaxsize().
INT32 CNQPacketQueue::m_iQueueLastElement [private] |
Definition at line 59 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), pop_front(), push_back(), remove_elem(), and setQueueMaxsize().
INT32 CNQPacketQueue::m_iQueueNumElements [private] |
Definition at line 60 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), find_elem(), find_elem_ack_and_signal(), pop_front(), push_back(), remove_elem(), setQueueMaxsize(), and size().
VOIDP* CNQPacketQueue::m_pQueueValue [private] |
Definition at line 62 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), find_elem(), find_elem_ack_and_signal(), pop_front(), push_back(), remove_elem(), setQueueMaxsize(), and ~CNQPacketQueue().
INT32* CNQPacketQueue::m_iQueueNextElement [private] |
Definition at line 63 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), find_elem(), find_elem_ack_and_signal(), pop_front(), push_back(), remove_elem(), setQueueMaxsize(), and ~CNQPacketQueue().
INT32 CNQPacketQueue::m_iQueueMaxSize [private] |
Definition at line 65 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), push_back(), and setQueueMaxsize().
UINT32 CNQPacketQueue::m_iLastError [private] |
Definition at line 67 of file NQPacketQueue.h.
Referenced by CNQPacketQueue(), find_and_remove_elem(), find_and_remove_passed_elem(), find_elem(), find_elem_ack_and_signal(), getLastError(), pop_front(), push_back(), remove_elem(), and setQueueMaxsize().