A queue of the messages in the incoming data path. More...
#include <Incoming_Message_Queue.h>

Public Member Functions | |
| TAO_Incoming_Message_Queue (TAO_ORB_Core *orb_core) | |
| Constructor. | |
| ~TAO_Incoming_Message_Queue (void) | |
| Destructor. | |
| TAO_Queued_Data * | dequeue_head (void) |
| Adding and deleting a node from the queue. | |
| TAO_Queued_Data * | dequeue_tail (void) |
| int | enqueue_tail (TAO_Queued_Data *nd) |
| CORBA::ULong | queue_length (void) const |
| Return the length of the queue.. | |
Private Attributes | |
| TAO_Queued_Data * | last_added_ |
| A circular linked list of messages awaiting processing. | |
| CORBA::ULong | size_ |
| The size of the queue. | |
| TAO_ORB_Core * | orb_core_ |
| Copy of our ORB Core. | |
Friends | |
| class | TAO_Transport |
A queue of the messages in the incoming data path.
Please read the documentation in the TAO_Transport class to find out more about the design of the incoming data path.
Under certain conditions TAO may have to maintain a queue per-connection. This queue is drained by the pluggable protocols framework, normally under control of the ACE_Reactor, but other configurations are conceivable.
The memory that is allocated for holding the messages comes from the global pool for the following reasons
Definition at line 54 of file Incoming_Message_Queue.h.
| TAO_Incoming_Message_Queue::TAO_Incoming_Message_Queue | ( | TAO_ORB_Core * | orb_core | ) |
Constructor.
Definition at line 8 of file Incoming_Message_Queue.inl.
: last_added_ (0), size_ (0), orb_core_ (orb_core) { }
| TAO_Incoming_Message_Queue::~TAO_Incoming_Message_Queue | ( | void | ) |
Destructor.
Definition at line 18 of file Incoming_Message_Queue.cpp.
{
CORBA::ULong const sz = this->size_;
// Delete all the nodes left behind
for (CORBA::ULong i = 0;
i < sz;
++i)
{
TAO_Queued_Data *qd = this->dequeue_head ();
TAO_Queued_Data::release (qd);
}
}
| TAO_Queued_Data * TAO_Incoming_Message_Queue::dequeue_head | ( | void | ) |
Adding and deleting a node from the queue.
Definition at line 34 of file Incoming_Message_Queue.cpp.
{
if (this->size_ == 0)
return 0;
// Get the node on the head of the queue...
TAO_Queued_Data * const head = this->last_added_->next ();
// Reset the head node..
this->last_added_->next (head->next ());
// Decrease the size and reset last_added_ if empty
if (--this->size_ == 0)
this->last_added_ = 0;
return head;
}
| TAO_Queued_Data * TAO_Incoming_Message_Queue::dequeue_tail | ( | void | ) |
Definition at line 53 of file Incoming_Message_Queue.cpp.
{
// This is a bit painful stuff...
if (this->size_ == 0)
return 0;
// Get the node on the head of the queue...
TAO_Queued_Data *head = this->last_added_->next ();
while (head->next () != this->last_added_)
{
head = head->next ();
}
// Put the head in tmp.
head->next (this->last_added_->next ());
TAO_Queued_Data *ret_qd = this->last_added_;
this->last_added_ = head;
// Decrease the size
if (--this->size_ == 0)
this->last_added_ = 0;
return ret_qd;
}
| int TAO_Incoming_Message_Queue::enqueue_tail | ( | TAO_Queued_Data * | nd | ) |
Definition at line 82 of file Incoming_Message_Queue.cpp.
{
if (this->size_ == 0)
{
this->last_added_ = nd;
this->last_added_->next (this->last_added_);
}
else
{
nd->next (this->last_added_->next ());
this->last_added_->next (nd);
this->last_added_ = nd;
}
++this->size_;
return 0;
}
| CORBA::ULong TAO_Incoming_Message_Queue::queue_length | ( | void | ) | const |
Return the length of the queue..
Definition at line 16 of file Incoming_Message_Queue.inl.
{
return this->size_;
}
friend class TAO_Transport [friend] |
Definition at line 74 of file Incoming_Message_Queue.h.
A circular linked list of messages awaiting processing.
last_message_added_ points to the most recent message added to the list. The earliest addition can be easily accessed via last_message_added_->next_.
Definition at line 84 of file Incoming_Message_Queue.h.
Copy of our ORB Core.
Definition at line 90 of file Incoming_Message_Queue.h.
The size of the queue.
Definition at line 87 of file Incoming_Message_Queue.h.
1.7.0