DDS-PSM-C++  1.0
ISO C++ API for OpenSplice DDS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
DataWriter.hpp
Go to the documentation of this file.
1 #ifndef OMG_DDS_PUB_DATA_WRITER_HPP_
2 #define OMG_DDS_PUB_DATA_WRITER_HPP_
3 
4 /* Copyright 2010, Object Management Group, Inc.
5  * Copyright 2010, PrismTech, Corp.
6  * Copyright 2010, Real-Time Innovations, Inc.
7  * All rights reserved.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  */
21 
23 #include <dds/topic/Topic.hpp>
26 #include <dds/pub/Publisher.hpp>
27 
29 
30 namespace dds {
31  namespace pub {
32  template <typename T,
33  template <typename Q> class DELEGATE = dds::pub::detail::DataWriter >
34  class DataWriter;
35 
36  template <typename T> class DataWriterListener;
37  }
38 }
39 
40 template <typename T, template <typename Q> class DELEGATE>
41 class dds::pub::DataWriter : public ::dds::core::TEntity< DELEGATE<T> > {
42 
43 public:
45 
46 public:
48 
49 public:
50 
60  DataWriter(const dds::pub::Publisher& pub,
61  const ::dds::topic::Topic<T>& topic);
62 
72  DataWriter(const dds::pub::Publisher& pub,
73  const ::dds::topic::Topic<T>& topic,
74  const dds::pub::qos::DataWriterQos& qos,
75  dds::pub::DataWriterListener<T>* listener = NULL,
76  const dds::core::status::StatusMask& mask = ::dds::core::status::StatusMask::all());
77 
78 public:
79  ~DataWriter();
80 
81 
82 public:
83  //==========================================================================
84  //== Write API
85 
91  void write(const T& sample);
92 
99  void write(const T& sample, const dds::core::Time& timestamp);
100 
108  void write(const T& data, const ::dds::core::InstanceHandle& instance);
109 
118  void write(const T& data,
119  const ::dds::core::InstanceHandle& instance,
120  const dds::core::Time& timestamp);
121 
122 
129  void write(const dds::topic::TopicInstance<T>& i);
130 
137  void write(const dds::topic::TopicInstance<T>& i,
138  const dds::core::Time& timestamp);
139 
144  template <typename FWIterator>
145  void write(const FWIterator& begin, const FWIterator& end);
146 
151  template <typename FWIterator>
152  void write(const FWIterator& begin, const FWIterator& end,
153  const dds::core::Time& timestamp);
154 
158  template <typename SamplesFWIterator, typename HandlesFWIterator>
159  void write(const SamplesFWIterator& data_begin,
160  const SamplesFWIterator& data_end,
161  const HandlesFWIterator& handle_begin,
162  const HandlesFWIterator& handle_end);
163 
168  template <typename SamplesFWIterator, typename HandlesFWIterator>
169  void write(const SamplesFWIterator& data_begin,
170  const SamplesFWIterator& data_end,
171  const HandlesFWIterator& handle_begin,
172  const HandlesFWIterator& handle_end,
173  const dds::core::Time& timestamp);
174 
175 
176  DataWriter& operator << (const T& data);
177 
178  DataWriter& operator << (const std::pair<T, dds::core::Time>& data);
179 
180  DataWriter& operator << (const std::pair<T, ::dds::core::InstanceHandle>& data);
181 
182  DataWriter&
183  operator <<(DataWriter& (*manipulator)(DataWriter&));
184 
185  //==========================================================================
186  //== Instance Management
192  const ::dds::core::InstanceHandle register_instance(const T& key);
193 
200  const ::dds::core::InstanceHandle register_instance(const T& key,
201  const dds::core::Time& ts);
202 
208  DataWriter& unregister_instance(const ::dds::core::InstanceHandle& i);
209 
216  DataWriter& unregister_instance(const ::dds::core::InstanceHandle& i,
217  const dds::core::Time& ts);
218 
224  DataWriter& dispose_instance(const ::dds::core::InstanceHandle& i);
225 
232  DataWriter& dispose_instance(const ::dds::core::InstanceHandle& i,
233  const dds::core::Time& ts);
234 
244  dds::topic::TopicInstance<T>& key_value(dds::topic::TopicInstance<T>& i,
245  const ::dds::core::InstanceHandle& h);
246 
256  T& key_value(T& sample, const ::dds::core::InstanceHandle& h);
257 
268  dds::core::InstanceHandle lookup_instance(const T& key);
269 
270  //==========================================================================
271  //== QoS Management
272 
276  const ::dds::pub::qos::DataWriterQos& qos() const;
277 
283  void qos(const ::dds::pub::qos::DataWriterQos& the_qos);
284 
288  DataWriter& operator <<(const ::dds::pub::qos::DataWriterQos& the_qos);
289 
295  const DataWriter& operator >> (::dds::pub::qos::DataWriterQos& the_qos) const;
296 
297 
298  //==========================================================================
299  //== Entity Navigation
300 
304  const dds::topic::Topic<T>& topic() const;
305 
309  const dds::pub::Publisher& publisher() const;
310 
311  //==========================================================================
312  //== ACKs
313 
323  void wait_for_acknowledgments(const dds::core::Duration& timeout);
324 
325  //==========================================================================
326  //== Listeners Management
327 
336  void listener(DataWriterListener<T>* the_listener,
337  const ::dds::core::status::StatusMask& mask);
338 
344  DataWriterListener<T>* listener() const;
345 
346  //==========================================================================
347  //== Status Management
348 
352  const ::dds::core::status::LivelinessLostStatus liveliness_lost_status();
353 
358 
363 
367  const ::dds::core::status::PublicationMatchedStatus publication_matched_status();
368 
369 
370  //==========================================================================
371  //== Liveliness Management
372 
376  void assert_liveliness();
377 };
378 
379 #endif /* OMG_DDS_PUB_DATA_WRITER_HPP_ */