OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
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]

Public Member Functions

 DataSampleElement (GUID_t 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)
 
GUID_t get_pub_id () const
 
CORBA::ULong get_num_subs () const
 
void set_num_subs (CORBA::ULong num_subs)
 
const OpenDDS::DCPS::GUID_tget_sub_ids () const
 
OpenDDS::DCPS::GUID_t get_sub_id (CORBA::ULong index) const
 
void set_sub_id (CORBA::ULong index, OpenDDS::DCPS::GUID_t 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. More...
 
Message_Block_Ptr sample_
 
GUID_t publication_id_
 Publication Id used downstream. More...
 
CORBA::ULong num_subs_
 
OpenDDS::DCPS::GUID_t subscription_ids_ [OpenDDS::DCPS::MAX_READERS_PER_ELEM]
 
TransportSendListenersend_listener_
 
PublicationInstance_rch handle_
 
GUIDSeq_var filter_out_
 tracking for Content-Filtering data More...
 
DataLinkIdTypeGUIDMap filter_per_link_
 
DataSampleElementprevious_writer_sample_
 Thread of all data within a DataWriter. More...
 
DataSampleElementnext_writer_sample_
 
DataSampleElementnext_instance_sample_
 Thread of data within the instance. More...
 
DataSampleElementprevious_instance_sample_
 
DataSampleElementnext_send_sample_
 Thread of data being unsent/sending/sent/released. More...
 
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. More...
 
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 54 of file DataSampleElement.h.

Constructor & Destructor Documentation

◆ DataSampleElement() [1/2]

OpenDDS::DCPS::DataSampleElement::DataSampleElement ( GUID_t  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_.

26  : transaction_id_(0),
27  publication_id_(publication_id),
28  num_subs_(0),
29  send_listener_(send_listener),
30  handle_(handle),
37 
38 {
39  std::fill(subscription_ids_,
41  GUID_UNKNOWN);
42 }
DataSampleElement * previous_instance_sample_
OpenDDS::DCPS::GUID_t subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
PublicationInstance_rch handle_
DataSampleElement * previous_send_sample_
DataSampleElement * next_writer_sample_
DataSampleElement * next_instance_sample_
Thread of data within the instance.
DataSampleElement * previous_writer_sample_
Thread of all data within a DataWriter.
DataSampleElement * next_send_sample_
Thread of data being unsent/sending/sent/released.
GUID_t publication_id_
Publication Id used downstream.
TransportSendListener * send_listener_
const CORBA::ULong MAX_READERS_PER_ELEM

◆ DataSampleElement() [2/2]

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

Definition at line 44 of file DataSampleElement.cpp.

References num_subs_, and subscription_ids_.

45  : transaction_id_(elem.transaction_id_)
46  , header_(elem.header_)
47  , sample_(elem.sample_ ? elem.sample_->duplicate() : 0)
48  , publication_id_(elem.publication_id_)
49  , num_subs_(elem.num_subs_)
50  , send_listener_(elem.send_listener_)
51  , handle_(elem.handle_)
52  , filter_out_(elem.filter_out_)
53  , filter_per_link_(elem.filter_per_link_)
54  , previous_writer_sample_(elem.previous_writer_sample_)
55  , next_writer_sample_(elem.next_writer_sample_)
56  , next_instance_sample_(elem.next_instance_sample_)
57  , previous_instance_sample_(elem.previous_instance_sample_)
58  , next_send_sample_(elem.next_send_sample_)
59  , previous_send_sample_(elem.previous_send_sample_)
60 
61 {
62  std::copy(elem.subscription_ids_,
63  elem.subscription_ids_ + num_subs_,
65 }
DataSampleHeader header_
The OpenDDS DCPS header for this sample.
DataSampleElement * previous_instance_sample_
OpenDDS::DCPS::GUID_t subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]
GUIDSeq_var filter_out_
tracking for Content-Filtering data
PublicationInstance_rch handle_
DataSampleElement * previous_send_sample_
DataSampleElement * next_writer_sample_
DataSampleElement * next_instance_sample_
Thread of data within the instance.
DataSampleElement * previous_writer_sample_
Thread of all data within a DataWriter.
DataLinkIdTypeGUIDMap filter_per_link_
DataSampleElement * next_send_sample_
Thread of data being unsent/sending/sent/released.
GUID_t publication_id_
Publication Id used downstream.
TransportSendListener * send_listener_

◆ ~DataSampleElement()

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

Definition at line 67 of file DataSampleElement.cpp.

68 {
69 }

Member Function Documentation

◆ get_filter_per_link()

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

Definition at line 125 of file DataSampleElement.inl.

References ACE_INLINE, and filter_per_link_.

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

126 {
127  return filter_per_link_;
128 }
DataLinkIdTypeGUIDMap filter_per_link_

◆ get_handle()

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

Definition at line 99 of file DataSampleElement.cpp.

References handle_, and OPENDDS_END_VERSIONED_NAMESPACE_DECL.

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

100 {
101  return handle_;
102 }
PublicationInstance_rch handle_

◆ get_header() [1/2]

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

◆ get_header() [2/2]

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

Definition at line 39 of file DataSampleElement.inl.

References ACE_INLINE, and get_header().

40 {
41  return const_cast<DataSampleHeader&>(static_cast<const DataSampleElement &>(*this).get_header());
42 }
DataSampleElement(GUID_t publication_id, TransportSendListener *send_listener, PublicationInstance_rch handle)

◆ get_next_send_sample()

ACE_INLINE DataSampleElement * OpenDDS::DCPS::DataSampleElement::get_next_send_sample ( ) const
private

Definition at line 18 of file DataSampleElement.inl.

References ACE_INLINE, and next_send_sample_.

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

19 {
20  return next_send_sample_;
21 }
DataSampleElement * next_send_sample_
Thread of data being unsent/sending/sent/released.

◆ get_num_subs()

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

◆ get_pub_id()

ACE_INLINE GUID_t OpenDDS::DCPS::DataSampleElement::get_pub_id ( ) const

◆ get_sample() [1/2]

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

◆ get_sample() [2/2]

ACE_INLINE DataSample * OpenDDS::DCPS::DataSampleElement::get_sample ( )

Definition at line 54 of file DataSampleElement.inl.

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

55 {
56  return sample_.get();
57 }

◆ get_send_listener() [1/2]

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

◆ get_send_listener() [2/2]

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

Definition at line 117 of file DataSampleElement.inl.

References ACE_INLINE, and send_listener_.

118 {
119  return send_listener_;
120 }
TransportSendListener * send_listener_

◆ get_sub_id()

ACE_INLINE OpenDDS::DCPS::GUID_t OpenDDS::DCPS::DataSampleElement::get_sub_id ( CORBA::ULong  index) const

◆ get_sub_ids()

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

Definition at line 89 of file DataSampleElement.inl.

References ACE_INLINE, and subscription_ids_.

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

90 {
91  return subscription_ids_;
92 }
OpenDDS::DCPS::GUID_t subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]

◆ OPENDDS_MAP()

typedef OpenDDS::DCPS::DataSampleElement::OPENDDS_MAP ( DataLinkIdType  ,
GUIDSeq_var   
)

◆ operator=()

DataSampleElement & OpenDDS::DCPS::DataSampleElement::operator= ( const DataSampleElement elem)

Definition at line 72 of file DataSampleElement.cpp.

References ACE_Message_Block::duplicate(), 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_.

73 {
74  transaction_id_ = rhs.transaction_id_;
75  header_ = rhs.header_;
76  sample_.reset(rhs.sample_->duplicate());
77  publication_id_ = rhs.publication_id_;
78  num_subs_ = rhs.num_subs_;
79 
80  std::copy(rhs.subscription_ids_,
81  rhs.subscription_ids_ + num_subs_,
83 
90  send_listener_ = rhs.send_listener_;
91  handle_ = rhs.handle_;
92  filter_out_ = rhs.filter_out_;
93  filter_per_link_ = rhs.filter_per_link_;
94 
95  return *this;
96 }
DataSampleHeader header_
The OpenDDS DCPS header for this sample.
DataSampleElement * previous_instance_sample_
OpenDDS::DCPS::GUID_t subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]
GUIDSeq_var filter_out_
tracking for Content-Filtering data
PublicationInstance_rch handle_
DataSampleElement * previous_send_sample_
DataSampleElement * next_writer_sample_
DataSampleElement * next_instance_sample_
Thread of data within the instance.
DataSampleElement * previous_writer_sample_
Thread of all data within a DataWriter.
DataLinkIdTypeGUIDMap filter_per_link_
DataSampleElement * next_send_sample_
Thread of data being unsent/sending/sent/released.
GUID_t publication_id_
Publication Id used downstream.
TransportSendListener * send_listener_

◆ set_filter_out()

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

Definition at line 132 of file DataSampleElement.inl.

References ACE_INLINE, and filter_out_.

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

133 {
134  filter_out_ = filter_out;
135 }
GUIDSeq_var filter_out_
tracking for Content-Filtering data

◆ set_next_send_sample()

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

Definition at line 25 of file DataSampleElement.inl.

References ACE_INLINE, and next_send_sample_.

26 {
27  next_send_sample_ = next_send_sample;
28 }
DataSampleElement * next_send_sample_
Thread of data being unsent/sending/sent/released.

◆ set_num_subs()

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_num_subs ( CORBA::ULong  num_subs)

◆ set_sample()

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_sample ( Message_Block_Ptr  sample)

◆ set_sub_id()

ACE_INLINE void OpenDDS::DCPS::DataSampleElement::set_sub_id ( CORBA::ULong  index,
OpenDDS::DCPS::GUID_t  id 
)

Definition at line 103 of file DataSampleElement.inl.

References ACE_INLINE, and subscription_ids_.

Referenced by OpenDDS::DCPS::WriteDataContainer::copy_and_prepend(), OpenDDS::RTPS::Sedp::Writer::send_sample(), and OpenDDS::DCPS::ReplayerImpl::write().

104 {
105  subscription_ids_[index] = id;
106 }
OpenDDS::DCPS::GUID_t subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]

◆ set_transaction_id()

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

◆ transaction_id()

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

Friends And Related Function Documentation

◆ ::DDS_TEST

friend class ::DDS_TEST
friend

Definition at line 144 of file DataSampleElement.h.

◆ InstanceDataSampleList

friend class InstanceDataSampleList
friend

Definition at line 142 of file DataSampleElement.h.

◆ SendStateDataSampleList

friend class SendStateDataSampleList
friend

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

Definition at line 140 of file DataSampleElement.h.

◆ SendStateDataSampleListConstIterator

Definition at line 147 of file DataSampleElement.h.

◆ SendStateDataSampleListIterator

friend class SendStateDataSampleListIterator
friend

Iterators needs access to prev/next pointers for iteration.

Definition at line 146 of file DataSampleElement.h.

◆ TransportClient

friend class TransportClient
friend

Definition at line 143 of file DataSampleElement.h.

◆ WriterDataSampleList

friend class WriterDataSampleList
friend

Definition at line 141 of file DataSampleElement.h.

Member Data Documentation

◆ filter_out_

GUIDSeq_var OpenDDS::DCPS::DataSampleElement::filter_out_
private

tracking for Content-Filtering data

Definition at line 130 of file DataSampleElement.h.

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

◆ filter_per_link_

DataLinkIdTypeGUIDMap OpenDDS::DCPS::DataSampleElement::filter_per_link_
private

◆ handle_

PublicationInstance_rch OpenDDS::DCPS::DataSampleElement::handle_
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 126 of file DataSampleElement.h.

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

◆ header_

DataSampleHeader OpenDDS::DCPS::DataSampleElement::header_
private

The OpenDDS DCPS header for this sample.

Definition at line 105 of file DataSampleElement.h.

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

◆ next_instance_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::next_instance_sample_
mutableprivate

◆ next_send_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::next_send_sample_
mutableprivate

◆ next_writer_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::next_writer_sample_
mutableprivate

◆ num_subs_

CORBA::ULong OpenDDS::DCPS::DataSampleElement::num_subs_
private

Definition at line 114 of file DataSampleElement.h.

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

◆ previous_instance_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::previous_instance_sample_
mutableprivate

◆ previous_send_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::previous_send_sample_
mutableprivate

◆ previous_writer_sample_

DataSampleElement* OpenDDS::DCPS::DataSampleElement::previous_writer_sample_
mutableprivate

Thread of all data within a DataWriter.

Used to make removal from the container much more efficient.

Definition at line 154 of file DataSampleElement.h.

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

◆ publication_id_

GUID_t OpenDDS::DCPS::DataSampleElement::publication_id_
private

Publication Id used downstream.

Definition at line 112 of file DataSampleElement.h.

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

◆ sample_

Message_Block_Ptr OpenDDS::DCPS::DataSampleElement::sample_
private

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

Definition at line 109 of file DataSampleElement.h.

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

◆ send_listener_

TransportSendListener* OpenDDS::DCPS::DataSampleElement::send_listener_
private

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 121 of file DataSampleElement.h.

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

◆ subscription_ids_

OpenDDS::DCPS::GUID_t OpenDDS::DCPS::DataSampleElement::subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]
private

◆ transaction_id_

ACE_UINT64 OpenDDS::DCPS::DataSampleElement::transaction_id_
private

Definition at line 102 of file DataSampleElement.h.

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


The documentation for this class was generated from the following files: