ADLINK-IST/opensplice

trying to create a dynamic data reader

Opened this issue · 0 comments

Hi,
I am currently having this issue in creating a DataReader for DynamicData. Though, it seems to create the reader2. But when I try to do

dds::sub::LoanedSamples<dds::core::xtypes::detail::DynamicData> samples2 = reader2.take();
or
dds::sub::LoanedSamples<dds::core::xtypes::detail::DynamicData> samples2 = reader2.select().state(dds::sub::status::SampleState::any()).read();

I get this error

In file included from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/Sample.hpp:22,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/org/opensplice/sub/AnyDataReaderDelegate.hpp:36,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/org/opensplice/sub/SubscriberDelegate.hpp:39,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/Subscriber.hpp:23,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/Subscriber.hpp:23,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/TAnyDataReader.hpp:22,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/TAnyDataReaderImpl.hpp:32,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/AnyDataReader.hpp:24,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/AnyDataReader.hpp:22,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/TQuery.hpp:24,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/Query.hpp:30,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/Query.hpp:22,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/Manipulators.hpp:28,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/DataReader.hpp:28,
                 from /opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/DataReader.hpp:21,
                 from /home/lnic/dev/platform-services.sean-OSPLAlarmsDynRmv/alarms/rule-evaluator/dynamic-topic-ospl.h:15,
                 from /home/lnic/dev/platform-services.sean-OSPLAlarmsDynRmv/alarms/rule-evaluator/dynamic-topic-ospl.cpp:1:
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/Sample.hpp: In instantiation of ‘class dds::sub::detail::Sample<dds::core::xtypes::detail::DynamicData>’:
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/core/Value.hpp:189:7:   required from ‘class dds::core::Value<dds::sub::detail::Sample<dds::core::xtypes::detail::DynamicData> >’
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/TSample.hpp:66:17:   required from ‘class dds::sub::Sample<dds::core::xtypes::detail::DynamicData, dds::sub::detail::Sample>’
/usr/include/c++/9/bits/stl_vector.h:333:35:   required from ‘std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = dds::sub::Sample<dds::core::xtypes::detail::DynamicData, dds::sub::detail::Sample>; _Alloc = std::allocator<dds::sub::Sample<dds::core::xtypes::detail::DynamicData, dds::sub::detail::Sample> >]’
/usr/include/c++/9/bits/stl_vector.h:484:7:   required from ‘dds::sub::detail::LoanedSamples<T>::LoanedSamples() [with T = dds::core::xtypes::detail::DynamicData]’
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/LoanedSamplesImpl.hpp:40:57:   required from ‘dds::sub::LoanedSamples<T, DELEGATE>::LoanedSamples() [with T = dds::core::xtypes::detail::DynamicData; DELEGATE = dds::sub::detail::LoanedSamples]’
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/TDataReaderImpl.hpp:705:32:   required from ‘dds::sub::LoanedSamples<T> dds::sub::detail::DataReader<T>::take() [with T = dds::core::xtypes::detail::DynamicData]’
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/TDataReaderImpl.hpp:424:35:   required from ‘dds::sub::LoanedSamples<T> dds::sub::DataReader<T, DELEGATE>::take() [with T = dds::core::xtypes::detail::DynamicData; DELEGATE = dds::sub::detail::DataReader]’
/home/lnic/dev/platform-services.sean-OSPLAlarmsDynRmv/alarms/rule-evaluator/dynamic-topic-ospl.cpp:407:105:   required from here
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/Sample.hpp:124:7: error: ‘dds::sub::detail::Sample<T>::data_’ has incomplete type
  124 |     T data_;
      |       ^~~~~
In file included from /home/lnic/dev/platform-services.sean-OSPLAlarmsDynRmv/alarms/rule-evaluator/dynamic-topic-ospl.cpp:3:
/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/core/xtypes/detail/DynamicData.hpp:27:15: note: forward declaration of ‘class dds::core::xtypes::detail::DynamicData’
   27 |         class DynamicData;

The code that I am trying to use, with the headers included, looks like this below

#include "/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/core/xtypes/detail/DynamicData.hpp"
#include "/opt/HDE/x86_64.linux/include/dcps/C++/isocpp2/dds/sub/detail/LoanedSamples.hpp"

dds::topic::qos::TopicQos topicQos1
                 = dp.default_topic_qos()
                     << dds::core::policy::Durability::Transient()
                     << dds::core::policy::Reliability::Reliable();


//dds::sub::qos::DataReaderQos qs;
dds::sub::Subscriber subi(dp);
                if (topicVal == dds::core::null)
                    topicVal = dds::topic::Topic<dds::core::xtypes::detail::DynamicData>(dp, sample.data().topic_name(), sample.data().type_name(), topicQos1);//subi.default_datareader_qos().topic_qos() );//topicQos1 );//dds::core::QosProvider::Default().topic_qos());
                //reader1 = dds::sub::DataReader<dds::core::xtypes::detail::DynamicData>(subi, topicVal, topicQos1);//QosProvider::Default().datareader_qos("XXXXXXX::" + topicQos));
        dds::sub::DataReader<dds::core::xtypes::detail::DynamicData>  reader2(subi, topicVal, topicQos1);

                dds::sub::LoanedSamples<dds::core::xtypes::detail::DynamicData> samples2 = reader2.take();//select().state(dds::sub::status::SampleState::any()).read();;//reader1.read();//.select().state(dds::sub::status::SampleState::not_read()).take();;//reader1.take();

Now I can do the LoanedSample on ParticipantBuiltInTopicData like so

                    dds::sub::DataReader<dds::topic::ParticipantBuiltinTopicData> participantReader(dds::core::null);

            dds::sub::LoanedSamples<dds::topic::ParticipantBuiltinTopicData> samples = participantReader.take();
            for (dds::sub::LoanedSamples<dds::topic::ParticipantBuiltinTopicData>::const_iterator sample = samples.begin();
                sample < samples.end(); ++sample)
            {
   }

but cannot seem to do

                dds::sub::LoanedSamples<dds::core::xtypes::detail::DynamicData> samples2 = reader2.take();

Could anyone please assist?

Thanks.

Kind Regards,
Husnain Malik