Program Listing for File DataWriter.hpp

Return to documentation for file (/tmp/ws/src/fastrtps/include/fastdds/dds/publisher/DataWriter.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_PUBLISHER_DATAWRITER_HPP_
#define _FASTDDS_DDS_PUBLISHER_DATAWRITER_HPP_

#include <fastdds/dds/builtin/topic/SubscriptionBuiltinTopicData.hpp>
#include <fastdds/dds/core/Entity.hpp>
#include <fastdds/dds/core/status/BaseStatus.hpp>
#include <fastdds/dds/core/status/IncompatibleQosStatus.hpp>
#include <fastdds/dds/core/status/PublicationMatchedStatus.hpp>
#include <fastdds/dds/core/status/StatusMask.hpp>
#include <fastdds/dds/publisher/qos/DataWriterQos.hpp>

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

#include <fastrtps/fastrtps_dll.h>

#include <fastrtps/qos/DeadlineMissedStatus.h>
#include <fastrtps/types/TypesBase.h>

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

namespace eprosima {
namespace fastrtps {
namespace rtps {

class WriteParams;
struct GUID_t;

} // namespace rtps
} // namespace fastrtps

namespace fastdds {
namespace dds {

class PublisherListener;
class PublisherImpl;
class Publisher;

class TypeSupport;

class DataWriterImpl;
class DataWriterListener;
class DataWriterQos;
class Topic;

class DataWriter : public DomainEntity
{
protected:

    friend class PublisherImpl;
    friend class DataWriterImpl;

    DataWriter(
            DataWriterImpl* impl,
            const StatusMask& mask = StatusMask::all());

    DataWriter(
            Publisher* pub,
            Topic* topic,
            const DataWriterQos& qos = DATAWRITER_QOS_DEFAULT,
            DataWriterListener* listener = nullptr,
            const StatusMask& mask = StatusMask::all());

public:

    enum class LoanInitializationKind
    {
        NO_LOAN_INITIALIZATION,

        ZERO_LOAN_INITIALIZATION,

        CONSTRUCTED_LOAN_INITIALIZATION
    };

    virtual ~DataWriter();

    RTPS_DllAPI ReturnCode_t enable() override;

    RTPS_DllAPI bool write(
            void* data);

    RTPS_DllAPI bool write(
            void* data,
            fastrtps::rtps::WriteParams& params);

    RTPS_DllAPI ReturnCode_t write(
            void* data,
            const InstanceHandle_t& handle);

    RTPS_DllAPI ReturnCode_t write_w_timestamp(
            void* data,
            const InstanceHandle_t& handle,
            const fastrtps::Time_t& timestamp);

#ifndef DOXYGEN_SHOULD_SKIP_THIS
    FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastdds::dds:DataWriter::write_w_timestamp()",
            "In favor of version using eprosima::fastrtps::Time_t.")
    RTPS_DllAPI ReturnCode_t write_w_timestamp(
            void* data,
            const InstanceHandle_t& handle,
            const fastrtps::rtps::Time_t& timestamp);
#endif // DOXYGEN_SHOULD_SKIP_THIS

    RTPS_DllAPI InstanceHandle_t register_instance(
            void* instance);

    RTPS_DllAPI InstanceHandle_t register_instance_w_timestamp(
            void* instance,
            const fastrtps::Time_t& timestamp);

#ifndef DOXYGEN_SHOULD_SKIP_THIS
    FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastdds::dds:DataWriter::register_instance_w_timestamp()",
            "In favor of version using eprosima::fastrtps::Time_t.")
    RTPS_DllAPI InstanceHandle_t register_instance_w_timestamp(
            void* instance,
            const fastrtps::rtps::Time_t& timestamp);
#endif // DOXYGEN_SHOULD_SKIP_THIS

    RTPS_DllAPI ReturnCode_t unregister_instance(
            void* instance,
            const InstanceHandle_t& handle);

    RTPS_DllAPI ReturnCode_t unregister_instance_w_timestamp(
            void* instance,
            const InstanceHandle_t& handle,
            const fastrtps::Time_t& timestamp);

#ifndef DOXYGEN_SHOULD_SKIP_THIS
    FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastdds::dds:DataWriter::unregister_instance_w_timestamp()",
            "In favor of version using eprosima::fastrtps::Time_t.")
    RTPS_DllAPI ReturnCode_t unregister_instance_w_timestamp(
            void* instance,
            const InstanceHandle_t& handle,
            const fastrtps::rtps::Time_t& timestamp);
#endif // DOXYGEN_SHOULD_SKIP_THIS

    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 const fastrtps::rtps::GUID_t& guid() const;

    RTPS_DllAPI InstanceHandle_t get_instance_handle() const;

    RTPS_DllAPI TypeSupport get_type() const;

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

    RTPS_DllAPI ReturnCode_t get_offered_deadline_missed_status(
            OfferedDeadlineMissedStatus& status);

    RTPS_DllAPI ReturnCode_t get_offered_incompatible_qos_status(
            OfferedIncompatibleQosStatus& status);

    RTPS_DllAPI ReturnCode_t get_publication_matched_status(
            PublicationMatchedStatus& status) const;

    RTPS_DllAPI ReturnCode_t set_qos(
            const DataWriterQos& qos);

    RTPS_DllAPI const DataWriterQos& get_qos() const;

    RTPS_DllAPI ReturnCode_t get_qos(
            DataWriterQos& qos) const;

    RTPS_DllAPI Topic* get_topic() const;

    RTPS_DllAPI const DataWriterListener* get_listener() const;

    RTPS_DllAPI ReturnCode_t set_listener(
            DataWriterListener* listener);

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

    RTPS_DllAPI ReturnCode_t dispose(
            void* data,
            const InstanceHandle_t& handle);

    RTPS_DllAPI ReturnCode_t dispose_w_timestamp(
            void* instance,
            const InstanceHandle_t& handle,
            const fastrtps::Time_t& timestamp);
    RTPS_DllAPI ReturnCode_t get_liveliness_lost_status(
            LivelinessLostStatus& status);

    RTPS_DllAPI const Publisher* get_publisher() const;

    RTPS_DllAPI ReturnCode_t assert_liveliness();

    RTPS_DllAPI ReturnCode_t get_matched_subscription_data(
            builtin::SubscriptionBuiltinTopicData& subscription_data,
            const InstanceHandle_t& subscription_handle) const;

    RTPS_DllAPI ReturnCode_t get_matched_subscriptions(
            std::vector<InstanceHandle_t>& subscription_handles) const;

#ifndef DOXYGEN_SHOULD_SKIP_THIS
    FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastdds::dds:DataWriter::get_matched_subscriptions()",
            "In favor of version using std::vector<fastrtps::rtps::InstanceHandle_t>.")
    RTPS_DllAPI ReturnCode_t get_matched_subscriptions(
            std::vector<InstanceHandle_t*>& subscription_handles) const;
#endif // DOXYGEN_SHOULD_SKIP_THIS

    RTPS_DllAPI ReturnCode_t clear_history(
            size_t* removed);

    RTPS_DllAPI ReturnCode_t loan_sample(
            void*& sample,
            LoanInitializationKind initialization = LoanInitializationKind::NO_LOAN_INITIALIZATION);

    RTPS_DllAPI ReturnCode_t discard_loan(
            void*& sample);

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

    RTPS_DllAPI ReturnCode_t wait_for_acknowledgments(
            void* instance,
            const InstanceHandle_t& handle,
            const fastrtps::Duration_t& max_wait);

protected:

    DataWriterImpl* impl_;
};

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

#endif // _FASTDDS_DDS_PUBLISHER_DATAWRITER_HPP_