OpenDDS  Snapshot(2023/04/07-19:43)
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader > Class Template Reference

#include <MultiTopicDataReader_T.h>

Inheritance diagram for OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >:
Collaboration graph
[legend]

Classes

struct  Contains
 
struct  GenericData
 
struct  SampleWithInfo
 

Public Types

typedef TAO::DCPS::ZeroCopyDataSeq< SampleSampleSeq
 
- Public Types inherited from OpenDDS::DCPS::LocalObject< TypedDataReader::Interface >
typedef TypedDataReader::Interface ::_ptr_type _ptr_type
 
typedef TypedDataReader::Interface ::_var_type _var_type
 
- Public Types inherited from CORBA::LocalObject
typedef LocalObject_ptr _ptr_type
 
typedef LocalObject_var _var_type
 
typedef LocalObject_out _out_type
 
- Public Types inherited from CORBA::Object
typedef Object_ptr _ptr_type
 
typedef Object_var _var_type
 
typedef Object_out _out_type
 
- Public Types inherited from OpenDDS::DCPS::LocalObject< DataReaderEx >
typedef DataReaderEx ::_ptr_type _ptr_type
 
typedef DataReaderEx ::_var_type _var_type
 

Public Member Functions

 MultiTopicDataReader_T ()
 
void init_typed (DataReaderEx *dr)
 
const MetaStructgetResultingMeta ()
 
void incoming_sample (void *sample, const DDS::SampleInfo &info, const char *topic, const MetaStruct &meta)
 
DDS::ReturnCode_t read (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t take (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t read_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t take_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t read_next_sample (Sample &received_data, DDS::SampleInfo &sample_info)
 
DDS::ReturnCode_t take_next_sample (Sample &received_data, DDS::SampleInfo &sample_info)
 
DDS::ReturnCode_t read_instance (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::InstanceHandle_t a_handle, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t take_instance (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::InstanceHandle_t a_handle, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t read_instance_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::InstanceHandle_t handle, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t take_instance_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::InstanceHandle_t handle, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t read_next_instance (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::InstanceHandle_t a_handle, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t take_next_instance (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq, CORBA::Long max_samples, DDS::InstanceHandle_t a_handle, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::ReturnCode_t read_next_instance_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::InstanceHandle_t previous_handle, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t take_next_instance_w_condition (SampleSeq &data_values, DDS::SampleInfoSeq &sample_infos, CORBA::Long max_samples, DDS::InstanceHandle_t previous_handle, DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t return_loan (SampleSeq &received_data, DDS::SampleInfoSeq &info_seq)
 
DDS::ReturnCode_t get_key_value (Sample &key_holder, DDS::InstanceHandle_t handle)
 
DDS::InstanceHandle_t lookup_instance (const Sample &instance_data)
 
- Public Member Functions inherited from OpenDDS::DCPS::LocalObjectBase
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
virtual CORBA::ULong _refcount_value () const
 
- Public Member Functions inherited from CORBA::LocalObject
virtual ~LocalObject (void)
 
virtual CORBA::Boolean _non_existent (void)
 
virtual char * _repository_id (void)
 
virtual CORBA::InterfaceDef_ptr _get_interface (void)
 
virtual CORBA::Object_ptr _get_component (void)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::ExceptionList_ptr exclist, CORBA::ContextList_ptr ctxtlist, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual CORBA::Request_ptr _request (const char *operation)
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
virtual CORBA::ULong _hash (CORBA::ULong maximum)
 
virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj)
 
virtual CORBA::ORB_ptr _get_orb (void)
 
virtual TAO::ObjectKey_key (void)
 
- Public Member Functions inherited from CORBA::Object
virtual ~Object (void)
 
virtual TAO_Abstract_ServantBase_servant (void) const
 
virtual CORBA::Boolean _is_collocated (void) const
 
virtual CORBA::Boolean _is_local (void) const
 
 Object (TAO_Stub *p, CORBA::Boolean collocated=false, TAO_Abstract_ServantBase *servant=0, TAO_ORB_Core *orb_core=0)
 
 Object (IOP::IOR *ior, TAO_ORB_Core *orb_core)
 
virtual TAO_Stub_stubobj (void) const
 
virtual TAO_Stub_stubobj (void)
 
virtual void _proxy_broker (TAO::Object_Proxy_Broker *proxy_broker)
 
virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr)
 
CORBA::Boolean is_evaluated (void) const
 
TAO_ORB_Coreorb_core (void) const
 
IOP::IORsteal_ior (void)
 
const IOP::IORior (void) const
 
virtual bool can_convert_to_ior (void) const
 
virtual char * convert_to_ior (bool use_omg_ior_format, const char *ior_prefix) const
 
void _decr_refcount (void)
 
virtual CORBA::Boolean _is_a (const char *logical_type_id)
 
virtual const char * _interface_repository_id (void) const
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 
- Public Member Functions inherited from OpenDDS::DCPS::MultiTopicDataReaderBase
 MultiTopicDataReaderBase ()
 
void init (const DDS::DataReaderQos &dr_qos, DDS::DataReaderListener_ptr a_listener, DDS::StatusMask mask, SubscriberImpl *parent, MultiTopicImpl *multitopic)
 
void data_available (DDS::DataReader_ptr reader)
 
void set_status_changed_flag (DDS::StatusKind status, bool flag)
 
bool have_sample_states (DDS::SampleStateMask sample_states) const
 
void cleanup ()
 
DDS::InstanceHandle_t get_instance_handle ()
 
DDS::ReturnCode_t enable ()
 
DDS::StatusCondition_ptr get_statuscondition ()
 
DDS::StatusMask get_status_changes ()
 
DDS::ReadCondition_ptr create_readcondition (DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
 
DDS::QueryCondition_ptr create_querycondition (DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states, const char *query_expression, const DDS::StringSeq &query_parameters)
 
DDS::ReturnCode_t delete_readcondition (DDS::ReadCondition_ptr a_condition)
 
DDS::ReturnCode_t delete_contained_entities ()
 
DDS::ReturnCode_t set_qos (const DDS::DataReaderQos &qos)
 
DDS::ReturnCode_t get_qos (DDS::DataReaderQos &qos)
 
DDS::ReturnCode_t set_listener (DDS::DataReaderListener_ptr a_listener, DDS::StatusMask mask)
 
DDS::DataReaderListener_ptr get_listener ()
 
DDS::TopicDescription_ptr get_topicdescription ()
 
DDS::Subscriber_ptr get_subscriber ()
 
DDS::ReturnCode_t get_sample_rejected_status (DDS::SampleRejectedStatus &status)
 
DDS::ReturnCode_t get_liveliness_changed_status (DDS::LivelinessChangedStatus &status)
 
DDS::ReturnCode_t get_requested_deadline_missed_status (DDS::RequestedDeadlineMissedStatus &status)
 
DDS::ReturnCode_t get_requested_incompatible_qos_status (DDS::RequestedIncompatibleQosStatus &status)
 
DDS::ReturnCode_t get_subscription_matched_status (DDS::SubscriptionMatchedStatus &status)
 
DDS::ReturnCode_t get_sample_lost_status (DDS::SampleLostStatus &status)
 
DDS::ReturnCode_t wait_for_historical_data (const DDS::Duration_t &max_wait)
 
DDS::ReturnCode_t get_matched_publications (DDS::InstanceHandleSeq &publication_handles)
 
DDS::ReturnCode_t get_matched_publication_data (DDS::PublicationBuiltinTopicData &publication_data, DDS::InstanceHandle_t publication_handle)
 
void get_latency_stats (LatencyStatisticsSeq &stats)
 
void reset_latency_stats ()
 Clear any intermediate statistical values. More...
 
CORBA::Boolean statistics_enabled ()
 
void statistics_enabled (CORBA::Boolean statistics_enabled)
 
- Public Member Functions inherited from OpenDDS::DCPS::DataReaderEx
void get_latency_stats (inout LatencyStatisticsSeq stats)
 Obtain a sequence of statistics summaries. More...
 
- Public Member Functions inherited from DDS::DataReader
ReadCondition create_readcondition (in SampleStateMask sample_states, in ViewStateMask view_states, in InstanceStateMask instance_states)
 
QueryCondition create_querycondition (in SampleStateMask sample_states, in ViewStateMask view_states, in InstanceStateMask instance_states, in string query_expression, in StringSeq query_parameters)
 
ReturnCode_t delete_readcondition (in ReadCondition a_condition)
 
ReturnCode_t set_qos (in DataReaderQos qos)
 
ReturnCode_t get_qos (inout DataReaderQos qos)
 
ReturnCode_t set_listener (in DataReaderListener a_listener, in StatusMask mask)
 
ReturnCode_t get_sample_rejected_status (inout SampleRejectedStatus status)
 
ReturnCode_t get_liveliness_changed_status (inout LivelinessChangedStatus status)
 
ReturnCode_t get_requested_deadline_missed_status (inout RequestedDeadlineMissedStatus status)
 
ReturnCode_t get_requested_incompatible_qos_status (inout RequestedIncompatibleQosStatus status)
 
ReturnCode_t get_subscription_matched_status (inout SubscriptionMatchedStatus status)
 
ReturnCode_t get_sample_lost_status (inout SampleLostStatus status)
 
ReturnCode_t wait_for_historical_data (in Duration_t max_wait)
 
ReturnCode_t get_matched_publications (inout InstanceHandleSeq publication_handles)
 
ReturnCode_t get_matched_publication_data (inout PublicationBuiltinTopicData publication_data, in InstanceHandle_t publication_handle)
 

Private Types

typedef std::vector< SampleWithInfoSampleVec
 
typedef std::set< OPENDDS_STRINGTopicSet
 

Private Member Functions

void assign_fields (Sample &resulting, void *incoming, const QueryPlan &qp, const MetaStruct &meta)
 
DDS::ReturnCode_t process_joins (OPENDDS_MAP(TopicSet, SampleVec)&partial_results, SampleVec starting, const TopicSet &seen, const QueryPlan &qp)
 
bool join (SampleVec &resulting, const SampleWithInfo &prototype, const std::vector< OPENDDS_STRING > &key_names, const void *key_data, DDS::DataReader_ptr other_dr, const MetaStruct &other_meta)
 
DDS::ReturnCode_t cross_join (OPENDDS_MAP(TopicSet, SampleVec)&partial_results, const TopicSet &seen, const QueryPlan &qp)
 
void combine (SampleVec &resulting, const SampleVec &other, const std::vector< OPENDDS_STRING > &key_names, const TopicSet &other_topics)
 
void assign_resulting_fields (Sample &target, const Sample &source, const TopicSet &other_topics)
 

Private Attributes

TypedDataReader::Interface::_var_type typed_reader_
 

Additional Inherited Members

- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< TypedDataReader::Interface >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::LocalObject
static LocalObject_ptr _duplicate (LocalObject_ptr obj)
 
static LocalObject_ptr _nil (void)
 
static LocalObject_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::Object
static CORBA::Boolean marshal (const Object_ptr x, TAO_OutputCDR &cdr)
 
static void _tao_any_destructor (void *)
 
static CORBA::Boolean is_nil_i (CORBA::Object_ptr obj)
 
static void tao_object_initialize (Object *)
 
static CORBA::Object_ptr _duplicate (CORBA::Object_ptr obj)
 
static CORBA::Object_ptr _nil (void)
 
static CORBA::Object_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< DataReaderEx >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Public Attributes inherited from OpenDDS::DCPS::DataReaderEx
attribute boolean statistics_enabled
 Statistics gathering enable state. More...
 
- Protected Types inherited from OpenDDS::DCPS::MultiTopicDataReaderBase
typedef MultiTopicImpl::SubjectFieldSpec SubjectFieldSpec
 
- Protected Member Functions inherited from CORBA::LocalObject
 LocalObject (void)
 
- Protected Member Functions inherited from CORBA::Object
 Object (int dummy=0)
 
TAO::Object_Proxy_Brokerproxy_broker () const
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Member Functions inherited from OpenDDS::DCPS::MultiTopicDataReaderBase
OPENDDS_STRING topicNameFor (DDS::DataReader_ptr dr)
 
const MetaStructmetaStructFor (DDS::DataReader_ptr dr)
 
 OPENDDS_MAP (OPENDDS_STRING, QueryPlan) query_plans_
 
- Protected Attributes inherited from CORBA::Object
ACE_Atomic_Op< TAO_SYNCH_MUTEX, unsigned long > refcount_
 
- Protected Attributes inherited from OpenDDS::DCPS::MultiTopicDataReaderBase
ACE_RW_Thread_Mutex qp_lock_
 

Detailed Description

template<typename Sample, typename TypedDataReader>
class OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >

Definition at line 25 of file MultiTopicDataReader_T.h.

Member Typedef Documentation

◆ SampleSeq

template<typename Sample , typename TypedDataReader >
typedef TAO::DCPS::ZeroCopyDataSeq<Sample> OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::SampleSeq

Definition at line 29 of file MultiTopicDataReader_T.h.

◆ SampleVec

template<typename Sample , typename TypedDataReader >
typedef std::vector<SampleWithInfo> OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::SampleVec
private

Definition at line 125 of file MultiTopicDataReader_T.h.

◆ TopicSet

template<typename Sample , typename TypedDataReader >
typedef std::set<OPENDDS_STRING> OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::TopicSet
private

Definition at line 126 of file MultiTopicDataReader_T.h.

Constructor & Destructor Documentation

◆ MultiTopicDataReader_T()

template<typename Sample , typename TypedDataReader >
OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T ( )
inline

Definition at line 31 of file MultiTopicDataReader_T.h.

References OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::get_key_value(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::getResultingMeta(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::incoming_sample(), info_seq, OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::init_typed(), instance_states, OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::lookup_instance(), max_samples, OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_instance(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_instance_w_condition(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_instance(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_instance_w_condition(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_sample(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_w_condition(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::return_loan(), sample_states, OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_instance(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_instance_w_condition(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_instance(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_instance_w_condition(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_sample(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_w_condition(), and view_states.

31 {}

Member Function Documentation

◆ assign_fields()

template<typename Sample , typename TypedDataReader >
void OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::assign_fields ( Sample resulting,
void *  incoming,
const QueryPlan qp,
const MetaStruct meta 
)
private

Definition at line 38 of file MultiTopicDataReader_T.cpp.

References OpenDDS::DCPS::MetaStruct::assign(), OpenDDS::DCPS::MultiTopicDataReaderBase::QueryPlan::keys_projected_out_, and OpenDDS::DCPS::MultiTopicDataReaderBase::QueryPlan::projection_.

40 {
41  using namespace std;
42  const vector<SubjectFieldSpec>& proj = qp.projection_;
43  const MetaStruct& resulting_meta = getResultingMeta();
44 
45  typedef vector<SubjectFieldSpec>::const_iterator iter_t;
46  for (iter_t iter = proj.begin(); iter != proj.end(); ++iter) {
47  resulting_meta.assign(&resulting, iter->resulting_name_.c_str(),
48  incoming, iter->incoming_name_.c_str(), meta);
49  }
50 
51  const vector<OPENDDS_STRING>& proj_out = qp.keys_projected_out_;
52  for (vector<OPENDDS_STRING>::const_iterator iter = proj_out.begin();
53  iter != proj_out.end(); ++iter) {
54  resulting_meta.assign(&resulting, iter->c_str(),
55  incoming, iter->c_str(), meta);
56  }
57 }
STL namespace.

◆ assign_resulting_fields()

template<typename Sample , typename TypedDataReader >
void OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::assign_resulting_fields ( Sample target,
const Sample source,
const TopicSet other_topics 
)
private

Definition at line 61 of file MultiTopicDataReader_T.cpp.

References OpenDDS::DCPS::MetaStruct::assign().

63 {
64  using namespace std;
65  const MetaStruct& resulting_meta = getResultingMeta();
66 
67  for (TopicSet::const_iterator iterTopic = other_topics.begin();
68  iterTopic != other_topics.end(); ++iterTopic) {
69  const vector<SubjectFieldSpec>& proj = query_plans_[*iterTopic].projection_;
70  typedef vector<SubjectFieldSpec>::const_iterator iter_t;
71  for (iter_t iter = proj.begin(); iter != proj.end(); ++iter) {
72  resulting_meta.assign(&target, iter->resulting_name_.c_str(),
73  &source, iter->resulting_name_.c_str(), resulting_meta);
74  }
75  }
76 }
STL namespace.

◆ combine()

template<typename Sample , typename TypedDataReader >
void OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::combine ( SampleVec resulting,
const SampleVec other,
const std::vector< OPENDDS_STRING > &  key_names,
const TopicSet other_topics 
)
private

Definition at line 159 of file MultiTopicDataReader_T.cpp.

References OpenDDS::DCPS::MetaStruct::compare().

162 {
163  const MetaStruct& meta = getResultingMeta();
164  SampleVec new_data;
165  for (typename SampleVec::iterator it_res = resulting.begin();
166  it_res != resulting.end(); /*incremented in loop*/) {
167  bool found_one_match = false;
168  for (typename SampleVec::const_iterator it_other = other.begin();
169  it_other != other.end(); ++it_other) {
170  bool match = true;
171  for (size_t i = 0; match && i < key_names.size(); ++i) {
172  if (!meta.compare(&*it_res, &*it_other, key_names[i].c_str())) {
173  match = false;
174  }
175  }
176  if (!match) {
177  continue;
178  }
179  if (found_one_match) {
180  new_data.push_back(*it_res);
181  new_data.back().combine(*it_other);
182  assign_resulting_fields(new_data.back().sample_, it_other->sample_, other_topics);
183  } else {
184  found_one_match = true;
185  it_res->combine(*it_other);
186  assign_resulting_fields(it_res->sample_, it_other->sample_, other_topics);
187  }
188  }
189  if (found_one_match) {
190  ++it_res;
191  } else {
192  // no match found in 'other' so data must not appear in result set
193  it_res = resulting.erase(it_res);
194  }
195  }
196  resulting.insert(resulting.end(), new_data.begin(), new_data.end());
197 }
void assign_resulting_fields(Sample &target, const Sample &source, const TopicSet &other_topics)
std::vector< SampleWithInfo > SampleVec

◆ cross_join()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::cross_join ( OPENDDS_MAP(TopicSet, SampleVec)&  partial_results,
const TopicSet seen,
const QueryPlan qp 
)
private

Definition at line 304 of file MultiTopicDataReader_T.cpp.

References OpenDDS::DCPS::MultiTopicDataReaderBase::QueryPlan::data_reader_, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

307 {
308  using namespace std;
309  const MetaStruct& other_meta = metaStructFor(qp.data_reader_);
310  vector<OPENDDS_STRING> no_keys;
311  for (typename std::map<TopicSet, SampleVec>::iterator it_pr = partial_results.begin();
312  it_pr != partial_results.end(); ++it_pr) {
313  SampleVec resulting;
314  for (typename SampleVec::iterator i = it_pr->second.begin(); i != it_pr->second.end(); ++i) {
315  if (!join(resulting, *i, no_keys, 0, qp.data_reader_, other_meta)) {
316  return DDS::RETCODE_ERROR;
317  }
318  }
319  resulting.swap(it_pr->second);
320  }
321 
322  TopicSet with_join(seen);
323  with_join.insert(topicNameFor(qp.data_reader_));
324  partial_results[with_join].swap(partial_results[seen]);
325  partial_results.erase(seen);
326  const DDS::ReturnCode_t ret = process_joins(partial_results, partial_results[with_join],
327  with_join, qp);
328  if (ret != DDS::RETCODE_OK) {
329  partial_results.erase(with_join);
330  return ret;
331  }
332 
333  return DDS::RETCODE_OK;
334 }
const ReturnCode_t RETCODE_OK
const MetaStruct & metaStructFor(DDS::DataReader_ptr dr)
STL namespace.
const ReturnCode_t RETCODE_ERROR
bool join(SampleVec &resulting, const SampleWithInfo &prototype, const std::vector< OPENDDS_STRING > &key_names, const void *key_data, DDS::DataReader_ptr other_dr, const MetaStruct &other_meta)
DDS::ReturnCode_t process_joins(OPENDDS_MAP(TopicSet, SampleVec)&partial_results, SampleVec starting, const TopicSet &seen, const QueryPlan &qp)
OPENDDS_STRING topicNameFor(DDS::DataReader_ptr dr)
std::vector< SampleWithInfo > SampleVec

◆ get_key_value()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::get_key_value ( Sample key_holder,
DDS::InstanceHandle_t  handle 
)

Definition at line 554 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

556 {
557  return typed_reader_->get_key_value(key_holder, handle);
558 }
TypedDataReader::Interface::_var_type typed_reader_

◆ getResultingMeta()

template<typename Sample , typename TypedDataReader >
const MetaStruct & OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::getResultingMeta ( )
virtual

Implements OpenDDS::DCPS::MultiTopicDataReaderBase.

Definition at line 31 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

32 {
33  return getMetaStruct<Sample>();
34 }

◆ incoming_sample()

template<typename Sample , typename TypedDataReader >
void OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::incoming_sample ( void *  sample,
const DDS::SampleInfo info,
const char *  topic,
const MetaStruct meta 
)
virtual

Implements OpenDDS::DCPS::MultiTopicDataReaderBase.

Definition at line 338 of file MultiTopicDataReader_T.cpp.

References ACE_ERROR, ACE_TEXT(), DDS::HANDLE_NIL, LM_ERROR, and DDS::RETCODE_OK.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

340 {
341  using namespace std;
342  using namespace DDS;
343  const QueryPlan& qp = query_plans_[topic];
344 
345  // Track results of joins along multiple paths through the MultiTopic keys.
346  std::map<TopicSet, SampleVec> partial_results;
347  TopicSet seen;
348  seen.insert(topic);
349  partial_results[seen].push_back(SampleWithInfo(topic, info));
350  assign_fields(partial_results[seen].back().sample_, sample, qp, meta);
351 
352  DDS::ReturnCode_t ret = process_joins(partial_results, partial_results[seen], seen, qp);
353  if (ret != DDS::RETCODE_OK) {
354  return;
355  }
356 
357  // Any topic we haven't seen needs to be cross-joined
358  for (std::map<OPENDDS_STRING, QueryPlan>::iterator iter = query_plans_.begin();
359  iter != query_plans_.end(); ++iter) {
360  typename std::map<TopicSet, SampleVec>::iterator found =
361  find_if(partial_results.begin(), partial_results.end(), Contains(iter->first));
362  if (found == partial_results.end()) {
363  ret = cross_join(partial_results, seen, iter->second);
364  if (ret != DDS::RETCODE_OK) {
365  return;
366  }
367  }
368  }
369 
370  TypedDataReader* tdr = dynamic_cast<TypedDataReader*>(typed_reader_.in());
371  if (!tdr) {
372  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: MultiTopicDataReader_T::incoming_sample:")
373  ACE_TEXT(" Failed to get TypedDataReader.\n")));
374  return;
375  }
376 
377  for (typename std::map<TopicSet, SampleVec>::iterator it_pr = partial_results.begin();
378  it_pr != partial_results.end(); ++it_pr) {
379  for (typename SampleVec::iterator i = it_pr->second.begin(); i != it_pr->second.end(); ++i) {
380  InstanceHandle_t ih = tdr->store_synthetic_data(i->sample_, i->view_);
381  if (ih != HANDLE_NIL) {
382  typedef std::map<OPENDDS_STRING, InstanceHandle_t>::iterator mapiter_t;
383  for (mapiter_t it_map = i->info_.begin(); it_map != i->info_.end(); ++it_map) {
384  query_plans_[it_map->first].instances_.insert(make_pair(it_map->second, ih));
385  }
386  }
387  }
388  }
389 }
#define ACE_ERROR(X)
const ReturnCode_t RETCODE_OK
TypedDataReader::Interface::_var_type typed_reader_
const InstanceHandle_t HANDLE_NIL
void assign_fields(Sample &resulting, void *incoming, const QueryPlan &qp, const MetaStruct &meta)
STL namespace.
ACE_TEXT("TCP_Factory")
HANDLE_TYPE_NATIVE InstanceHandle_t
Definition: DdsDcpsCore.idl:51
DDS::ReturnCode_t process_joins(OPENDDS_MAP(TopicSet, SampleVec)&partial_results, SampleVec starting, const TopicSet &seen, const QueryPlan &qp)
DDS::ReturnCode_t cross_join(OPENDDS_MAP(TopicSet, SampleVec)&partial_results, const TopicSet &seen, const QueryPlan &qp)
The End User API.

◆ init_typed()

template<typename Sample , typename TypedDataReader >
void OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::init_typed ( DataReaderEx dr)
virtual

Implements OpenDDS::DCPS::MultiTopicDataReaderBase.

Definition at line 24 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

25 {
26  typed_reader_ = TypedDataReader::Interface::_narrow(dr);
27 }
TypedDataReader::Interface::_var_type typed_reader_

◆ join()

template<typename Sample , typename TypedDataReader >
bool OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::join ( SampleVec resulting,
const SampleWithInfo prototype,
const std::vector< OPENDDS_STRING > &  key_names,
const void *  key_data,
DDS::DataReader_ptr  other_dr,
const MetaStruct other_meta 
)
private

Definition at line 80 of file MultiTopicDataReader_T.cpp.

References ACE_ERROR, ACE_TEXT(), DDS::ALIVE_INSTANCE_STATE, DDS::ANY_VIEW_STATE, OpenDDS::DCPS::MetaStruct::compare(), OpenDDS::DCPS::DataReaderImpl::get_topicdescription(), DDS::HANDLE_NIL, TAO::String_var< charT >::in(), DDS::SampleInfo::instance_handle, LM_ERROR, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::DataReaderImpl::lookup_instance_generic(), OpenDDS::DCPS::LogLevel::Notice, OpenDDS::DCPS::MetaStruct::numDcpsKeys(), OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::GenericData::ptr_, OpenDDS::DCPS::DataReaderImpl::read_instance_generic(), OpenDDS::DCPS::DataReaderImpl::read_next_instance_generic(), DDS::READ_SAMPLE_STATE, DDS::RETCODE_NO_DATA, DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), and DDS::SampleInfo::valid_data.

84 {
85  using namespace DDS;
86  DataReaderImpl* other_dri = dynamic_cast<DataReaderImpl*>(other_dr);
87  if (!other_dri) {
88  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: MultiTopicDataReader_T::join: ")
89  ACE_TEXT("Failed to get DataReaderImpl.\n")));
90  return false;
91  }
92 
93  TopicDescription_var other_td = other_dri->get_topicdescription();
94  CORBA::String_var other_topic = other_td->get_name();
95  const QueryPlan& other_qp = query_plans_[other_topic.in()];
96  const size_t n_keys = key_names.size();
97 
98  if (n_keys > 0 && other_meta.numDcpsKeys() == n_keys) { // complete key
99  InstanceHandle_t ih = other_dri->lookup_instance_generic(key_data);
100  if (ih != HANDLE_NIL) {
101  GenericData other_data(other_meta, false);
102  SampleInfo info;
103  const ReturnCode_t ret = other_dri->read_instance_generic(other_data.ptr_,
105  if (ret != DDS::RETCODE_OK && ret != DDS::RETCODE_NO_DATA) {
106  if (log_level >= LogLevel::Notice) {
107  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: MultiTopicDataReader_T::join: read_instance_generic"
108  " for topic %C returns %C\n", other_topic.in(), retcode_to_string(ret)));
109  }
110  return false;
111  }
112  if (ret == DDS::RETCODE_NO_DATA || !info.valid_data) {
113  return false;
114  }
115 
116  resulting.push_back(prototype);
117  resulting.back().combine(SampleWithInfo(other_topic.in(), info));
118  assign_fields(resulting.back().sample_, other_data.ptr_, other_qp, other_meta);
119  }
120  } else { // incomplete key or cross-join (0 key fields)
121  ReturnCode_t ret = RETCODE_OK;
122  for (InstanceHandle_t ih = HANDLE_NIL; ret != RETCODE_NO_DATA;) {
123  GenericData other_data(other_meta, false);
124  SampleInfo info;
125  const ReturnCode_t ret = other_dri->read_next_instance_generic(other_data.ptr_,
127  if (ret != RETCODE_OK && ret != RETCODE_NO_DATA) {
128  if (log_level >= LogLevel::Notice) {
129  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: MultiTopicDataReader_T::join:"
130  " read_next_instance_generic for topic %C returns %C\n",
131  other_topic.in(), retcode_to_string(ret)));
132  }
133  return false;
134  }
135  if (ret == RETCODE_NO_DATA || !info.valid_data) {
136  break;
137  }
138  ih = info.instance_handle;
139 
140  bool match = true;
141  for (size_t i = 0; match && i < key_names.size(); ++i) {
142  if (!other_meta.compare(key_data, other_data.ptr_, key_names[i].c_str())) {
143  match = false;
144  }
145  }
146 
147  if (match) {
148  resulting.push_back(prototype);
149  resulting.back().combine(SampleWithInfo(other_topic.in(), info));
150  assign_fields(resulting.back().sample_, other_data.ptr_, other_qp, other_meta);
151  }
152  }
153  }
154  return true;
155 }
OpenDDS_Dcps_Export LogLevel log_level
#define ACE_ERROR(X)
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
InstanceHandle_t instance_handle
const ReturnCode_t RETCODE_OK
const ReturnCode_t RETCODE_NO_DATA
const InstanceHandle_t HANDLE_NIL
void assign_fields(Sample &resulting, void *incoming, const QueryPlan &qp, const MetaStruct &meta)
const InstanceStateKind ALIVE_INSTANCE_STATE
ACE_TEXT("TCP_Factory")
const ViewStateMask ANY_VIEW_STATE
HANDLE_TYPE_NATIVE InstanceHandle_t
Definition: DdsDcpsCore.idl:51
const character_type * in(void) const
The End User API.
const SampleStateKind READ_SAMPLE_STATE

◆ lookup_instance()

template<typename Sample , typename TypedDataReader >
DDS::InstanceHandle_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::lookup_instance ( const Sample instance_data)

Definition at line 562 of file MultiTopicDataReader_T.cpp.

References OPENDDS_END_VERSIONED_NAMESPACE_DECL.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

564 {
565  return typed_reader_->lookup_instance(instance_data);
566 }
TypedDataReader::Interface::_var_type typed_reader_

◆ process_joins()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::process_joins ( OPENDDS_MAP(TopicSet, SampleVec)&  partial_results,
SampleVec  starting,
const TopicSet seen,
const QueryPlan qp 
)
private

Two constituent topics are joinable directly if they have some common join keys, or indirectly via a third topic which has common join keys with each of them. The constituent topics form one or more groups of connected topics. In each groups, topics are connected. But any two groups are not connected (otherwise, they would have been a single group). And so groups are cross-joined with each other. Within a group, topics are joined using process_joins(). Starting from an incoming sample of a given topic, it computes partial resulting samples from the samples of the constituent topics in the same group that are already received, in a DFS manner. contains entries for sets of topics, each corresponding to a path of topics which have been visited, starting from the incoming topic. For example, if the graph of visited topics looks like this A (incoming topic) / \ B C / / | \ D E F G / . . . H . . . . . . . then partial_results contains entries for topic sets: {A,B,D,H}, {A,C,E}, {A,C,F}, {A,C,G}. When traverse a path, if the next adjacent topic appears on a different path, i.e., there is an entry corresponding to that path in partial_results that has it in its topic set, then the two entries are combined into a new entry which contains topics from both of them. For example, if we are traversing path (A,C,G) and the next adjacent topic to G is B, which appears in path (A,B,D,H), then entries keyed by (A,C,G) and (A,B,D,H) are combined into a single entry with key (A,B,C,D,G,H). Entries (A,C,G) and (A,B,D,H) are removed from partial_results.

Definition at line 231 of file MultiTopicDataReader_T.cpp.

References ACE_GUARD_RETURN, OpenDDS::DCPS::MultiTopicDataReaderBase::QueryPlan::adjacent_joins_, OpenDDS::DCPS::MetaStruct::assign(), OpenDDS::DCPS::MultiTopicDataReaderBase::QueryPlan::data_reader_, OPENDDS_STRING, OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::GenericData::ptr_, DDS::RETCODE_ERROR, DDS::RETCODE_OK, and DDS::RETCODE_OUT_OF_RESOURCES.

234 {
235  using namespace std;
236  const MetaStruct& resulting_meta = getResultingMeta();
237  OPENDDS_STRING this_topic;
238  {
240  this_topic = topicNameFor(qp.data_reader_);
241  }
242  typedef multimap<OPENDDS_STRING, OPENDDS_STRING>::const_iterator iter_t;
243  for (iter_t iter = qp.adjacent_joins_.begin(); iter != qp.adjacent_joins_.end();) {
244  // for each topic we're joining
245  const OPENDDS_STRING& other_topic = iter->first;
246  iter_t range_end = qp.adjacent_joins_.upper_bound(other_topic);
247  const QueryPlan& other_qp = query_plans_[other_topic];
248  DDS::DataReader_ptr other_dr = other_qp.data_reader_;
249  const MetaStruct& other_meta = metaStructFor(other_dr);
250 
251  vector<OPENDDS_STRING> keys;
252  for (; iter != range_end; ++iter) { // for each key in common w/ this topic
253  keys.push_back(iter->second);
254  }
255 
256  typename std::map<TopicSet, SampleVec>::iterator found =
257  find_if(partial_results.begin(), partial_results.end(), Contains(other_topic));
258 
259  if (found == partial_results.end()) { // haven't seen this topic yet
260  partial_results.erase(seen);
261  TopicSet with_join(seen);
262  with_join.insert(other_topic);
263  SampleVec& join_result = partial_results[with_join];
264  for (size_t i = 0; i < starting.size(); ++i) {
265  GenericData other_keys(other_meta);
266  for (size_t j = 0; j < keys.size(); ++j) {
267  other_meta.assign(other_keys.ptr_, keys[j].c_str(),
268  &starting[i], keys[j].c_str(), resulting_meta);
269  }
270  if (!join(join_result, starting[i], keys, other_keys.ptr_, other_dr, other_meta)) {
271  return DDS::RETCODE_ERROR;
272  }
273  }
274 
275  if (!join_result.empty() && !seen.count(other_topic)) {
276  // Recursively join with topics that are adjacent to other_topic.
277  const DDS::ReturnCode_t ret = process_joins(partial_results, join_result,
278  with_join, other_qp);
279  if (ret != DDS::RETCODE_OK) {
280  return ret;
281  }
282  }
283  } else if (!found->first.count(this_topic) /*avoid looping back*/) {
284  // We have partialResults for this topic, use them instead of recursing.
285  // Combine the partial samples for the TopicSet seen and found->first.
286  // Store the result into a new entry keyed with all topics in seen and found->first.
287  // The existing two entries are removed since they are not needed anymore.
288  combine(starting, found->second, keys, found->first);
289  TopicSet new_topics(seen);
290  for (set<OPENDDS_STRING>::const_iterator it = found->first.begin(); it != found->first.end(); ++it) {
291  new_topics.insert(*it);
292  }
293 
294  partial_results.erase(found);
295  partial_results.erase(seen);
296  partial_results[new_topics] = starting;
297  }
298  }
299  return DDS::RETCODE_OK;
300 }
const ReturnCode_t RETCODE_OK
const MetaStruct & metaStructFor(DDS::DataReader_ptr dr)
#define OPENDDS_STRING
STL namespace.
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
const ReturnCode_t RETCODE_ERROR
void combine(SampleVec &resulting, const SampleVec &other, const std::vector< OPENDDS_STRING > &key_names, const TopicSet &other_topics)
bool join(SampleVec &resulting, const SampleWithInfo &prototype, const std::vector< OPENDDS_STRING > &key_names, const void *key_data, DDS::DataReader_ptr other_dr, const MetaStruct &other_meta)
const ReturnCode_t RETCODE_OUT_OF_RESOURCES
DDS::ReturnCode_t process_joins(OPENDDS_MAP(TopicSet, SampleVec)&partial_results, SampleVec starting, const TopicSet &seen, const QueryPlan &qp)
OPENDDS_STRING topicNameFor(DDS::DataReader_ptr dr)
std::vector< SampleWithInfo > SampleVec

◆ read()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 396 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

400 {
401  return typed_reader_->read(received_data, info_seq, max_samples,
403 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ read_instance()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_instance ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  a_handle,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 454 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

459 {
460  return typed_reader_->read_instance(received_data, info_seq, max_samples,
462 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ read_instance_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_instance_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  handle,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 478 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

482 {
483  return typed_reader_->read_instance_w_condition(data_values,
484  sample_infos, max_samples, handle, a_condition);
485 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

◆ read_next_instance()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_instance ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  a_handle,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 500 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

505 {
506  return typed_reader_->read_next_instance(received_data, info_seq, max_samples,
508 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ read_next_instance_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_instance_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  previous_handle,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 524 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

528 {
529  return typed_reader_->read_next_instance_w_condition(data_values,
530  sample_infos, max_samples, previous_handle, a_condition);
531 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

◆ read_next_sample()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_next_sample ( Sample received_data,
DDS::SampleInfo sample_info 
)

Definition at line 438 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

440 {
441  return typed_reader_->read_next_sample(received_data, sample_info);
442 }
TypedDataReader::Interface::_var_type typed_reader_

◆ read_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::read_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 418 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

421 {
422  return typed_reader_->read_w_condition(data_values, sample_infos,
423  max_samples, a_condition);
424 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

◆ return_loan()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::return_loan ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq 
)

Definition at line 546 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

548 {
549  return typed_reader_->return_loan(received_data, info_seq);
550 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ take()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 407 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

411 {
412  return typed_reader_->take(received_data, info_seq, max_samples,
414 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ take_instance()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_instance ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  a_handle,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 466 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

471 {
472  return typed_reader_->take_instance(received_data, info_seq, max_samples,
474 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ take_instance_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_instance_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  handle,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 489 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

493 {
494  return typed_reader_->take_instance_w_condition(data_values,
495  sample_infos, max_samples, handle, a_condition);
496 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

◆ take_next_instance()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_instance ( SampleSeq received_data,
DDS::SampleInfoSeq info_seq,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  a_handle,
DDS::SampleStateMask  sample_states,
DDS::ViewStateMask  view_states,
DDS::InstanceStateMask  instance_states 
)

Definition at line 512 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

517 {
518  return typed_reader_->take_next_instance(received_data, info_seq, max_samples,
520 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:66
local interface<%TYPE%> inout ::DDS::SampleInfoSeq info_seq
Definition: IDLTemplate.txt:66

◆ take_next_instance_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_instance_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::InstanceHandle_t  previous_handle,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 535 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

539 {
540  return typed_reader_->take_next_instance_w_condition(data_values,
541  sample_infos, max_samples, previous_handle, a_condition);
542 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

◆ take_next_sample()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_next_sample ( Sample received_data,
DDS::SampleInfo sample_info 
)

Definition at line 446 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

448 {
449  return typed_reader_->take_next_sample(received_data, sample_info);
450 }
TypedDataReader::Interface::_var_type typed_reader_

◆ take_w_condition()

template<typename Sample , typename TypedDataReader >
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::take_w_condition ( SampleSeq data_values,
DDS::SampleInfoSeq sample_infos,
CORBA::Long  max_samples,
DDS::ReadCondition_ptr  a_condition 
)

Definition at line 428 of file MultiTopicDataReader_T.cpp.

Referenced by OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::MultiTopicDataReader_T().

431 {
432  return typed_reader_->take_w_condition(data_values, sample_infos,
433  max_samples, a_condition);
434 }
TypedDataReader::Interface::_var_type typed_reader_
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long max_samples
Definition: IDLTemplate.txt:66

Member Data Documentation

◆ typed_reader_

template<typename Sample , typename TypedDataReader >
TypedDataReader::Interface::_var_type OpenDDS::DCPS::MultiTopicDataReader_T< Sample, TypedDataReader >::typed_reader_
private

Definition at line 188 of file MultiTopicDataReader_T.h.


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