OpenDDS::DCPS::InstanceDataSampleList Class Reference

#include <InstanceDataSampleList.h>

Collaboration diagram for OpenDDS::DCPS::InstanceDataSampleList:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 InstanceDataSampleList ()
 ~InstanceDataSampleList ()
void reset ()
 Reset to initial state.
ssize_t size () const
DataSampleElementhead () const
DataSampleElementtail () 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 DataSampleElementnext (const DataSampleElement *iter)
static DataSampleElementprev (const DataSampleElement *iter)

Protected Attributes

DataSampleElementhead_
 The first element of the list.
DataSampleElementtail_
 The last element of the list.
ssize_t size_
 Number of elements in the list.

Detailed Description

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.


Constructor & Destructor Documentation

ACE_INLINE OpenDDS::DCPS::InstanceDataSampleList::InstanceDataSampleList (  ) 

Definition at line 16 of file InstanceDataSampleList.inl.

00017   : head_(0),
00018     tail_(0),
00019     size_(0)
00020 {
00021 }

OpenDDS::DCPS::InstanceDataSampleList::~InstanceDataSampleList (  )  [inline]

Definition at line 38 of file InstanceDataSampleList.h.

00038 {}


Member Function Documentation

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the caller graph for this function:

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 }

Here is the caller graph for this function:

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_.

00054 {
00055   return iter->next_instance_sample_;
00056 }

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 }

Here is the caller graph for this function:

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().

00061 {
00062   return iter->previous_instance_sample_;
00063 }

Here is the caller graph for this function:

ACE_INLINE void OpenDDS::DCPS::InstanceDataSampleList::reset ( void   ) 

Reset to initial state.

Definition at line 24 of file InstanceDataSampleList.inl.

References head_, size_, and tail_.

00025 {
00026   head_ = tail_ = 0;
00027   size_ = 0;
00028 }

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 }

Here is the caller graph for this function:

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 }

Here is the caller graph for this function:


Member Data Documentation

The first element of the list.

Definition at line 60 of file InstanceDataSampleList.h.

Referenced by dequeue(), dequeue_head(), enqueue_tail(), head(), and reset().

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().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1