OpenDDS::DCPS::DataSampleListElement Struct Reference

#include <DataSampleList.h>

Collaboration diagram for OpenDDS::DCPS::DataSampleListElement:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 DataSampleListElement (PublicationId publication_id, TransportSendListener *send_listner, PublicationInstance *handle, TransportSendElementAllocator *tse_allocator, TransportCustomizedElementAllocator *tce_allocator)
 DataSampleListElement (const DataSampleListElement &elem)
DataSampleListElementoperator= (const DataSampleListElement &elem)
 ~DataSampleListElement ()

Public Attributes

DataSamplesample_
PublicationId publication_id_
 Publication Id used downstream.
CORBA::ULong num_subs_
OpenDDS::DCPS::RepoId subscription_ids_ [OpenDDS::DCPS::MAX_READERS_PER_ELEM]
DDS::Time_t source_timestamp_
 Timestamp for the sample when it was first written.
DataSampleListElementprevious_sample_
 Thread of all data within a DataWriter.
DataSampleListElementnext_sample_
DataSampleListElementnext_instance_sample_
 Thread of data within the instance.
DataSampleListElementnext_send_sample_
 Thread of data being unsent/sending/sent/released.
DataSampleListElementprevious_send_sample_
TransportSendListenersend_listener_
bool space_available_
 The flag indicates space availability for this waiting DataSample.
PublicationInstancehandle_
TransportSendElementAllocatortransport_send_element_allocator_
 Allocator for the TransportSendElement.
TransportCustomizedElementAllocatortransport_customized_element_allocator_
 Allocator for TransportCustomizedElement.
GUIDSeq_var filter_out_
 tracking for Content-Filtering data
std::map< DataLinkIdType,
GUIDSeq_var > 
filter_per_link_

Detailed Description

List elements include the marshaled message, the publication Id and Instance handle for downstream processing, and three separate threads allowing the elements to reside simultaneously on four different lists of data:

next_sample_ / previous_sample

next_instance_sample_

next_send_sample_/previous_send_sample_

We thread this single element rather than having multiple smaller lists in order to allow us to allocate once and have the element contained in all of the lists in which it will be held during its lifetime. These three threads will at times hold the element in three separate lists simultaneously. The next_sample_ thread will be used in the container to hold the element in one of three different lists at different times, so a single thread is all that is required for all of those lists.

NOTE: this is what we want to pass into the enqueue method of the container, since we want to centralize the allocation/deallocation so that we can minimize locking. By grabbing a single lock, allocating the buffer/Data_Block/Message_Block/DataSampleListElement at the same time, we only pay once for all of the allocations. They are all presumably from a cache (for the most part) anyway, so it should be fairly quick.


Constructor & Destructor Documentation

ACE_INLINE OpenDDS::DCPS::DataSampleListElement::DataSampleListElement ( PublicationId  publication_id,
TransportSendListener send_listner,
PublicationInstance handle,
TransportSendElementAllocator tse_allocator,
TransportCustomizedElementAllocator tce_allocator 
)

ACE_INLINE OpenDDS::DCPS::DataSampleListElement::DataSampleListElement ( const DataSampleListElement elem  ) 

ACE_INLINE OpenDDS::DCPS::DataSampleListElement::~DataSampleListElement (  ) 


Member Function Documentation

ACE_INLINE DataSampleListElement & OpenDDS::DCPS::DataSampleListElement::operator= ( const DataSampleListElement elem  ) 


Member Data Documentation

GUIDSeq_var OpenDDS::DCPS::DataSampleListElement::filter_out_

tracking for Content-Filtering data

std::map<DataLinkIdType, GUIDSeq_var> OpenDDS::DCPS::DataSampleListElement::filter_per_link_

PublicationInstance* OpenDDS::DCPS::DataSampleListElement::handle_

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

DataSampleListElement* OpenDDS::DCPS::DataSampleListElement::next_instance_sample_

Thread of data within the instance.

DataSampleListElement* OpenDDS::DCPS::DataSampleListElement::next_sample_

DataSampleListElement* OpenDDS::DCPS::DataSampleListElement::next_send_sample_

Thread of data being unsent/sending/sent/released.

CORBA::ULong OpenDDS::DCPS::DataSampleListElement::num_subs_

DataSampleListElement* OpenDDS::DCPS::DataSampleListElement::previous_sample_

Thread of all data within a DataWriter.

Used to make removal from the container _much_ more efficient.

DataSampleListElement* OpenDDS::DCPS::DataSampleListElement::previous_send_sample_

PublicationId OpenDDS::DCPS::DataSampleListElement::publication_id_

Publication Id used downstream.

DataSample* OpenDDS::DCPS::DataSampleListElement::sample_

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

TransportSendListener* OpenDDS::DCPS::DataSampleListElement::send_listener_

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

DDS::Time_t OpenDDS::DCPS::DataSampleListElement::source_timestamp_

Timestamp for the sample when it was first written.

bool OpenDDS::DCPS::DataSampleListElement::space_available_

The flag indicates space availability for this waiting DataSample.

OpenDDS::DCPS::RepoId OpenDDS::DCPS::DataSampleListElement::subscription_ids_[OpenDDS::DCPS::MAX_READERS_PER_ELEM]

TransportCustomizedElementAllocator* OpenDDS::DCPS::DataSampleListElement::transport_customized_element_allocator_

Allocator for TransportCustomizedElement.

TransportSendElementAllocator* OpenDDS::DCPS::DataSampleListElement::transport_send_element_allocator_

Allocator for the TransportSendElement.


The documentation for this struct was generated from the following files:
Generated on Wed Nov 16 15:28:41 2011 for OpenDDS by  doxygen 1.4.7