Program Listing for File DataWriter.hpp

Return to documentation for file (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/PublicationBuiltinTopicData.hpp>
#include <fastdds/dds/builtin/topic/SubscriptionBuiltinTopicData.hpp>
#include <fastdds/dds/core/Entity.hpp>
#include <fastdds/dds/core/ReturnCode.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/PublicationMatchedStatus.hpp>
#include <fastdds/dds/core/status/StatusMask.hpp>
#include <fastdds/dds/publisher/qos/DataWriterQos.hpp>
#include <fastdds/fastdds_dll.hpp>
#include <fastdds/rtps/common/LocatorList.hpp>
#include <fastdds/rtps/common/Time_t.hpp>

namespace eprosima {
namespace fastdds {
namespace rtps {

class WriteParams;
struct GUID_t;

} // namespace rtps

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();

    FASTDDS_EXPORTED_API ReturnCode_t enable() override;

    FASTDDS_EXPORTED_API ReturnCode_t write(
            const void* const data);

    FASTDDS_EXPORTED_API ReturnCode_t write(
            const void* const data,
            fastdds::rtps::WriteParams& params);

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

    FASTDDS_EXPORTED_API ReturnCode_t write_w_timestamp(
            const void* const data,
            const InstanceHandle_t& handle,
            const fastdds::dds::Time_t& timestamp);

    FASTDDS_EXPORTED_API InstanceHandle_t register_instance(
            const void* const instance);

    FASTDDS_EXPORTED_API InstanceHandle_t register_instance_w_timestamp(
            const void* const instance,
            const fastdds::dds::Time_t& timestamp);

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

    FASTDDS_EXPORTED_API ReturnCode_t unregister_instance_w_timestamp(
            const void* const instance,
            const InstanceHandle_t& handle,
            const fastdds::dds::Time_t& timestamp);

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

    FASTDDS_EXPORTED_API InstanceHandle_t lookup_instance(
            const void* const instance) const;

    FASTDDS_EXPORTED_API const fastdds::rtps::GUID_t& guid() const;

    FASTDDS_EXPORTED_API InstanceHandle_t get_instance_handle() const;

    FASTDDS_EXPORTED_API TypeSupport get_type() const;

    FASTDDS_EXPORTED_API ReturnCode_t wait_for_acknowledgments(
            const fastdds::dds::Duration_t& max_wait);

    FASTDDS_EXPORTED_API ReturnCode_t get_offered_deadline_missed_status(
            OfferedDeadlineMissedStatus& status);

    FASTDDS_EXPORTED_API ReturnCode_t get_offered_incompatible_qos_status(
            OfferedIncompatibleQosStatus& status);

    FASTDDS_EXPORTED_API ReturnCode_t get_publication_matched_status(
            PublicationMatchedStatus& status) const;

    FASTDDS_EXPORTED_API ReturnCode_t set_qos(
            const DataWriterQos& qos);

    FASTDDS_EXPORTED_API const DataWriterQos& get_qos() const;

    FASTDDS_EXPORTED_API ReturnCode_t get_qos(
            DataWriterQos& qos) const;

    FASTDDS_EXPORTED_API Topic* get_topic() const;

    FASTDDS_EXPORTED_API const DataWriterListener* get_listener() const;

    FASTDDS_EXPORTED_API ReturnCode_t set_listener(
            DataWriterListener* listener);

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

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

    FASTDDS_EXPORTED_API ReturnCode_t dispose_w_timestamp(
            const void* const instance,
            const InstanceHandle_t& handle,
            const fastdds::dds::Time_t& timestamp);
    FASTDDS_EXPORTED_API ReturnCode_t get_liveliness_lost_status(
            LivelinessLostStatus& status);

    FASTDDS_EXPORTED_API const Publisher* get_publisher() const;

    FASTDDS_EXPORTED_API ReturnCode_t assert_liveliness();

    FASTDDS_EXPORTED_API ReturnCode_t get_matched_subscription_data(
            SubscriptionBuiltinTopicData& subscription_data,
            const InstanceHandle_t& subscription_handle) const;

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

    FASTDDS_EXPORTED_API ReturnCode_t clear_history(
            size_t* removed);

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

    FASTDDS_EXPORTED_API ReturnCode_t discard_loan(
            void*& sample);

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

    FASTDDS_EXPORTED_API ReturnCode_t wait_for_acknowledgments(
            const void* const instance,
            const InstanceHandle_t& handle,
            const fastdds::dds::Duration_t& max_wait);

    FASTDDS_EXPORTED_API ReturnCode_t get_publication_builtin_topic_data(
            PublicationBuiltinTopicData& publication_data) const;

protected:

    DataWriterImpl* impl_;
};

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

#endif // FASTDDS_DDS_PUBLISHER__DATAWRITER_HPP