OpenDDS::DCPS::DataSampleElement Class Reference

#include <DataSampleElement.h>

Inheritance diagram for OpenDDS::DCPS::DataSampleElement:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::DataSampleElement:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 DataSampleElement (PublicationId publication_id, TransportSendListener *send_listener, PublicationInstance_rch handle)
 DataSampleElement (const DataSampleElement &elem)
DataSampleElementoperator= (const DataSampleElement &elem)
 ~DataSampleElement ()
const DataSampleHeaderget_header () const
DataSampleHeaderget_header ()
DataSampleget_sample () const
DataSampleget_sample ()
void set_sample (Message_Block_Ptr sample)
PublicationId get_pub_id () const
CORBA::ULong get_num_subs () const
void set_num_subs (int num_subs)
const OpenDDS::DCPS::RepoIdget_sub_ids () const
OpenDDS::DCPS::RepoId get_sub_id (int index) const
void set_sub_id (int index, OpenDDS::DCPS::RepoId id)
TransportSendListenerget_send_listener () const
TransportSendListenerget_send_listener ()
PublicationInstance_rch get_handle () const
typedef OPENDDS_MAP (DataLinkIdType, GUIDSeq_var) DataLinkIdTypeGUIDMap
DataLinkIdTypeGUIDMap & get_filter_per_link ()
void set_filter_out (GUIDSeq *filter_out)
void set_transaction_id (ACE_UINT64 transaction_id)
ACE_UINT64 transaction_id () const

Private Member Functions

DataSampleElementget_next_send_sample () const
void set_next_send_sample (DataSampleElement *next_send_sample)

Private Attributes

ACE_UINT64 transaction_id_
DataSampleHeader header_
 The OpenDDS DCPS header for this sample.
Message_Block_Ptr sample_
PublicationId publication_id_
 Publication Id used downstream.
CORBA::ULong num_subs_
OpenDDS::DCPS::RepoId subscription_ids_ [OpenDDS::DCPS::MAX_READERS_PER_ELEM]
TransportSendListenersend_listener_
PublicationInstance_rch handle_
GUIDSeq_var filter_out_
 tracking for Content-Filtering data
DataLinkIdTypeGUIDMap filter_per_link_
DataSampleElementprevious_writer_sample_
 Thread of all data within a DataWriter.
DataSampleElementnext_writer_sample_
DataSampleElementnext_instance_sample_
 Thread of data within the instance.
DataSampleElementprevious_instance_sample_
DataSampleElementnext_send_sample_
 Thread of data being unsent/sending/sent/released.
DataSampleElementprevious_send_sample_

Friends

class SendStateDataSampleList
class WriterDataSampleList
class InstanceDataSampleList
class TransportClient
class ::DDS_TEST
class SendStateDataSampleListIterator
 Iterators needs access to prev/next pointers for iteration.
class SendStateDataSampleListConstIterator

Detailed Description

Wraps the marshaled message sample to be published, along with the publication Id and Instance handle for downstream processing.

Internally there are next/previous pointers that used for lists InstanceDataSampleList, SendStateDataSampleList, and WriterDataSampleList. These pointers are kept in this single element rather than having multiple smaller lists in order to allow us to allocate once which will minimize locking. Note that because the list pointers are stored within the element, the element can simultaneously be in at most one InstanceDataSampleList list, one SendStateDataSampleList list, and one WriterDataSampleList list.

Definition at line 53 of file DataSampleElement.h.


Constructor & Destructor Documentation

OpenDDS::DCPS::DataSampleElement::DataSampleElement ( PublicationId  publication_id,
TransportSendListener send_listener,
PublicationInstance_rch  handle 
)

Definition at line 22 of file DataSampleElement.cpp.

References OpenDDS::DCPS::GUID_UNKNOWN, OpenDDS::DCPS::MAX_READERS_PER_ELEM, and subscription_ids_.

00026   : transaction_id_(0),
00027     publication_id_(publication_id),
00028     num_subs_(0),
00029     send_listener_(send_listener),
00030     handle_(handle),
00031     previous_writer_sample_(0),
00032     next_writer_sample_(0),
00033     next_instance_sample_(0),
00034     previous_instance_sample_(0),
00035     next_send_sample_(0),
00036     previous_send_sample_(0)
00037 
00038 {
00039   std::fill(subscription_ids_,
00040     subscription_ids_ + OpenDDS::DCPS::MAX_READERS_PER_ELEM,
00041     GUID_UNKNOWN);
00042 }

OpenDDS::DCPS::DataSampleElement::DataSampleElement ( const DataSampleElement elem  ) 

Definition at line 44 of file DataSampleElement.cpp.

References num_subs_, and subscription_ids_.

00045   : transaction_id_(elem.transaction_id_)
00046   , header_(elem.header_)
00047   , sample_(elem.sample_ ? elem.sample_->duplicate() : 0)
00048   , publication_id_(elem.publication_id_)
00049   , num_subs_(elem.num_subs_)
00050   , send_listener_(elem.send_listener_)
00051   , handle_(elem.handle_)
00052   , filter_out_(elem.filter_out_)
00053   , filter_per_link_(elem.filter_per_link_)
00054   , previous_writer_sample_(elem.previous_writer_sample_)
00055   , next_writer_sample_(elem.next_writer_sample_)
00056   , next_instance_sample_(elem.next_instance_sample_)
00057   , previous_instance_sample_(elem.previous_instance_sample_)
00058   , next_send_sample_(elem.next_send_sample_)
00059   , previous_send_sample_(elem.previous_send_sample_)
00060 
00061 {
00062   std::copy(elem.subscription_ids_,
00063             elem.subscription_ids_ + num_subs_,
00064             subscription_ids_);
00065 }

OpenDDS::DCPS::DataSampleElement::~DataSampleElement (  ) 

Definition at line 67 of file DataSampleElement.cpp.

00068 {
00069 }


Member Function Documentation

ACE_INLINE DataSampleElement::DataLinkIdTypeGUIDMap & OpenDDS::DCPS::DataSampleElement::get_filter_per_link (  ) 

Definition at line 125 of file DataSampleElement.inl.

References filter_per_link_.

Referenced by OpenDDS::DCPS::DataLinkSet::send().

00126 {
00127   return filter_per_link_;
00128 }

Here is the caller graph for this function:

PublicationInstance_rch OpenDDS::DCPS::DataSampleElement::get_handle ( void   )  const

Definition at line 99 of file DataSampleElement.cpp.

References handle_.

Referenced by OpenDDS::DCPS::WriteDataContainer::data_delivered().

00100 {
00101   return handle_;
00102 }

Here is the caller graph for this function:

ACE_INLINE DataSampleHeader & OpenDDS::DCPS::DataSampleElement::get_header (  ) 

Definition at line 39 of file DataSampleElement.inl.

00040 {
00041   return const_cast<DataSampleHeader&>(static_cast<const DataSampleElement &>(*this).get_header());
00042 }

ACE_INLINE const DataSampleHeader & OpenDDS::DCPS::DataSampleElement::get_header (  )  const
ACE_INLINE DataSampleElement * OpenDDS::DCPS::DataSampleElement::get_next_send_sample (  )  const [private]

Definition at line 18 of file DataSampleElement.inl.

References next_send_sample_.

Referenced by OpenDDS::DCPS::TransportClient::send_i().

00019 {
00020   return next_send_sample_;
00021 }

Here is the caller graph for this function:

ACE_INLINE CORBA::ULong OpenDDS::DCPS::DataSampleElement::get_num_subs (  )  const

Definition at line 75 of file DataSampleElement.inl.

References num_subs_.

Referenced by OpenDDS::DCPS::RtpsSampleHeader::populate_data_sample_submessages(), OpenDDS::DCPS::TransportClient::send_i(), and OpenDDS::DCPS::TransportSendElement::subscription_id().

00076 {
00077   return num_subs_;
00078 }

Here is the caller graph for this function:

ACE_INLINE PublicationId OpenDDS::DCPS::DataSampleElement::get_pub_id (  )  const
ACE_INLINE DataSample * OpenDDS::DCPS::DataSampleElement::get_sample (  ) 

Definition at line 54 of file DataSampleElement.inl.

References OpenDDS::DCPS::unique_ptr< T, Deleter >::get(), and sample_.

00055 {
00056   return sample_.get();
00057 }

Here is the call graph for this function:

ACE_INLINE DataSample * OpenDDS::DCPS::DataSampleElement::get_sample (  )  const
ACE_INLINE TransportSendListener * OpenDDS::DCPS::DataSampleElement::get_send_listener (  ) 

Definition at line 117 of file DataSampleElement.inl.

References send_listener_.

00118 {
00119   return send_listener_;
00120 }

ACE_INLINE TransportSendListener * OpenDDS::DCPS::DataSampleElement::get_send_listener (  )  const

Definition at line 110 of file DataSampleElement.inl.

References send_listener_.

Referenced by OpenDDS::DCPS::RtpsSampleHeader::populate_data_sample_submessages(), OpenDDS::DCPS::TransportSendElement::release_element(), and OpenDDS::DCPS::TransportClient::send_i().

00111 {
00112   return send_listener_;
00113 }

Here is the caller graph for this function:

ACE_INLINE OpenDDS::DCPS::RepoId OpenDDS::DCPS::DataSampleElement::get_sub_id ( int  index  )  const

Definition at line 96 of file DataSampleElement.inl.

References subscription_ids_.

Referenced by OpenDDS::DCPS::RtpsSampleHeader::populate_data_sample_submessages(), and OpenDDS::DCPS::TransportSendElement::subscription_id().

00097 {
00098   return subscription_ids_[index];
00099 }

Here is the caller graph for this function:

ACE_INLINE const OpenDDS::DCPS::RepoId * OpenDDS::DCPS::DataSampleElement::get_sub_ids (  )  const

Definition at line 89 of file DataSampleElement.inl.

References subscription_ids_.

Referenced by OpenDDS::DCPS::TransportClient::send_i().

00090 {
00091   return subscription_ids_;
00092 }

Here is the caller graph for this function:

typedef OpenDDS::DCPS::DataSampleElement::OPENDDS_MAP ( DataLinkIdType  ,
GUIDSeq_var   
)
DataSampleElement & OpenDDS::DCPS::DataSampleElement::operator= ( const DataSampleElement elem  ) 

Definition at line 72 of file DataSampleElement.cpp.

References filter_out_, filter_per_link_, handle_, header_, next_instance_sample_, next_send_sample_, next_writer_sample_, num_subs_, previous_instance_sample_, previous_send_sample_, previous_writer_sample_, publication_id_, OpenDDS::DCPS::unique_ptr< T, Deleter >::reset(), sample_, send_listener_, subscription_ids_, and transaction_id_.

00073 {
00074   transaction_id_ = rhs.transaction_id_;
00075   header_ = rhs.header_;
00076   sample_.reset(rhs.sample_->duplicate());
00077   publication_id_ = rhs.publication_id_;
00078   num_subs_ = rhs.num_subs_;
00079 
00080   std::copy(rhs.subscription_ids_,
00081             rhs.subscription_ids_ + num_subs_,
00082             subscription_ids_);
00083 
00084   previous_writer_sample_ = rhs.previous_writer_sample_;
00085   next_writer_sample_ = rhs.next_writer_sample_;
00086   next_instance_sample_ = rhs.next_instance_sample_;
00087   previous_instance_sample_ = rhs.previous_instance_sample_;
00088   next_send_sample_ = rhs.next_send_sample_;
00089   previous_send_sample_ = rhs.previous_send_sample_;
00090   send_listener_ = rhs.send_listener_;
00091   handle_ = rhs.handle_;
00092   filter_out_ = rhs.filter_out_;
00093   filter_per_link_ = rhs.filter_per_link_;
00094 
00095   return *this;
00096 }

Here is the call graph for this function:

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_filter_out ( GUIDSeq filter_out  ) 

Definition at line 132 of file DataSampleElement.inl.

References filter_out_.

Referenced by OpenDDS::DCPS::DataWriterImpl::write().

00133 {
00134   filter_out_ = filter_out;
00135 }

Here is the caller graph for this function:

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_next_send_sample ( DataSampleElement next_send_sample  )  [private]

Definition at line 25 of file DataSampleElement.inl.

References next_send_sample_.

00026 {
00027   this->next_send_sample_ = next_send_sample;
00028 }

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_num_subs ( int  num_subs  ) 

Definition at line 82 of file DataSampleElement.inl.

References num_subs_.

Referenced by OpenDDS::DCPS::WriteDataContainer::copy_and_prepend(), and OpenDDS::DCPS::ReplayerImpl::write().

00083 {
00084   this->num_subs_ = num_subs;
00085 }

Here is the caller graph for this function:

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_sample ( Message_Block_Ptr  sample  ) 
ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_sub_id ( int  index,
OpenDDS::DCPS::RepoId  id 
)

Definition at line 103 of file DataSampleElement.inl.

References subscription_ids_.

Referenced by OpenDDS::DCPS::WriteDataContainer::copy_and_prepend(), and OpenDDS::DCPS::ReplayerImpl::write().

00104 {
00105   this->subscription_ids_[index] = id;
00106 }

Here is the caller graph for this function:

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_transaction_id ( ACE_UINT64  transaction_id  ) 

Definition at line 139 of file DataSampleElement.inl.

References transaction_id_.

00140 {
00141   transaction_id_ = transaction_id;
00142 }

ACE_INLINE ACE_UINT64 OpenDDS::DCPS::DataSampleElement::transaction_id (  )  const

Definition at line 146 of file DataSampleElement.inl.

References transaction_id_.

Referenced by OpenDDS::DCPS::TransportClient::send_i().

00147 {
00148   return transaction_id_;
00149 }

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class ::DDS_TEST [friend]

Definition at line 143 of file DataSampleElement.h.

friend class InstanceDataSampleList [friend]

Definition at line 141 of file DataSampleElement.h.

friend class SendStateDataSampleList [friend]

*DataSampleList(s) is in charge of managing list placement therefore needs access to pointers

Definition at line 139 of file DataSampleElement.h.

friend class SendStateDataSampleListConstIterator [friend]

Definition at line 146 of file DataSampleElement.h.

friend class SendStateDataSampleListIterator [friend]

Iterators needs access to prev/next pointers for iteration.

Definition at line 145 of file DataSampleElement.h.

friend class TransportClient [friend]

Definition at line 142 of file DataSampleElement.h.

friend class WriterDataSampleList [friend]

Definition at line 140 of file DataSampleElement.h.


Member Data Documentation

tracking for Content-Filtering data

Definition at line 129 of file DataSampleElement.h.

Referenced by operator=(), OpenDDS::DCPS::TransportClient::send_i(), and set_filter_out().

DataLinkIdTypeGUIDMap OpenDDS::DCPS::DataSampleElement::filter_per_link_ [private]

The pointer to the object that contains the instance information and data sample list. The client holds this as an InstanceHandle_t.

Definition at line 125 of file DataSampleElement.h.

Referenced by get_handle(), OpenDDS::DCPS::InstanceDataSampleList::on_some_list(), and operator=().

The OpenDDS DCPS header for this sample.

Definition at line 104 of file DataSampleElement.h.

Referenced by get_header(), and operator=().

Definition at line 113 of file DataSampleElement.h.

Referenced by DataSampleElement(), get_num_subs(), operator=(), and set_num_subs().

Thread of all data within a DataWriter.

Used to make removal from the container _much_ more efficient.

Definition at line 153 of file DataSampleElement.h.

Referenced by OpenDDS::DCPS::WriterDataSampleList::dequeue(), OpenDDS::DCPS::WriterDataSampleList::dequeue_head(), OpenDDS::DCPS::WriterDataSampleList::enqueue_tail(), and operator=().

Publication Id used downstream.

Definition at line 111 of file DataSampleElement.h.

Referenced by get_pub_id(), and operator=().

Message being sent which includes the DataSampleHeader message block and DataSample message block.

Definition at line 108 of file DataSampleElement.h.

Referenced by get_sample(), operator=(), and set_sample().

Pointer to object that will be informed when the data has been delivered. This needs to be set prior to using the TransportClient to send().

Definition at line 120 of file DataSampleElement.h.

Referenced by get_send_listener(), and operator=().

Definition at line 101 of file DataSampleElement.h.

Referenced by operator=(), set_transaction_id(), and transaction_id().


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