Program Listing for File CorePolicy.hpp
↰ Return to documentation for file (/tmp/ws/src/fastrtps/include/dds/core/policy/CorePolicy.hpp
)
/*
* Copyright 2010, Object Management Group, Inc.
* Copyright 2010, PrismTech, Corp.
* Copyright 2010, Real-Time Innovations, Inc.
* Copyright 2019, Proyectos y Sistemas de Mantenimiento SL (eProsima).
* All rights reserved.
*
* 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 OMG_DDS_CORE_POLICY_CORE_POLICY_HPP_
#define OMG_DDS_CORE_POLICY_CORE_POLICY_HPP_
#include <dds/core/policy/PolicyKind.hpp>
#include <dds/core/policy/detail/CorePolicy.hpp>
#include <dds/core/policy/QosPolicyCount.hpp>
#include <dds/core/detail/inttypes.hpp>
#include <dds/core/types.hpp>
#include <dds/core/LengthUnlimited.hpp>
#include <dds/core/detail/Value.hpp>
#include <dds/core/Duration.hpp>
//==============================================================================
// MACROS
// *INDENT-OFF*
#define OMG_DDS_POLICY_TRAITS(POLICY, ID) \
template<> \
class policy_id<POLICY> { \
public: \
static const dds::core::policy::QosPolicyId value = ID; \
}; \
template<> \
class policy_name<POLICY> { \
public: \
static const std::string& name(); \
};
#define OMG_DDS_DEFINE_POLICY_TRAITS(POLICY, NAME) \
const std::string& dds::core::policy::policy_name<POLICY>::name() { \
static std::string name = #NAME; \
return name; \
}
// *INDENT-OFF*
namespace dds {
namespace core {
namespace policy {
//==============================================================================
class UserData : public dds::core::Value<detail::UserData>
{
public:
UserData();
explicit UserData(
const dds::core::ByteSeq& sequence);
UserData(
const uint8_t* value_begin,
const uint8_t* value_end);
UserData(
const UserData& other);
UserData& value(
const dds::core::ByteSeq& sequence);
template<typename OCTET_ITER>
UserData& value(
OCTET_ITER begin,
OCTET_ITER end);
const dds::core::ByteSeq value() const;
const uint8_t* begin() const;
const uint8_t* end() const;
};
//==============================================================================
class GroupData : public dds::core::Value<detail::GroupData>
{
public:
GroupData();
explicit GroupData(
const dds::core::ByteSeq& sequence);
GroupData(
const GroupData& other);
GroupData(
const uint8_t* value_begin,
const uint8_t* value_end);
GroupData& value(
const dds::core::ByteSeq& sequence);
template<typename OCTET_ITER>
GroupData& value(
OCTET_ITER begin,
OCTET_ITER end);
const dds::core::ByteSeq value() const;
const uint8_t* begin() const;
const uint8_t* end() const;
};
//==============================================================================
class TopicData : public dds::core::Value<detail::TopicData>
{
public:
TopicData();
explicit TopicData(
const dds::core::ByteSeq& sequence);
TopicData(
const TopicData& other);
TopicData(
const uint8_t* value_begin,
const uint8_t* value_end);
TopicData& value(
const dds::core::ByteSeq& sequence);
template<typename OCTET_ITER>
TopicData& value(
OCTET_ITER begin,
OCTET_ITER end);
const dds::core::ByteSeq value() const;
const uint8_t* begin() const;
const uint8_t* end() const;
};
//==============================================================================
class EntityFactory : public dds::core::Value<detail::EntityFactory>
{
public:
explicit EntityFactory(
bool autoenable_created_entities = true);
EntityFactory(
const EntityFactory& other);
EntityFactory& autoenable_created_entities(
bool autoenable_created_entities);
bool autoenable_created_entities() const;
static EntityFactory AutoEnable();
static EntityFactory ManuallyEnable();
};
//==============================================================================
class TransportPriority : public dds::core::Value<detail::TransportPriority>
{
public:
explicit TransportPriority(
int32_t priority = 0);
TransportPriority(
const TransportPriority& other);
TransportPriority& value(
int32_t priority);
int32_t value() const;
};
//==============================================================================
class Lifespan : public dds::core::Value<detail::Lifespan>
{
public:
explicit Lifespan(
const dds::core::Duration& duration = dds::core::Duration::infinite());
Lifespan(
const Lifespan& other);
Lifespan& duration(
const dds::core::Duration& duration);
const dds::core::Duration duration() const;
};
//==============================================================================
class Deadline : public dds::core::Value<detail::Deadline>
{
public:
explicit Deadline(
const dds::core::Duration& period = dds::core::Duration::infinite());
Deadline(
const Deadline& other);
Deadline& period(
const dds::core::Duration& period);
const dds::core::Duration period() const;
};
//==============================================================================
class LatencyBudget : public dds::core::Value<detail::LatencyBudget>
{
public:
explicit LatencyBudget(
const dds::core::Duration& duration = dds::core::Duration::zero());
LatencyBudget(
const LatencyBudget& other);
LatencyBudget& duration(
const dds::core::Duration& duration);
const dds::core::Duration duration() const;
};
//==============================================================================
class TimeBasedFilter : public dds::core::Value<detail::TimeBasedFilter>
{
public:
explicit TimeBasedFilter(
const dds::core::Duration& period = dds::core::Duration::zero());
TimeBasedFilter(
const TimeBasedFilter& other);
TimeBasedFilter& minimum_separation(
const dds::core::Duration& period);
const dds::core::Duration minimum_separation() const;
};
//==============================================================================
class Partition : public dds::core::Value<detail::Partition>
{
public:
Partition();
explicit Partition(
uint16_t in_length);
Partition(
const Partition& other);
Partition& name(
const std::string& name);
Partition& names(
dds::core::StringSeq& names);
const dds::core::StringSeq names() const;
void push_back(
const char* name);
void clear();
};
//==============================================================================
//#ifdef OMG_DDS_OWNERSHIP_SUPPORT
class Ownership : public dds::core::Value<detail::Ownership>
{
public:
# if defined (__SUNPRO_CC) && defined(SHARED)
# undef SHARED
# endif // if defined (__SUNPRO_CC) && defined(SHARED)
explicit Ownership(
dds::core::policy::OwnershipKind::Type kind = dds::core::policy::OwnershipKind::SHARED);
Ownership(
const Ownership& other);
Ownership& kind(
dds::core::policy::OwnershipKind::Type kind);
dds::core::policy::OwnershipKind::Type kind() const;
static Ownership Exclusive();
static Ownership Shared();
private:
static eprosima::fastdds::dds::OwnershipQosPolicyKind to_native(
OwnershipKind::Type kind);
static OwnershipKind::Type from_native(
eprosima::fastdds::dds::OwnershipQosPolicyKind kind);
};
//==============================================================================
class OwnershipStrength : public dds::core::Value<detail::OwnershipStrength>
{
public:
explicit OwnershipStrength(
int32_t strength = 0);
OwnershipStrength(
const OwnershipStrength& other);
int32_t value() const;
OwnershipStrength& value(
int32_t strength);
};
//#endif // OMG_DDS_OWNERSHIP_SUPPORT
//==============================================================================
class WriterDataLifecycle : public dds::core::Value<detail::WriterDataLifecycle>
{
public:
explicit WriterDataLifecycle(
bool autodispose_unregistered_instances = true);
WriterDataLifecycle(
const WriterDataLifecycle& other);
bool autodispose_unregistered_instances() const;
WriterDataLifecycle& autodispose_unregistered_instances(
bool autodispose_unregistered_instances);
static WriterDataLifecycle AutoDisposeUnregisteredInstances();
static WriterDataLifecycle ManuallyDisposeUnregisteredInstances();
};
//==============================================================================
class ReaderDataLifecycle : public dds::core::Value<detail::ReaderDataLifecycle>
{
public:
ReaderDataLifecycle(
const dds::core::Duration& autopurge_nowriter_samples_delay = dds::core::Duration::infinite(),
const dds::core::Duration& autopurge_disposed_samples_delay = dds::core::Duration::infinite());
ReaderDataLifecycle(
const ReaderDataLifecycle& other);
const dds::core::Duration autopurge_nowriter_samples_delay() const;
ReaderDataLifecycle& autopurge_nowriter_samples_delay(
const dds::core::Duration& autopurge_nowriter_samples_delay);
const dds::core::Duration autopurge_disposed_samples_delay() const;
ReaderDataLifecycle& autopurge_disposed_samples_delay(
const dds::core::Duration& autopurge_disposed_samples_delay);
static ReaderDataLifecycle NoAutoPurgeDisposedSamples();
static ReaderDataLifecycle AutoPurgeDisposedSamples(
const dds::core::Duration& autopurge_disposed_samples_delay);
};
//==============================================================================
class Durability : public dds::core::Value<detail::Durability>
{
public:
explicit Durability(
dds::core::policy::DurabilityKind::Type kind = dds::core::policy::DurabilityKind::VOLATILE);
Durability(
const Durability& other);
Durability& kind(
dds::core::policy::DurabilityKind::Type kind);
dds::core::policy::DurabilityKind::Type kind() const;
static Durability Volatile();
static Durability TransientLocal();
static Durability Transient();
static Durability Persistent();
private:
static eprosima::fastdds::dds::DurabilityQosPolicyKind to_native(
DurabilityKind::Type kind);
static DurabilityKind::Type from_native(
eprosima::fastdds::dds::DurabilityQosPolicyKind kind);
};
//==============================================================================
class Presentation : public dds::core::Value<detail::Presentation>
{
public:
Presentation(
dds::core::policy::PresentationAccessScopeKind::Type access_scope =
dds::core::policy::PresentationAccessScopeKind::INSTANCE,
bool coherent_access = false,
bool ordered_access = false);
Presentation(
const Presentation& other);
Presentation& access_scope(
dds::core::policy::PresentationAccessScopeKind::Type access_scope);
dds::core::policy::PresentationAccessScopeKind::Type access_scope() const;
Presentation& coherent_access(
bool coherent_access);
bool coherent_access() const;
Presentation& ordered_access(
bool ordered_access);
bool ordered_access() const;
static Presentation GroupAccessScope(
bool coherent_access = false,
bool ordered_access = false);
static Presentation InstanceAccessScope(
bool coherent_access = false,
bool ordered_access = false);
static Presentation TopicAccessScope(
bool coherent_access = false,
bool ordered_access = false);
private:
static eprosima::fastdds::dds::PresentationQosPolicyAccessScopeKind to_native(
PresentationAccessScopeKind::Type kind);
static PresentationAccessScopeKind::Type from_native(
eprosima::fastdds::dds::PresentationQosPolicyAccessScopeKind kind);
};
//==============================================================================
class Reliability : public dds::core::Value<detail::Reliability>
{
public:
Reliability(
dds::core::policy::ReliabilityKind::Type kind = dds::core::policy::ReliabilityKind::BEST_EFFORT,
const dds::core::Duration& max_blocking_time = dds::core::Duration::from_millisecs(100));
Reliability(
const Reliability& other);
Reliability& kind(
dds::core::policy::ReliabilityKind::Type kind);
dds::core::policy::ReliabilityKind::Type kind() const;
Reliability& max_blocking_time(
const dds::core::Duration& max_blocking_time);
const dds::core::Duration max_blocking_time() const;
static OMG_DDS_API Reliability Reliable(
const dds::core::Duration& max_blocking_time = dds::core::Duration::from_millisecs(100));
static Reliability BestEffort(
const dds::core::Duration& max_blocking_time = dds::core::Duration::from_millisecs(100));
private:
static ReliabilityKind::Type from_native(
eprosima::fastdds::dds::ReliabilityQosPolicyKind kind);
static eprosima::fastdds::dds::ReliabilityQosPolicyKind to_native(
ReliabilityKind::Type kind);
};
//==============================================================================
class DestinationOrder : public dds::core::Value<detail::DestinationOrder>
{
public:
explicit DestinationOrder(
dds::core::policy::DestinationOrderKind::Type kind =
dds::core::policy::DestinationOrderKind::BY_RECEPTION_TIMESTAMP);
DestinationOrder(
const DestinationOrder& other);
DestinationOrder& kind(
dds::core::policy::DestinationOrderKind::Type kind);
dds::core::policy::DestinationOrderKind::Type kind() const;
static DestinationOrder SourceTimestamp();
static DestinationOrder ReceptionTimestamp();
private:
static eprosima::fastdds::dds::DestinationOrderQosPolicyKind to_native(
DestinationOrderKind::Type kind);
static DestinationOrderKind::Type from_native(
eprosima::fastdds::dds::DestinationOrderQosPolicyKind kind);
};
//==============================================================================
class History : public dds::core::Value<detail::History>
{
public:
History(
dds::core::policy::HistoryKind::Type kind = dds::core::policy::HistoryKind::KEEP_LAST,
int32_t depth = 1);
History(
const History& other);
dds::core::policy::HistoryKind::Type kind() const;
History& kind(
dds::core::policy::HistoryKind::Type kind);
int32_t depth() const;
History& depth(
int32_t depth);
static History KeepAll();
static History KeepLast(
uint32_t depth);
private:
friend class DurabilityService;
static eprosima::fastdds::dds::HistoryQosPolicyKind to_native(
HistoryKind::Type kind);
static HistoryKind::Type from_native(
eprosima::fastdds::dds::HistoryQosPolicyKind kind);
};
//==============================================================================
class ResourceLimits : public dds::core::Value<detail::ResourceLimits>
{
public:
ResourceLimits(
uint32_t max_samples = dds::core::LENGTH_UNLIMITED,
uint32_t max_instances = dds::core::LENGTH_UNLIMITED,
uint32_t max_samples_per_instance = dds::core::LENGTH_UNLIMITED);
ResourceLimits(
const ResourceLimits& other);
public:
ResourceLimits& max_samples(
int32_t max_samples);
int32_t max_samples() const;
ResourceLimits& max_instances(
int32_t max_instances);
int32_t max_instances() const;
ResourceLimits& max_samples_per_instance(
int32_t max_samples_per_instance);
int32_t max_samples_per_instance() const;
};
//==============================================================================
class Liveliness : public dds::core::Value<detail::Liveliness>
{
public:
Liveliness(
dds::core::policy::LivelinessKind::Type kind = dds::core::policy::LivelinessKind::AUTOMATIC,
const dds::core::Duration& lease_duration = dds::core::Duration::infinite());
Liveliness(
const Liveliness& other);
Liveliness& kind(
dds::core::policy::LivelinessKind::Type kind);
dds::core::policy::LivelinessKind::Type kind() const;
Liveliness& lease_duration(
const dds::core::Duration& lease_duration);
const dds::core::Duration lease_duration() const;
static Liveliness Automatic();
static Liveliness ManualByParticipant(
const dds::core::Duration& lease_duration = dds::core::Duration::infinite());
static Liveliness ManualByTopic(
const dds::core::Duration& lease_duration = dds::core::Duration::infinite());
private:
static eprosima::fastdds::dds::LivelinessQosPolicyKind to_native(
LivelinessKind::Type kind);
static LivelinessKind::Type from_native(
eprosima::fastdds::dds::LivelinessQosPolicyKind kind);
};
//==============================================================================
//#ifdef OMG_DDS_PERSISTENCE_SUPPORT
class DurabilityService : public dds::core::Value<detail::DurabilityService>
{
public:
DurabilityService(
const dds::core::Duration& service_cleanup_delay = dds::core::Duration::zero(),
dds::core::policy::HistoryKind::Type history_kind = dds::core::policy::HistoryKind::KEEP_LAST,
int32_t history_depth = 1,
int32_t max_samples = dds::core::LENGTH_UNLIMITED,
int32_t max_instances = dds::core::LENGTH_UNLIMITED,
int32_t max_samples_per_instance = dds::core::LENGTH_UNLIMITED);
DurabilityService(
const DurabilityService& other);
DurabilityService& service_cleanup_delay(
const dds::core::Duration& service_cleanup_delay);
const dds::core::Duration service_cleanup_delay() const;
DurabilityService& history_kind(
dds::core::policy::HistoryKind::Type history_kind);
dds::core::policy::HistoryKind::Type history_kind() const;
DurabilityService& history_depth(
int32_t history_depth);
int32_t history_depth() const;
DurabilityService& max_samples(
int32_t max_samples);
int32_t max_samples() const;
DurabilityService& max_instances(
int32_t max_instances);
int32_t max_instances() const;
DurabilityService& max_samples_per_instance(
int32_t max_samples_per_instance);
int32_t max_samples_per_instance() const;
};
//#endif //OMG_DDS_PERSISTENCE_SUPPORT
//==============================================================================
//#ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
typedef uint16_t DataRepresentationId;
typedef std::vector<DataRepresentationId> DataRepresentationIdSeq;
class DataRepresentation : public dds::core::Value<detail::DataRepresentation>
{
public:
explicit DataRepresentation(
const dds::core::policy::DataRepresentationIdSeq& value);
DataRepresentation(
const DataRepresentation& other)
: dds::core::Value<detail::DataRepresentation>(other)
{
}
DataRepresentation& value(
const dds::core::policy::DataRepresentationIdSeq& value);
const dds::core::policy::DataRepresentationIdSeq value() const;
dds::core::policy::DataRepresentationIdSeq& value();
private:
static std::vector<eprosima::fastdds::dds::DataRepresentationId> to_native(
const DataRepresentationIdSeq& seq);
};
//#endif //OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
//============================================================================
//#ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
class TypeConsistencyEnforcement : public dds::core::Value<detail::TypeConsistencyEnforcement>
{
public:
explicit TypeConsistencyEnforcement(
dds::core::policy::TypeConsistencyEnforcementKind::Type kind);
TypeConsistencyEnforcement& kind(
dds::core::policy::TypeConsistencyEnforcementKind::Type kind);
dds::core::policy::TypeConsistencyEnforcementKind::Type kind() const;
TypeConsistencyEnforcement& ignore_sequence_bounds(
bool ignore_sequence_bounds);
TypeConsistencyEnforcement& ignore_string_bounds(
bool ignore_string_bounds);
TypeConsistencyEnforcement& ignore_member_names(
bool ignore_member_names);
TypeConsistencyEnforcement& prevent_type_widening(
bool prevent_type_widening);
TypeConsistencyEnforcement& force_type_validation(
bool force_type_validation);
bool ignore_sequence_bounds();
bool ignore_string_bounds();
bool ignore_member_names();
bool prevent_type_widening();
bool force_type_validation();
};
//#endif //OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
//==============================================================================
// Policy Trait Classes
template<typename Policy>
class policy_id;
template<typename Policy>
class policy_name;
#ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
#endif // ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
OMG_DDS_POLICY_TRAITS(UserData, eprosima::fastdds::dds::USERDATA_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Durability, eprosima::fastdds::dds::DURABILITY_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Presentation, eprosima::fastdds::dds::PRESENTATION_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Deadline, eprosima::fastdds::dds::DEADLINE_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(LatencyBudget, eprosima::fastdds::dds::LATENCYBUDGET_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Ownership, eprosima::fastdds::dds::OWNERSHIP_QOS_POLICY_ID)
//#ifdef OMG_DDS_OWNERSHIP_SUPPORT
OMG_DDS_POLICY_TRAITS(OwnershipStrength, eprosima::fastdds::dds::OWNERSHIPSTRENGTH_QOS_POLICY_ID)
//#endif //OMG_DDS_OWNERSHIP_SUPPORT
OMG_DDS_POLICY_TRAITS(Liveliness, eprosima::fastdds::dds::LIVELINESS_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(TimeBasedFilter, eprosima::fastdds::dds::TIMEBASEDFILTER_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Partition, eprosima::fastdds::dds::PARTITION_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Reliability, eprosima::fastdds::dds::RELIABILITY_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(DestinationOrder, eprosima::fastdds::dds::DESTINATIONORDER_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(History, eprosima::fastdds::dds::HISTORY_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(ResourceLimits, eprosima::fastdds::dds::RESOURCELIMITS_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(EntityFactory, eprosima::fastdds::dds::ENTITYFACTORY_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(WriterDataLifecycle, eprosima::fastdds::dds::WRITERDATALIFECYCLE_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(ReaderDataLifecycle, eprosima::fastdds::dds::READERDATALIFECYCLE_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(TopicData, eprosima::fastdds::dds::TOPICDATA_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(GroupData, eprosima::fastdds::dds::GROUPDATA_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(TransportPriority, eprosima::fastdds::dds::TRANSPORTPRIORITY_QOS_POLICY_ID)
OMG_DDS_POLICY_TRAITS(Lifespan, eprosima::fastdds::dds::LIFESPAN_QOS_POLICY_ID)
//#ifdef OMG_DDS_PERSISTENCE_SUPPORT
OMG_DDS_POLICY_TRAITS(DurabilityService, eprosima::fastdds::dds::DURABILITYSERVICE_QOS_POLICY_ID)
//#endif //OMG_DDS_PERSISTENCE_SUPPORT
} //namespace policy
} //namespace core
} //namespace dds
#endif //OMG_DDS_CORE_POLICY_CORE_POLICY_HPP_