Program Listing for File DataReader.hpp

Return to documentation for file (/tmp/ws/src/fastrtps/include/fastdds/dds/subscriber/DataReader.hpp)

// Copyright 2019 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef _FASTDDS_DDS_SUBSCRIBER_DATAREADER_HPP_
#define _FASTDDS_DDS_SUBSCRIBER_DATAREADER_HPP_

#include <cstdint>
#include <vector>

#include <fastdds/dds/builtin/topic/PublicationBuiltinTopicData.hpp>
#include <fastdds/dds/core/Entity.hpp>
#include <fastdds/dds/core/LoanableCollection.hpp>
#include <fastdds/dds/core/LoanableSequence.hpp>
#include <fastdds/dds/core/status/BaseStatus.hpp>
#include <fastdds/dds/core/status/DeadlineMissedStatus.hpp>
#include <fastdds/dds/core/status/IncompatibleQosStatus.hpp>
#include <fastdds/dds/core/status/SampleRejectedStatus.hpp>
#include <fastdds/dds/core/status/StatusMask.hpp>
#include <fastdds/dds/core/status/SubscriptionMatchedStatus.hpp>
#include <fastdds/dds/subscriber/ReadCondition.hpp>
#include <fastdds/dds/subscriber/SampleInfo.hpp>
#include <fastdds/dds/topic/TypeSupport.hpp>

#include <fastrtps/fastrtps_dll.h>

#include <fastdds/rtps/common/LocatorList.hpp>
#include <fastdds/rtps/common/Time_t.h>

#include <fastrtps/types/TypesBase.h>

using eprosima::fastrtps::types::ReturnCode_t;

namespace dds {
namespace sub {

class DataReader;

} // namespace sub
} // namespace dds

namespace eprosima {
namespace fastrtps {
namespace rtps {
struct GUID_t;
} // namespace rtps
} // namespace fastrtps

namespace fastdds {
namespace dds {

class Subscriber;
class SubscriberImpl;
class DataReaderImpl;
class DataReaderListener;
class DataReaderQos;
class TopicDescription;
struct LivelinessChangedStatus;

// Not yet implemented
class QueryCondition;

using SampleInfoSeq = LoanableSequence<SampleInfo>;

class DataReader : public DomainEntity
{
protected:

    friend class DataReaderImpl;
    friend class SubscriberImpl;

    DataReader(
            DataReaderImpl* impl,
            const StatusMask& mask = StatusMask::all());

    DataReader(
            Subscriber* s,
            TopicDescription* topic,
            const DataReaderQos& qos,
            DataReaderListener* listener = nullptr,
            const StatusMask& mask = StatusMask::all());

public:

    virtual ~DataReader();

    RTPS_DllAPI ReturnCode_t enable() override;

    RTPS_DllAPI bool wait_for_unread_message(
            const fastrtps::Duration_t& timeout);

    RTPS_DllAPI ReturnCode_t wait_for_historical_data(
            const fastrtps::Duration_t& max_wait) const;



    RTPS_DllAPI ReturnCode_t read(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t read_w_condition(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples,
            ReadCondition* a_condition);

    RTPS_DllAPI ReturnCode_t read_instance(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            const InstanceHandle_t& a_handle = HANDLE_NIL,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t read_next_instance(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            const InstanceHandle_t& previous_handle = HANDLE_NIL,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t read_next_instance_w_condition(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples,
            const InstanceHandle_t& previous_handle,
            ReadCondition* a_condition);

    RTPS_DllAPI ReturnCode_t read_next_sample(
            void* data,
            SampleInfo* info);

    RTPS_DllAPI ReturnCode_t take(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t take_w_condition(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples,
            ReadCondition* a_condition);

    RTPS_DllAPI ReturnCode_t take_instance(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            const InstanceHandle_t& a_handle = HANDLE_NIL,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t take_next_instance(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples = LENGTH_UNLIMITED,
            const InstanceHandle_t& previous_handle = HANDLE_NIL,
            SampleStateMask sample_states = ANY_SAMPLE_STATE,
            ViewStateMask view_states = ANY_VIEW_STATE,
            InstanceStateMask instance_states = ANY_INSTANCE_STATE);

    RTPS_DllAPI ReturnCode_t take_next_instance_w_condition(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos,
            int32_t max_samples,
            const InstanceHandle_t& previous_handle,
            ReadCondition* a_condition);

    RTPS_DllAPI ReturnCode_t take_next_sample(
            void* data,
            SampleInfo* info);


    RTPS_DllAPI ReturnCode_t return_loan(
            LoanableCollection& data_values,
            SampleInfoSeq& sample_infos);

    RTPS_DllAPI ReturnCode_t get_key_value(
            void* key_holder,
            const InstanceHandle_t& handle);

    RTPS_DllAPI InstanceHandle_t lookup_instance(
            const void* instance) const;

    RTPS_DllAPI ReturnCode_t get_first_untaken_info(
            SampleInfo* info);

    RTPS_DllAPI uint64_t get_unread_count() const;

    RTPS_DllAPI uint64_t get_unread_count(
            bool mark_as_read) const;

    RTPS_DllAPI const fastrtps::rtps::GUID_t& guid();

    RTPS_DllAPI const fastrtps::rtps::GUID_t& guid() const;

    RTPS_DllAPI InstanceHandle_t get_instance_handle() const;

    RTPS_DllAPI TypeSupport type();

    RTPS_DllAPI const TopicDescription* get_topicdescription() const;

    RTPS_DllAPI ReturnCode_t get_requested_deadline_missed_status(
            RequestedDeadlineMissedStatus& status);

    RTPS_DllAPI ReturnCode_t get_requested_incompatible_qos_status(
            RequestedIncompatibleQosStatus& status);

    RTPS_DllAPI ReturnCode_t set_qos(
            const DataReaderQos& qos);

    RTPS_DllAPI const DataReaderQos& get_qos() const;

    RTPS_DllAPI ReturnCode_t get_qos(
            DataReaderQos& qos) const;

    RTPS_DllAPI ReturnCode_t set_listener(
            DataReaderListener* listener);

    RTPS_DllAPI ReturnCode_t set_listener(
            DataReaderListener* listener,
            const StatusMask& mask);
    RTPS_DllAPI const DataReaderListener* get_listener() const;

    /* TODO
       RTPS_DllAPI bool get_key_value(
            void* data,
            const InstanceHandle_t& handle);
     */

    RTPS_DllAPI ReturnCode_t get_liveliness_changed_status(
            LivelinessChangedStatus& status) const;


    RTPS_DllAPI ReturnCode_t get_sample_lost_status(
            SampleLostStatus& status) const;

    RTPS_DllAPI ReturnCode_t get_sample_rejected_status(
            SampleRejectedStatus& status) const;

    RTPS_DllAPI ReturnCode_t get_subscription_matched_status(
            SubscriptionMatchedStatus& status) const;

    RTPS_DllAPI ReturnCode_t get_matched_publication_data(
            builtin::PublicationBuiltinTopicData& publication_data,
            const fastrtps::rtps::InstanceHandle_t& publication_handle) const;

    RTPS_DllAPI ReturnCode_t get_matched_publications(
            std::vector<InstanceHandle_t>& publication_handles) const;

    RTPS_DllAPI ReadCondition* create_readcondition(
            SampleStateMask sample_states,
            ViewStateMask view_states,
            InstanceStateMask instance_states);

    RTPS_DllAPI QueryCondition* create_querycondition(
            SampleStateMask sample_states,
            ViewStateMask view_states,
            InstanceStateMask instance_states,
            const std::string& query_expression,
            const std::vector<std::string>& query_parameters);

    RTPS_DllAPI ReturnCode_t delete_readcondition(
            ReadCondition* a_condition);

    RTPS_DllAPI const Subscriber* get_subscriber() const;

    RTPS_DllAPI ReturnCode_t delete_contained_entities();

    RTPS_DllAPI bool is_sample_valid(
            const void* data,
            const SampleInfo* info) const;

    RTPS_DllAPI ReturnCode_t get_listening_locators(
            rtps::LocatorList& locators) const;

protected:

    DataReaderImpl* impl_;

    friend class ::dds::sub::DataReader;

};

} /* namespace dds */
} /* namespace fastdds */
} /* namespace eprosima */

#endif /* _FASTDDS_DDS_SUBSCRIBER_DATAREADER_HPP_*/