21 #ifndef OSPL_DDS_SUB_TDATAREADER_IMPL_HPP_ 22 #define OSPL_DDS_SUB_TDATAREADER_IMPL_HPP_ 65 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
76 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
87 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
89 impl_.filter_state(s);
97 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
99 impl_.filter_content(query);
103 template <
typename T>
107 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
113 template <
typename T>
117 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
122 template <
typename T>
126 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
131 template <
typename T>
132 template <
typename SamplesFWIterator>
136 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
138 return impl_.
read(sfit, max_samples);
141 template <
typename T>
142 template <
typename SamplesFWIterator>
146 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
148 return impl_.
take(sfit, max_samples);
151 template <
typename T>
152 template <
typename SamplesBIIterator>
156 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
158 return impl_.
read(sbit);
161 template <
typename T>
162 template <
typename SamplesBIIterator>
166 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
168 return impl_.
take(sbit);
174 template <
typename T>
178 template <
typename T>
182 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
187 template <
typename T>
191 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
196 template <
typename T>
200 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
206 template <
typename T>
210 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
216 template <
typename T>
220 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
226 template <
typename T>
230 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
237 template <
typename T>
238 template <
typename Functor>
242 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
249 template <
typename T>
253 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
255 impl_.filter_state(s);
259 template <
typename T>
263 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
265 impl_.filter_content(query);
269 template <
typename T>
273 ISOCPP_REPORT_STACK_DELEGATE_BEGIN(this->impl_.get_reader());
279 template <
typename T>
285 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
287 this->delegate()->init(this->impl_);
290 template <
typename T>
293 const ::dds::topic::Topic<T>& topic,
297 ::
dds::core::Reference(new DELEGATE<T>(sub, topic, qos, listener, mask))
299 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
301 this->delegate()->init(this->impl_);
304 #ifdef OMG_DDS_CONTENT_SUBSCRIPTION_SUPPORT 305 template <
typename T>
311 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
313 this->delegate()->init(this->impl_);
316 template <
typename T>
319 const ::dds::topic::ContentFilteredTopic<T>& topic,
323 ::
dds::core::
Reference(new DELEGATE<T>(sub, topic, qos, listener, mask))
325 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
327 this->delegate()->init(this->impl_);
331 #ifdef OMG_DDS_MULTI_TOPIC_SUPPORT 332 template <
typename T>
335 const dds::topic::MultiTopic<T>& topic) :
338 this->delegate()->init(this->impl_);
341 template <
typename T>
344 const ::dds::topic::MultiTopic<T>& topic,
350 this->delegate()->init(this->impl_);
354 template <
typename T>
357 template <
typename T>
361 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
363 return this->delegate()->default_filter_state();
366 template <
typename T>
369 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
371 this->delegate()->default_filter_state(status);
375 template <
typename T>
378 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
384 template <
typename T>
388 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
391 manipulator(selector);
396 template <
typename T>
397 template <
typename Functor>
401 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
409 template <
typename T>
413 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
415 return this->delegate()->read();
418 template <
typename T>
422 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
424 return this->delegate()->take();
428 template <
typename T>
429 template <
typename SamplesFWIterator>
433 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
435 return this->delegate()->read(sfit, max_samples);
438 template <
typename T>
439 template <
typename SamplesFWIterator>
443 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
445 return this->delegate()->take(sfit, max_samples);
448 template <
typename T>
449 template <
typename SamplesBIIterator>
453 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
455 return this->delegate()->read(sbit);
458 template <
typename T>
459 template <
typename SamplesBIIterator>
463 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
465 return this->delegate()->take(sbit);
468 template <
typename T>
472 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
478 template <
typename T>
482 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
484 return this->delegate()->key_value(h);
487 template <
typename T>
491 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
493 return this->delegate()->key_value(sample, h);
496 template <
typename T>
500 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
502 return this->delegate()->lookup_instance(key);
505 template <
typename T>
511 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
513 this->delegate()->listener(listener, event_mask);
516 template <
typename T>
520 ISOCPP_REPORT_STACK_DDS_BEGIN(*
this);
522 return this->delegate()->listener();
545 #include <org/opensplice/sub/AnyDataReaderDelegate.hpp> 548 template <
typename T>
554 : ::org::opensplice::sub::AnyDataReaderDelegate(qos, topic), sub_(sub)
556 ISOCPP_REPORT_STACK_DDS_BEGIN(topic);
564 if (topic.
qos()->force_merge()) {
568 common_constructor(listener, mask);
571 template <
typename T>
577 : ::org::opensplice::sub::AnyDataReaderDelegate(qos, topic), sub_(sub)
579 ISOCPP_REPORT_STACK_DDS_BEGIN(topic);
587 if (topic.
topic().qos()->force_merge()) {
588 qos_ = topic.
topic().qos();
591 common_constructor(listener, mask);
594 template <
typename T>
596 dds::sub::detail::DataReader<T>::common_constructor(
601 ISOCPP_THROW_EXCEPTION(ISOCPP_PRECONDITION_NOT_MET_ERROR,
"DataReader cannot be created, topic information not found");
604 org::opensplice::sub::qos::DataReaderQosDelegate drQos = qos_.delegate();
608 u_readerQos uQos = drQos.u_qos();
610 u_subscriber uSubscriber = (u_subscriber)(sub_.delegate()->get_user_handle());
612 std::string expression = this->AnyDataReaderDelegate::td_.delegate()->reader_expression();
613 std::vector<c_value> params = this->AnyDataReaderDelegate::td_.delegate()->reader_parameters();
615 std::string name =
"reader <" + this->AnyDataReaderDelegate::td_.name() +
">";
616 u_dataReader uReader = u_dataReaderNew(uSubscriber, name.c_str(), expression.c_str(),
617 params.empty() ? NULL : ¶ms[0], (os_uint32)params.size(), uQos);
618 u_readerQosFree(uQos);
621 ISOCPP_THROW_EXCEPTION(ISOCPP_ERROR,
"Failed to create DataReader");
623 this->AnyDataReaderDelegate::td_.delegate()->incrNrDependents();
626 this->AnyDataReaderDelegate::setCopyOut(org::opensplice::topic::TopicTraits<T>::getCopyOut());
627 this->AnyDataReaderDelegate::setCopyIn(org::opensplice::topic::TopicTraits<T>::getCopyIn());
629 this->userHandle = u_object(uReader);
630 this->listener_set((
void*)listener, mask);
631 this->set_domain_id(this->sub_.delegate()->get_domain_id());
634 template <
typename T>
635 dds::sub::detail::DataReader<T>::~DataReader()
646 template <
typename T>
648 dds::sub::detail::DataReader<T>::init(ObjectDelegate::weak_ref_type weak_ref)
651 this->set_weak_ref(weak_ref);
653 this->sub_.delegate()->add_datareader(*
this);
655 this->listener_dispatcher_set(this->sub_.delegate()->listener_dispatcher_get());
657 this->listener_enable();
659 if (this->sub_.delegate()->is_enabled() && this->sub_.delegate()->is_auto_enable()) {
664 template <
typename T>
666 dds::sub::detail::DataReader<T>::default_filter_state()
668 org::opensplice::core::ScopedObjectLock scopedLock(*
this);
677 template <
typename T>
681 org::opensplice::core::ScopedObjectLock scopedLock(*
this);
683 this->status_filter_ =
state;
689 template <
typename T>
694 dds::sub::detail::LoanedSamplesHolder<T> holder(samples);
701 template <
typename T>
706 dds::sub::detail::LoanedSamplesHolder<T> holder(samples);
713 template <
typename T>
714 template<
typename SamplesFWIterator>
718 dds::sub::detail::SamplesFWInteratorHolder<T, SamplesFWIterator> holder(samples);
722 return holder.get_length();
725 template <
typename T>
726 template<
typename SamplesFWIterator>
730 dds::sub::detail::SamplesFWInteratorHolder<T, SamplesFWIterator> holder(samples);
734 return holder.get_length();
737 template <
typename T>
738 template<
typename SamplesBIIterator>
742 dds::sub::detail::SamplesBIIteratorHolder<T, SamplesBIIterator> holder(samples);
746 return holder.get_length();
749 template <
typename T>
750 template<
typename SamplesBIIterator>
754 dds::sub::detail::SamplesBIIteratorHolder<T, SamplesBIIterator> holder(samples);
758 return holder.get_length();
761 template <
typename T>
767 this->AnyDataReaderDelegate::get_key_value((u_dataReader)(this->userHandle), h, &key_holder);
772 template <
typename T>
776 this->AnyDataReaderDelegate::get_key_value((u_dataReader)(this->userHandle), h, &key);
781 template <
typename T>
783 dds::sub::detail::DataReader<T>::lookup_instance(
const T& key)
const 790 template <
typename T>
792 dds::sub::detail::DataReader<T>::subscriber()
const 799 template <
typename T>
801 dds::sub::detail::DataReader<T>::close()
804 this->listener_dispatcher_reset();
806 org::opensplice::core::ScopedObjectLock scopedLock(*
this);
808 this->sub_.delegate()->remove_datareader(*
this);
815 this->AnyDataReaderDelegate::td_.delegate()->decrNrDependents();
818 org::opensplice::sub::AnyDataReaderDelegate::close();
824 template <
typename T>
826 dds::sub::detail::DataReader<T>::listener()
831 template <
typename T>
833 dds::sub::detail::DataReader<T>::listener(
838 this->listener_set((
void*)l, event_mask);
839 this->listener_enable();
842 template <
typename T>
844 dds::sub::detail::DataReader<T>::wrapper()
846 typename DataReader::ref_type ref =
847 OSPL_CXX11_STD_MODULE::dynamic_pointer_cast<
DataReader<T> >(this->get_strong_ref());
853 template <
typename T>
855 dds::sub::detail::DataReader<T>::listener_notify(
856 ObjectDelegate::ref_type source,
857 uint32_t triggerMask,
868 typename DataReader::ref_type ref =
869 OSPL_CXX11_STD_MODULE::dynamic_pointer_cast<
DataReader<T> >(source);
873 if (triggerMask & V_EVENT_DATA_AVAILABLE) {
874 ref->reset_data_available();
878 if (triggerMask & V_EVENT_SAMPLE_REJECTED) {
880 status.delegate().v_status(((v_readerStatus)eventData)->sampleRejected);
884 if (triggerMask & V_EVENT_LIVELINESS_CHANGED) {
886 status.delegate().v_status(((v_readerStatus)eventData)->livelinessChanged);
890 if (triggerMask & V_EVENT_REQUESTED_DEADLINE_MISSED) {
892 status.delegate().v_status(((v_readerStatus)eventData)->deadlineMissed);
896 if (triggerMask & V_EVENT_REQUESTED_INCOMPATIBLE_QOS) {
898 status.delegate().v_status(((v_readerStatus)eventData)->incompatibleQos);
902 if (triggerMask & V_EVENT_SAMPLE_LOST) {
904 status.delegate().v_status(((v_readerStatus)eventData)->sampleLost);
908 if (triggerMask & V_EVENT_SUBSCRIPTION_MATCHED) {
910 status.delegate().v_status(((v_readerStatus)eventData)->subscriptionMatch);
915 template <
typename T>
917 : mode(SELECT_MODE_READ), reader(dr), state_filter_is_set_(
false),
918 max_samples_((uint32_t)-1), query_(dds::core::null)
922 template <
typename T>
923 typename dds::sub::detail::DataReader<T>::Selector&
927 switch (this->mode) {
928 case SELECT_MODE_READ:
929 case SELECT_MODE_READ_INSTANCE:
930 case SELECT_MODE_READ_NEXT_INSTANCE:
931 this->mode = SELECT_MODE_READ_INSTANCE;
933 case SELECT_MODE_READ_WITH_CONDITION:
934 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
935 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
936 this->mode = SELECT_MODE_READ_INSTANCE_WITH_CONDITION;
943 template <
typename T>
944 typename dds::sub::detail::DataReader<T>::Selector&
948 switch (this->mode) {
949 case SELECT_MODE_READ:
950 case SELECT_MODE_READ_INSTANCE:
951 case SELECT_MODE_READ_NEXT_INSTANCE:
952 this->mode = SELECT_MODE_READ_NEXT_INSTANCE;
954 case SELECT_MODE_READ_WITH_CONDITION:
955 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
956 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
957 this->mode = SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION;
964 template <
typename T>
965 typename dds::sub::detail::DataReader<T>::Selector&
968 this->state_filter_ = s;
969 this->state_filter_is_set_ =
true;
970 if ((this->mode == SELECT_MODE_READ_WITH_CONDITION) ||
971 (this->mode == SELECT_MODE_READ_INSTANCE_WITH_CONDITION) ||
972 (this->mode == SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION)) {
973 if (!this->query_.delegate()->modify_state_filter(this->state_filter_)) {
974 dds::sub::Query q(this->query_.data_reader(), this->query_.expression(), this->query_.delegate()->parameters());
975 q.delegate()->state_filter(this->state_filter_);
982 template <
typename T>
983 typename dds::sub::detail::DataReader<T>::Selector&
986 this->max_samples_ = n;
990 template <
typename T>
991 typename dds::sub::detail::DataReader<T>::Selector&
992 dds::sub::detail::DataReader<T>::Selector::filter_content(
995 if (this->state_filter_is_set_) {
996 if (!query.delegate()->modify_state_filter(this->state_filter_)) {
998 q.delegate()->state_filter(this->state_filter_);
1001 this->query_ = query;
1004 this->query_ = query;
1008 case SELECT_MODE_READ:
1009 mode = SELECT_MODE_READ_WITH_CONDITION;
1011 case SELECT_MODE_READ_INSTANCE:
1012 mode = SELECT_MODE_READ_INSTANCE_WITH_CONDITION;
1014 case SELECT_MODE_READ_NEXT_INSTANCE:
1015 mode = SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION;
1017 case SELECT_MODE_READ_WITH_CONDITION:
1018 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1019 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1028 template <
typename T>
1032 return this->reader->read(*
this);
1035 template <
typename T>
1039 return this->reader->take(*
this);
1044 template <
typename T>
1045 template<
typename SamplesFWIterator>
1049 return this->reader->read(sfit, max_samples, *
this);
1052 template <
typename T>
1053 template<
typename SamplesFWIterator>
1057 return this->reader->take(sfit, max_samples, *
this);
1062 template <
typename T>
1063 template<
typename SamplesBIIterator>
1067 return this->reader->read(sbit, *
this);
1070 template <
typename T>
1071 template<
typename SamplesBIIterator>
1075 return this->reader->take(sbit, *
this);
1078 template <
typename T>
1079 typename dds::sub::detail::DataReader<T>::SelectMode
1080 dds::sub::detail::DataReader<T>::Selector::get_mode()
const 1085 template <
typename T>
1086 dds::sub::detail::DataReader<T>::ManipulatorSelector::ManipulatorSelector(
typename DataReader<T>::ref_type dr) :
1091 template <
typename T>
1093 dds::sub::detail::DataReader<T>::ManipulatorSelector::read_mode()
1098 template <
typename T>
1100 dds::sub::detail::DataReader<T>::ManipulatorSelector::read_mode(
bool b)
1105 template <
typename T>
1106 typename dds::sub::detail::DataReader<T>::ManipulatorSelector&
1121 template <
typename T>
1128 dds::sub::detail::LoanedSamplesHolder<T> holder(samples);
1130 switch(selector.mode) {
1131 case SELECT_MODE_READ:
1134 case SELECT_MODE_READ_INSTANCE:
1135 this->AnyDataReaderDelegate::read_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1137 case SELECT_MODE_READ_NEXT_INSTANCE:
1138 this->AnyDataReaderDelegate::read_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1140 case SELECT_MODE_READ_WITH_CONDITION:
1141 uQuery = selector.query_.delegate()->get_user_query();
1142 this->AnyDataReaderDelegate::read_w_condition(uQuery, holder, selector.max_samples_);
1144 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1145 uQuery = selector.query_.delegate()->get_user_query();
1146 this->AnyDataReaderDelegate::read_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1148 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1149 uQuery = selector.query_.delegate()->get_user_query();
1150 this->AnyDataReaderDelegate::read_next_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1157 template <
typename T>
1164 dds::sub::detail::LoanedSamplesHolder<T> holder(samples);
1166 switch(selector.mode) {
1167 case SELECT_MODE_READ:
1170 case SELECT_MODE_READ_INSTANCE:
1171 this->AnyDataReaderDelegate::take_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1173 case SELECT_MODE_READ_NEXT_INSTANCE:
1174 this->AnyDataReaderDelegate::take_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1176 case SELECT_MODE_READ_WITH_CONDITION:
1177 uQuery = selector.query_.delegate()->get_user_query();
1178 this->AnyDataReaderDelegate::take_w_condition(uQuery, holder, selector.max_samples_);
1180 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1181 uQuery = selector.query_.delegate()->get_user_query();
1182 this->AnyDataReaderDelegate::take_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1184 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1185 uQuery = selector.query_.delegate()->get_user_query();
1186 this->AnyDataReaderDelegate::take_next_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1195 template <
typename T>
1196 template<
typename SamplesFWIterator>
1199 uint32_t max_samples,
const Selector& selector)
1203 dds::sub::detail::SamplesFWInteratorHolder<T, SamplesFWIterator> holder(samples);
1205 switch(selector.mode) {
1206 case SELECT_MODE_READ:
1209 case SELECT_MODE_READ_INSTANCE:
1210 this->AnyDataReaderDelegate::read_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, max_samples);
1212 case SELECT_MODE_READ_NEXT_INSTANCE:
1213 this->AnyDataReaderDelegate::read_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, max_samples);
1215 case SELECT_MODE_READ_WITH_CONDITION:
1216 uQuery = selector.query_.delegate()->get_user_query();
1217 this->AnyDataReaderDelegate::read_w_condition(uQuery, holder, max_samples);
1219 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1220 uQuery = selector.query_.delegate()->get_user_query();
1221 this->AnyDataReaderDelegate::read_instance_w_condition(uQuery, selector.handle, holder, max_samples);
1223 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1224 uQuery = selector.query_.delegate()->get_user_query();
1225 this->AnyDataReaderDelegate::read_next_instance_w_condition(uQuery, selector.handle, holder, max_samples);
1229 return holder.get_length();
1232 template <
typename T>
1233 template<
typename SamplesFWIterator>
1236 uint32_t max_samples,
const Selector& selector)
1240 dds::sub::detail::SamplesFWInteratorHolder<T, SamplesFWIterator> holder(samples);
1242 switch(selector.mode) {
1243 case SELECT_MODE_READ:
1246 case SELECT_MODE_READ_INSTANCE:
1247 this->AnyDataReaderDelegate::take_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, max_samples);
1249 case SELECT_MODE_READ_NEXT_INSTANCE:
1250 this->AnyDataReaderDelegate::take_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, max_samples);
1252 case SELECT_MODE_READ_WITH_CONDITION:
1253 uQuery = selector.query_.delegate()->get_user_query();
1254 this->AnyDataReaderDelegate::take_w_condition(uQuery, holder, max_samples);
1256 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1257 uQuery = selector.query_.delegate()->get_user_query();
1258 this->AnyDataReaderDelegate::take_instance_w_condition(uQuery, selector.handle, holder, max_samples);
1260 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1261 uQuery = selector.query_.delegate()->get_user_query();
1262 this->AnyDataReaderDelegate::take_next_instance_w_condition(uQuery, selector.handle, holder, max_samples);
1266 return holder.get_length();
1271 template <
typename T>
1272 template<
typename SamplesBIIterator>
1278 dds::sub::detail::SamplesBIIteratorHolder<T, SamplesBIIterator> holder(samples);
1280 switch(selector.mode) {
1281 case SELECT_MODE_READ:
1284 case SELECT_MODE_READ_INSTANCE:
1285 this->AnyDataReaderDelegate::read_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1287 case SELECT_MODE_READ_NEXT_INSTANCE:
1288 this->AnyDataReaderDelegate::read_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1290 case SELECT_MODE_READ_WITH_CONDITION:
1291 uQuery = selector.query_.delegate()->get_user_query();
1292 this->AnyDataReaderDelegate::read_w_condition(uQuery, holder, selector.max_samples_);
1294 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1295 uQuery = selector.query_.delegate()->get_user_query();
1296 this->AnyDataReaderDelegate::read_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1298 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1299 uQuery = selector.query_.delegate()->get_user_query();
1300 this->AnyDataReaderDelegate::read_next_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1304 return holder.get_length();
1307 template <
typename T>
1308 template<
typename SamplesBIIterator>
1314 dds::sub::detail::SamplesBIIteratorHolder<T, SamplesBIIterator> holder(samples);
1316 switch(selector.mode) {
1317 case SELECT_MODE_READ:
1320 case SELECT_MODE_READ_INSTANCE:
1321 this->AnyDataReaderDelegate::take_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1323 case SELECT_MODE_READ_NEXT_INSTANCE:
1324 this->AnyDataReaderDelegate::take_next_instance((u_dataReader)(userHandle), selector.handle, selector.state_filter_, holder, selector.max_samples_);
1326 case SELECT_MODE_READ_WITH_CONDITION:
1327 uQuery = selector.query_.delegate()->get_user_query();
1328 this->AnyDataReaderDelegate::take_w_condition(uQuery, holder, selector.max_samples_);
1330 case SELECT_MODE_READ_INSTANCE_WITH_CONDITION:
1331 uQuery = selector.query_.delegate()->get_user_query();
1332 this->AnyDataReaderDelegate::take_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1334 case SELECT_MODE_READ_NEXT_INSTANCE_WITH_CONDITION:
1335 uQuery = selector.query_.delegate()->get_user_query();
1336 this->AnyDataReaderDelegate::take_next_instance_w_condition(uQuery, selector.handle, holder, selector.max_samples_);
1340 return holder.get_length();
1370 template <
typename SELECTOR>
1373 selector.read_mode(
true);
1398 template <
typename SELECTOR>
1401 selector.read_mode(
false);
1424 inline dds::sub::functors::MaxSamplesManipulatorFunctor
1427 return dds::sub::functors::MaxSamplesManipulatorFunctor(n);
1454 inline dds::sub::functors::ContentFilterManipulatorFunctor
1457 return dds::sub::functors::ContentFilterManipulatorFunctor(query);
1486 inline dds::sub::functors::StateFilterManipulatorFunctor
1489 return dds::sub::functors::StateFilterManipulatorFunctor(s);
1515 inline dds::sub::functors::InstanceManipulatorFunctor
1518 return dds::sub::functors::InstanceManipulatorFunctor(h);
1555 inline dds::sub::functors::NextInstanceManipulatorFunctor
1558 return dds::sub::functors::NextInstanceManipulatorFunctor(h);
DataReader events Listener.
dds::sub::status::DataState default_filter_state()
Listener * listener() const
ManipulatorSelector & next_instance(const dds::core::InstanceHandle &handle)
A Subscriber is the object responsible for the actual reception of the data resulting from its subscr...
dds::sub::functors::MaxSamplesManipulatorFunctor max_samples(uint32_t n)
virtual void on_data_available(DataReader< T > &reader)=0
DataReader & operator>>(dds::sub::LoanedSamples< T > &ls)
dds::topic::TopicInstance< T > key_value(const dds::core::InstanceHandle &h)
Reference(dds::core::null_type &)
A TopicInstance encapsulates a dds::sub::Sample and its associated dds::core::InstanceHandle.
Topic is the most basic description of the data to be published and subscribed.
This class provides the basic mechanism for an application to specify Quality of Service attributes f...
Selector & content(const dds::sub::Query &query)
ContentFilteredTopic is a specialization of TopicDescription that allows for content-based subscripti...
ManipulatorSelector & operator>>(dds::sub::LoanedSamples< T > &samples)
ManipulatorSelector(DataReader &dr)
Support functionality to check if a given object type is a Topic.
virtual void on_sample_rejected(DataReader< T > &reader, const dds::core::status::SampleRejectedStatus &status)=0
Selector & max_samples(uint32_t maxsamples)
This class is the base for Topic, ContentFilteredTopic and MultiTopic.
Query objects contain expressions that allow the application to specify a filter on the locally avail...
dds::sub::LoanedSamples< T > take()
dds::sub::qos::DataReaderQos qos() const
virtual void on_requested_deadline_missed(DataReader< T > &reader, const dds::core::status::RequestedDeadlineMissedStatus &status)=0
DataReader allows the applicatin to access published sample data.
dds::sub::qos::DataReaderQos default_datareader_qos() const
virtual void on_requested_incompatible_qos(DataReader< T > &reader, const dds::core::status::RequestedIncompatibleQosStatus &status)=0
virtual void on_liveliness_changed(DataReader< T > &reader, const dds::core::status::LivelinessChangedStatus &status)=0
void parameters(const FWIterator &begin, const FWIterator end)
Class to hold sample DataState information.
Selector & state(const dds::sub::status::DataState &state)
ManipulatorSelector & state(const dds::sub::status::DataState &state)
DataReader(const dds::sub::Subscriber &sub, const ::dds::topic::Topic< T > &topic)
ManipulatorSelector & max_samples(uint32_t n)
SELECTOR & take(SELECTOR &selector)
const AnyDataReader & data_reader() const
dds::sub::functors::NextInstanceManipulatorFunctor next_instance(const dds::core::InstanceHandle &h)
Class to hold the handle associated with in sample instance.
dds::sub::functors::ContentFilterManipulatorFunctor content(const dds::sub::Query &query)
dds::sub::LoanedSamples< T > read()
Selector & next_instance(const dds::core::InstanceHandle &handle)
ManipulatorSelector & content(const dds::sub::Query &query)
virtual void on_sample_lost(DataReader< T > &reader, const dds::core::status::SampleLostStatus &status)=0
SELECTOR & read(SELECTOR &selector)
const std::string & expression() const
LoanedSamples< T > read()
dds::sub::functors::StateFilterManipulatorFunctor state(const dds::sub::status::DataState &s)
Selector & instance(const dds::core::InstanceHandle &handle)
const dds::domain::DomainParticipant & domain_participant() const
const dds::topic::Topic< T > & topic() const
StatusMask is a bitmap or bitset field.
Base class for reference-counted objects.
This class encapsulates and automates the management of loaned samples.
LoanedSamples< T > take()
dds::topic::qos::TopicQos qos() const
ManipulatorSelector & instance(const dds::core::InstanceHandle &handle)
virtual void on_subscription_matched(DataReader< T > &reader, const dds::core::status::SubscriptionMatchedStatus &status)=0
dds::sub::functors::InstanceManipulatorFunctor instance(const dds::core::InstanceHandle &h)
const dds::core::InstanceHandle lookup_instance(const T &key) const