21 #ifndef OSPL_DDS_SUB_DETAIL_FIND_HPP_ 22 #define OSPL_DDS_SUB_DETAIL_FIND_HPP_ 37 #include <org/opensplice/sub/SubscriberDelegate.hpp> 38 #include <org/opensplice/sub/BuiltinSubscriberDelegate.hpp> 39 #include <org/opensplice/sub/AnyDataReaderDelegate.hpp> 65 typedef std::vector<org::opensplice::sub::AnyDataReaderDelegate::ref_type> base_readers_vector;
66 typedef std::vector<org::opensplice::sub::AnyDataReaderDelegate::ref_type>::iterator base_readers_iterator;
71 template <
typename READER,
typename ITERATOR>
72 class ReadersCopySpecialization
76 bool copy(base_readers_iterator base_iter, ITERATOR typed_iter) {
80 typename READER::DELEGATE_REF_T reader_typed =
81 OSPL_CXX11_STD_MODULE::dynamic_pointer_cast<
typename READER::DELEGATE_T>(*base_iter);
82 READER dr(reader_typed);
83 if(dr != dds::core::null)
99 template <
typename ITERATOR>
100 class ReadersCopySpecialization<
dds::sub::AnyDataReader, ITERATOR>
104 bool copy(base_readers_iterator base_iter, ITERATOR any_iter) {
105 *any_iter = (*base_iter)->wrapper_to_any();
114 template <
typename READER,
typename ITERATOR>
119 uint32_t copy(base_readers_vector base_readers,
124 base_readers_iterator iter;
125 for (iter = base_readers.begin(); (size < max_size) && (iter != base_readers.end()); ++iter) {
126 if (ReadersCopySpecialization<READER, ITERATOR>::copy(iter, begin)) {
135 uint32_t copy(base_readers_vector base_readers,
139 base_readers_iterator iter;
140 for (iter = base_readers.begin(); iter != base_readers.end(); ++iter) {
141 if (ReadersCopySpecialization<READER, ITERATOR>::copy(iter, begin)) {
154 template <
typename READER,
typename FwdIterator>
157 const std::string &topic_name,
158 FwdIterator begin, uint32_t max_size)
161 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
163 detail::base_readers_vector base_readers;
164 base_readers = sub.delegate()->find_datareaders(topic_name);
165 size = detail::ReadersCopy<READER, FwdIterator>::copy(base_readers, begin, max_size);
170 template <
typename READER,
typename BinIterator>
173 const std::string &topic_name,
176 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
178 detail::base_readers_vector base_readers;
179 base_readers = sub.delegate()->find_datareaders(topic_name);
180 size = detail::ReadersCopy<READER, BinIterator>::copy(base_readers, begin);
184 template <
typename READER,
typename T,
typename FwdIterator>
188 FwdIterator begin, uint32_t max_size)
190 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
191 return find<READER, T, FwdIterator>(sub, topic_description.
name(), begin, max_size);
194 template <
typename READER,
typename T,
typename BinIterator>
200 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
201 return find<READER, T, BinIterator>(sub, topic_description.
name(), begin);
204 template <
typename READER,
typename FwdIterator>
208 FwdIterator begin, uint32_t max_size)
210 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
213 detail::base_readers_vector base_readers;
214 base_readers = sub.delegate()->get_datareaders(rs);
215 size = detail::ReadersCopy<READER, FwdIterator>::copy(base_readers, begin, max_size);
220 template <
typename READER,
typename BinIterator>
226 ISOCPP_REPORT_STACK_DDS_BEGIN(sub);
228 detail::base_readers_vector base_readers;
229 base_readers = sub.delegate()->get_datareaders(rs);
230 size = detail::ReadersCopy<READER, BinIterator>::copy(base_readers, begin);
A Subscriber is the object responsible for the actual reception of the data resulting from its subscr...
This class is the base for Topic, ContentFilteredTopic and MultiTopic.
Class to hold sample DataState information.
uint32_t find(const dds::sub::Subscriber &sub, const std::string &topic_name, FwdIterator begin, uint32_t max_size)
const std::string & name() const