#include <InstanceDataSampleList.h>
Public Member Functions | |
InstanceDataSampleList () | |
~InstanceDataSampleList () | |
void | reset () |
Reset to initial state. | |
ssize_t | size () const |
DataSampleElement * | head () const |
DataSampleElement * | tail () const |
void | enqueue_tail (const DataSampleElement *element) |
bool | dequeue_head (DataSampleElement *&stale) |
bool | dequeue (const DataSampleElement *stale) |
Static Public Member Functions | |
static bool | on_some_list (const DataSampleElement *iter) |
static DataSampleElement * | next (const DataSampleElement *iter) |
static DataSampleElement * | prev (const DataSampleElement *iter) |
Protected Attributes | |
DataSampleElement * | head_ |
The first element of the list. | |
DataSampleElement * | tail_ |
The last element of the list. | |
ssize_t | size_ |
Number of elements in the list. |
A list of DataSampleElement pointers to be queued by the order the samples are written to the instance (within PRESENTAION.access_scope==INSTANCE). It is mainly used on the send side to count the depth of instance data and to allow the removal of elements by instance. Manages DataSampleElement's next_instance_sample pointer
Definition at line 34 of file InstanceDataSampleList.h.
ACE_INLINE OpenDDS::DCPS::InstanceDataSampleList::InstanceDataSampleList | ( | ) |
Definition at line 16 of file InstanceDataSampleList.inl.
OpenDDS::DCPS::InstanceDataSampleList::~InstanceDataSampleList | ( | ) | [inline] |
Definition at line 38 of file InstanceDataSampleList.h.
bool OpenDDS::DCPS::InstanceDataSampleList::dequeue | ( | const DataSampleElement * | stale | ) |
Definition at line 33 of file InstanceDataSampleList.cpp.
References dequeue_head(), head_, OpenDDS::DCPS::DataSampleElement::next_instance_sample_, OpenDDS::DCPS::DataSampleElement::previous_instance_sample_, size_, and tail_.
Referenced by OpenDDS::DCPS::WriteDataContainer::remove_excess_durable().
00034 { 00035 if (head_ == 0) { 00036 return false; 00037 } 00038 00039 if (stale == head_) { 00040 DataSampleElement* tmp; 00041 return dequeue_head(tmp); 00042 } 00043 00044 if (stale == tail_) { 00045 tail_ = tail_->previous_instance_sample_; 00046 tail_->next_instance_sample_ = 0; 00047 00048 } else { 00049 stale->previous_instance_sample_->next_instance_sample_ = 00050 stale->next_instance_sample_; 00051 stale->next_instance_sample_->previous_instance_sample_ = 00052 stale->previous_instance_sample_; 00053 } 00054 00055 stale->next_instance_sample_ = stale->previous_instance_sample_ = 0; 00056 --size_; 00057 return true; 00058 }
ACE_INLINE bool OpenDDS::DCPS::InstanceDataSampleList::dequeue_head | ( | DataSampleElement *& | stale | ) |
Definition at line 92 of file InstanceDataSampleList.inl.
References head_, OpenDDS::DCPS::DataSampleElement::next_instance_sample_, OpenDDS::DCPS::DataSampleElement::previous_instance_sample_, size_, and tail_.
Referenced by dequeue(), and OpenDDS::DCPS::WriteDataContainer::remove_oldest_sample().
00093 { 00094 // 00095 // Remove the oldest sample from the instance list. 00096 // 00097 stale = head_; 00098 00099 if (head_ == 0) { 00100 // try to dequeue empty instance list. 00101 return false; 00102 00103 } else { 00104 --size_; 00105 head_ = head_->next_instance_sample_; 00106 00107 if (head_ == 0) { 00108 tail_ = 0; 00109 } else { 00110 head_->previous_instance_sample_ = 0; 00111 } 00112 00113 stale->next_instance_sample_ = 0; 00114 return true; 00115 } 00116 }
ACE_INLINE void OpenDDS::DCPS::InstanceDataSampleList::enqueue_tail | ( | const DataSampleElement * | element | ) |
Definition at line 67 of file InstanceDataSampleList.inl.
References head_, OpenDDS::DCPS::DataSampleElement::next_instance_sample_, OpenDDS::DCPS::DataSampleElement::previous_instance_sample_, size_, and tail_.
Referenced by OpenDDS::DCPS::WriteDataContainer::enqueue().
00068 { 00069 // const_cast here so that higher layers don't need to pass around so many 00070 // non-const pointers to DataSampleElement. Ideally the design would be 00071 // changed to accommodate const-correctness throughout. 00072 DataSampleElement* mSample = const_cast<DataSampleElement*>(sample); 00073 00074 mSample->next_instance_sample_ = 0; 00075 00076 ++size_; 00077 00078 if (head_ == 0) { 00079 // First sample on queue. 00080 head_ = tail_ = mSample; 00081 00082 } else { 00083 // Another sample on an existing queue. 00084 tail_->next_instance_sample_ = mSample; 00085 mSample->previous_instance_sample_ = tail_; 00086 tail_ = mSample; 00087 } 00088 }
ACE_INLINE DataSampleElement * OpenDDS::DCPS::InstanceDataSampleList::head | ( | void | ) | const |
Definition at line 39 of file InstanceDataSampleList.inl.
References head_.
00040 { 00041 return head_; 00042 }
ACE_INLINE DataSampleElement * OpenDDS::DCPS::InstanceDataSampleList::next | ( | const DataSampleElement * | iter | ) | [static] |
Definition at line 53 of file InstanceDataSampleList.inl.
References OpenDDS::DCPS::DataSampleElement::next_instance_sample_.
bool OpenDDS::DCPS::InstanceDataSampleList::on_some_list | ( | const DataSampleElement * | iter | ) | [static] |
Definition at line 26 of file InstanceDataSampleList.cpp.
References OpenDDS::DCPS::DataSampleElement::handle_, OpenDDS::DCPS::DataSampleElement::next_instance_sample_, and OpenDDS::DCPS::DataSampleElement::previous_instance_sample_.
Referenced by OpenDDS::DCPS::WriteDataContainer::data_delivered().
00027 { 00028 return iter->next_instance_sample_ || iter->previous_instance_sample_ 00029 || (iter->handle_ && iter->handle_->samples_.head_ == iter); 00030 }
ACE_INLINE DataSampleElement * OpenDDS::DCPS::InstanceDataSampleList::prev | ( | const DataSampleElement * | iter | ) | [static] |
Definition at line 60 of file InstanceDataSampleList.inl.
References OpenDDS::DCPS::DataSampleElement::previous_instance_sample_.
Referenced by OpenDDS::DCPS::WriteDataContainer::remove_excess_durable().
ACE_INLINE void OpenDDS::DCPS::InstanceDataSampleList::reset | ( | void | ) |
ACE_INLINE ssize_t OpenDDS::DCPS::InstanceDataSampleList::size | ( | void | ) | const |
Definition at line 32 of file InstanceDataSampleList.inl.
References size_.
Referenced by OpenDDS::DCPS::WriteDataContainer::dispose().
00033 { 00034 return size_; 00035 }
ACE_INLINE DataSampleElement * OpenDDS::DCPS::InstanceDataSampleList::tail | ( | void | ) | const |
Definition at line 46 of file InstanceDataSampleList.inl.
References tail_.
Referenced by OpenDDS::DCPS::WriteDataContainer::remove_excess_durable().
00047 { 00048 return tail_; 00049 }
The first element of the list.
Definition at line 60 of file InstanceDataSampleList.h.
Referenced by dequeue(), dequeue_head(), enqueue_tail(), head(), and reset().
ssize_t OpenDDS::DCPS::InstanceDataSampleList::size_ [protected] |
Number of elements in the list.
Definition at line 66 of file InstanceDataSampleList.h.
Referenced by dequeue(), dequeue_head(), enqueue_tail(), reset(), and size().
The last element of the list.
Definition at line 63 of file InstanceDataSampleList.h.
Referenced by dequeue(), dequeue_head(), enqueue_tail(), reset(), and tail().