OpenDDS  Snapshot(2023/04/28-20:55)
DynamicDataReaderImpl.h
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #ifndef OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_READER_IMPL_H
7 #define OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_READER_IMPL_H
8 
9 #ifndef OPENDDS_SAFETY_PROFILE
10 
12 
13 #include "DynamicSample.h"
14 #include "DynamicTypeSupport.h"
15 
17 
18 namespace OpenDDS {
19 
20 namespace DCPS {
21 
22 #ifndef OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE
23  template <> OpenDDS_Dcps_Export
29  bool adjust_ref_count);
30 
31  template <> OpenDDS_Dcps_Export
33  DataReaderImpl_T<XTypes::DynamicSample>::take(AbstractSamples& samples,
37 #endif
38 
39  template <>
40  void DataReaderImpl_T<XTypes::DynamicSample>::dynamic_hook(XTypes::DynamicSample& sample);
41 }
42 
43 namespace XTypes {
44 #if defined _MSC_VER && _MSC_VER < 1700
45 #define OPENDDS_MAYBE_EXPORT
46 #else
47 #define OPENDDS_MAYBE_EXPORT OpenDDS_Dcps_Export
48 #endif
49 
52  : public DCPS::DataReaderImpl_T<DynamicSample>
53  {
54  public:
56 
58  {
59  DynamicSample ds(dyn);
60  const DDS::ReturnCode_t rc = Base::read_next_sample(ds, si);
61  if (rc == DDS::RETCODE_OK) {
62  CORBA::release(dyn);
63  DDS::DynamicData_var result = ds.get_dynamic_data(0);
64  dyn = result._retn();
65  }
66  return rc;
67  }
68 
70  {
71  DynamicSample ds(dyn);
72  const DDS::ReturnCode_t rc = Base::take_next_sample(ds, si);
73  if (rc == DDS::RETCODE_OK) {
74  CORBA::release(dyn);
75  DDS::DynamicData_var result = ds.get_dynamic_data(0);
76  dyn = result._retn();
77  }
78  return rc;
79  }
80 
82  {
83  DynamicSample ds(dyn);
84  return Base::lookup_instance(ds);
85  }
86 
88  {
89  DynamicSample ds(dyn);
90  const DDS::ReturnCode_t rc = Base::get_key_value(ds, ih);
91  if (rc == DDS::RETCODE_OK) {
92  CORBA::release(dyn);
93  DDS::DynamicData_var result = ds.get_dynamic_data(0);
94  dyn = result._retn();
95  }
96  return rc;
97  }
98 
99  void install_type_support(DCPS::TypeSupportImpl* typesupport);
100  void imbue_type(DynamicSample& sample);
101 
102  private:
103  DDS::DynamicType_var type_;
104 
105  // work around "hides overloaded virtual" warnings
108  using Base::lookup_instance;
109  using Base::get_key_value;
110  };
111 }
112 namespace DCPS {
113  template <> inline
115  {
116  XTypes::DynamicDataReaderImpl* const self = dynamic_cast<XTypes::DynamicDataReaderImpl*>(this);
117  if (self) {
118  self->imbue_type(sample);
119  }
120  }
121 }
122 }
124 #endif
125 #endif
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask sample_states
Definition: IDLTemplate.txt:72
void release(T x)
::DDS::ReturnCode_t take_next_sample(inout<%SCOPED%> received_data, inout ::DDS::SampleInfo sample_info)
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask in ::DDS::InstanceStateMask instance_states
Definition: IDLTemplate.txt:72
#define OpenDDS_Dcps_Export
Definition: dcps_export.h:24
::DDS::InstanceHandle_t lookup_instance(in<%SCOPED%> instance_data)
unsigned long InstanceStateMask
DDS::InstanceHandle_t lookup_instance(DDS::DynamicData *dyn)
local interface<%TYPE%> inout ::DDS::SampleInfoSeq in long in ::DDS::SampleStateMask in ::DDS::ViewStateMask view_states
Definition: IDLTemplate.txt:72
DDS::ReturnCode_t take_next_sample(DDS::DynamicData *&dyn, DDS::SampleInfo &si)
DDS::ReturnCode_t read_next_sample(DDS::DynamicData *&dyn, DDS::SampleInfo &si)
DDS::DynamicData_var get_dynamic_data(DDS::DynamicType_ptr) const
Definition: DynamicSample.h:69
::DDS::ReturnCode_t read_next_sample(inout<%SCOPED%> received_data, inout ::DDS::SampleInfo sample_info)
virtual DDS::ReturnCode_t take(MessageSequenceType &received_data, DDS::SampleInfoSeq &info_seq, ::CORBA::Long max_samples, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states)
unsigned long SampleStateMask
HANDLE_TYPE_NATIVE InstanceHandle_t
Definition: DdsDcpsCore.idl:51
DDS::ReturnCode_t get_key_value(DDS::DynamicData *&dyn, DDS::InstanceHandle_t ih)
DCPS::DataReaderImpl_T< DynamicSample > Base
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
::DDS::ReturnCode_t get_key_value(inout<%SCOPED%> key_holder, in ::DDS::InstanceHandle_t handle)
const ReturnCode_t RETCODE_OK
#define OPENDDS_MAYBE_EXPORT
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
unsigned long ViewStateMask
DDS::ReturnCode_t read_generic(GenericBundle &gen, DDS::SampleStateMask sample_states, DDS::ViewStateMask view_states, DDS::InstanceStateMask instance_states, bool adjust_ref_count=false)