OpenDDS  Snapshot(2023/04/28-20:55)
DynamicDataWriterImpl.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_WRITER_IMPL_H
7 #define OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_WRITER_IMPL_H
8 
9 #ifndef OPENDDS_SAFETY_PROFILE
10 
11 #include <dds/DdsDynamicTypeSupportC.h>
12 
14 
15 #include "DynamicSample.h"
16 
18 
19 namespace OpenDDS {
20 namespace XTypes {
21 
23  : public virtual DCPS::LocalObject<DDS::DynamicDataWriter>
24  , public virtual DCPS::DataWriterImpl
25 {
26 public:
27  DDS::InstanceHandle_t register_instance(DDS::DynamicData_ptr instance)
28  {
29  return register_instance_w_timestamp(instance, DCPS::SystemTimePoint::now().to_dds_time());
30  }
31 
33  DDS::DynamicData_ptr instance, const DDS::Time_t& timestamp)
34  {
35  const DynamicSample sample(instance, DCPS::Sample::KeyOnly);
36  return DataWriterImpl::register_instance_w_timestamp(sample, timestamp);
37  }
38 
40  DDS::DynamicData_ptr instance, DDS::InstanceHandle_t handle)
41  {
42  return unregister_instance_w_timestamp(instance, handle,
43  DCPS::SystemTimePoint::now().to_dds_time());
44  }
45 
47  DDS::DynamicData_ptr instance, DDS::InstanceHandle_t handle, const DDS::Time_t& timestamp)
48  {
49  const DynamicSample sample(instance, DCPS::Sample::KeyOnly);
50  return DataWriterImpl::unregister_instance_w_timestamp(sample, handle, timestamp);
51  }
52 
53  DDS::ReturnCode_t write(DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t handle)
54  {
55  return write_w_timestamp(instance_data, handle, DCPS::SystemTimePoint::now().to_dds_time());
56  }
57 
58  DDS::ReturnCode_t write_w_timestamp(DDS::DynamicData_ptr instance_data,
59  DDS::InstanceHandle_t handle, const DDS::Time_t& source_timestamp)
60  {
61  const DynamicSample sample(instance_data, DCPS::Sample::Full);
62  return DataWriterImpl::write_w_timestamp(sample, handle, source_timestamp);
63  }
64 
66  DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t instance_handle)
67  {
68  return dispose_w_timestamp(instance_data, instance_handle,
69  DCPS::SystemTimePoint::now().to_dds_time());
70  }
71 
72  DDS::ReturnCode_t dispose_w_timestamp(DDS::DynamicData_ptr instance_data,
73  DDS::InstanceHandle_t instance_handle, const DDS::Time_t& source_timestamp)
74  {
75  const DynamicSample sample(instance_data, DCPS::Sample::KeyOnly);
76  return DataWriterImpl::dispose_w_timestamp(sample, instance_handle, source_timestamp);
77  }
78 
79  DDS::ReturnCode_t get_key_value(DDS::DynamicData_ptr& key_holder, DDS::InstanceHandle_t handle)
80  {
81  DCPS::Sample_rch sample;
82  const DDS::ReturnCode_t rc = DataWriterImpl::get_key_value(sample, handle);
83  if (sample) {
84  CORBA::release(key_holder);
85  DDS::DynamicData_var result = sample->get_dynamic_data(0);
86  key_holder = result._retn();
87  }
88  return rc;
89  }
90 
91  DDS::InstanceHandle_t lookup_instance(DDS::DynamicData_ptr instance_data)
92  {
93  const DynamicSample sample(instance_data, DCPS::Sample::KeyOnly);
94  return DataWriterImpl::lookup_instance(sample);
95  }
96 
97  bool _is_a(const char* type_id)
98  {
99  return DDS::DynamicDataWriter::_is_a(type_id);
100  }
101 
102  const char* _interface_repository_id() const
103  {
104  return DDS::DynamicDataWriter::_interface_repository_id();
105  }
106 
108  {
109  return false;
110  }
111 };
112 
113 }
114 }
116 #endif
117 #endif
DDS::ReturnCode_t get_key_value(Sample_rch &sample, DDS::InstanceHandle_t handle)
::DDS::InstanceHandle_t register_instance_w_timestamp(in<%SCOPED%> instance, in ::DDS::Time_t timestamp)
void release(T x)
#define OpenDDS_Dcps_Export
Definition: dcps_export.h:24
DDS::InstanceHandle_t lookup_instance(const Sample &sample)
DDS::ReturnCode_t unregister_instance(DDS::DynamicData_ptr instance, DDS::InstanceHandle_t handle)
DDS::InstanceHandle_t lookup_instance(DDS::DynamicData_ptr instance_data)
DDS::InstanceHandle_t register_instance(DDS::DynamicData_ptr instance)
static TimePoint_T< SystemClock > now()
Definition: TimePoint_T.inl:41
Implements the OpenDDS::DCPS::DataWriterRemote interfaces and DDS::DataWriter interfaces.
DDS::ReturnCode_t get_key_value(DDS::DynamicData_ptr &key_holder, DDS::InstanceHandle_t handle)
::DDS::ReturnCode_t write_w_timestamp(in<%SCOPED%> instance_data, in ::DDS::InstanceHandle_t handle, in ::DDS::Time_t source_timestamp)
DDS::ReturnCode_t dispose_w_timestamp(const Sample &sample, DDS::InstanceHandle_t instance_handle, const DDS::Time_t &source_timestamp)
DDS::ReturnCode_t unregister_instance_w_timestamp(DDS::DynamicData_ptr instance, DDS::InstanceHandle_t handle, const DDS::Time_t &timestamp)
DDS::InstanceHandle_t register_instance_w_timestamp(const Sample &sample, const DDS::Time_t &timestamp)
DDS::ReturnCode_t write_w_timestamp(DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t handle, const DDS::Time_t &source_timestamp)
DDS::ReturnCode_t dispose_w_timestamp(DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t instance_handle, const DDS::Time_t &source_timestamp)
HANDLE_TYPE_NATIVE InstanceHandle_t
Definition: DdsDcpsCore.idl:51
DDS::InstanceHandle_t register_instance_w_timestamp(DDS::DynamicData_ptr instance, const DDS::Time_t &timestamp)
DDS::ReturnCode_t write_w_timestamp(const Sample &sample, DDS::InstanceHandle_t handle, const DDS::Time_t &source_timestamp)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
::DDS::ReturnCode_t unregister_instance_w_timestamp(in<%SCOPED%> instance, in ::DDS::InstanceHandle_t handle, in ::DDS::Time_t timestamp)
DDS::ReturnCode_t dispose(DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t instance_handle)
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
DDS::ReturnCode_t unregister_instance_w_timestamp(const Sample &sample, DDS::InstanceHandle_t instance_handle, const DDS::Time_t &timestamp)
DDS::ReturnCode_t write(DDS::DynamicData_ptr instance_data, DDS::InstanceHandle_t handle)
::DDS::ReturnCode_t dispose_w_timestamp(in<%SCOPED%> instance_data, in ::DDS::InstanceHandle_t instance_handle, in ::DDS::Time_t source_timestamp)