File builtin_topic_data.hpp
File List > astutedds > dcps > builtin_topic_data.hpp
Go to the documentation of this file
//
// Copyright (c) 2026, Astute Systems PTY LTD
//
// This file is part of the Astute DDS developed by Astute Systems.
//
// See the commercial LICENSE file in the project root for full license details.
//
// @file builtin_topic_data.hpp
// @brief OMG DDS 1.4 built-in topic data structures (§2.2.2.2.1)
//
// These structures carry the QoS + identification information that DDS
// applications retrieve via the discovery/introspection APIs on
// DomainParticipant, DataWriter and DataReader:
// - ParticipantBuiltinTopicData §2.2.2.2.1 (DCPSParticipant)
// - TopicBuiltinTopicData §2.2.2.2.1 (DCPSTopic)
// - PublicationBuiltinTopicData §2.2.2.2.1 (DCPSPublication)
// - SubscriptionBuiltinTopicData §2.2.2.2.1 (DCPSSubscription)
//
// The structures mirror the OMG IDL closely. Fields not tracked by the
// current AstuteDDS discovery pipeline are exposed with sensible spec-
// default values so callers can still consume them uniformly.
//
#ifndef ASTUTEDDS_DCPS_BUILTIN_TOPIC_DATA_HPP
#define ASTUTEDDS_DCPS_BUILTIN_TOPIC_DATA_HPP
#include <astutedds/dcps/qos.hpp>
#include <astutedds/dcps/dds_psm_types.hpp>
#include <astutedds/rtps/rtps_types.hpp>
#include <cstdint>
#include <string>
#include <vector>
namespace astutedds::dcps
{
// BuiltinTopicKey_t is defined by the DDS 1.4 PSM (§2.3.3) as
// `long[3]` — 12 bytes — and is already declared as
// `std::array<int32_t, 3>` in dds_psm_types.hpp. We pack the 12-byte
// RTPS guidPrefix into these three int32s so a full 128-bit endpoint
// GUID is derivable when combined with topic/entity context.
inline BuiltinTopicKey_t guid_to_builtin_key(const rtps::GUID_t& g) noexcept
{
BuiltinTopicKey_t k{};
// Pack the 12-byte guidPrefix into three big-endian int32_ts so the
// resulting key is stable and endian-portable across processes.
for (int i = 0; i < 3; ++i)
{
const int base = i * 4;
k[i] = (static_cast<int32_t>(g.guidPrefix.value[base]) << 24)
| (static_cast<int32_t>(g.guidPrefix.value[base + 1]) << 16)
| (static_cast<int32_t>(g.guidPrefix.value[base + 2]) << 8)
| (static_cast<int32_t>(g.guidPrefix.value[base + 3]));
}
return k;
}
struct ParticipantBuiltinTopicData
{
BuiltinTopicKey_t key{};
UserDataQosPolicy user_data{};
};
struct TopicBuiltinTopicData
{
BuiltinTopicKey_t key{};
std::string name;
std::string type_name;
DurabilityQosPolicy durability{};
DurabilityServiceQosPolicy durability_service{};
DeadlineQosPolicy deadline{};
LatencyBudgetQosPolicy latency_budget{};
LivelinessQosPolicy liveliness{};
ReliabilityQosPolicy reliability{};
TransportPriorityQosPolicy transport_priority{};
LifespanQosPolicy lifespan{};
DestinationOrderQosPolicy destination_order{};
HistoryQosPolicy history{};
ResourceLimitsQosPolicy resource_limits{};
OwnershipQosPolicy ownership{};
TopicDataQosPolicy topic_data{};
DataRepresentationQosPolicy representation{};
};
struct PublicationBuiltinTopicData
{
BuiltinTopicKey_t key{}; // remote DataWriter GUID
BuiltinTopicKey_t participant_key{}; // owning DomainParticipant GUID
std::string topic_name;
std::string type_name;
DurabilityQosPolicy durability{};
DurabilityServiceQosPolicy durability_service{};
DeadlineQosPolicy deadline{};
LatencyBudgetQosPolicy latency_budget{};
LivelinessQosPolicy liveliness{};
ReliabilityQosPolicy reliability{};
LifespanQosPolicy lifespan{};
UserDataQosPolicy user_data{};
OwnershipQosPolicy ownership{};
OwnershipStrengthQosPolicy ownership_strength{};
DestinationOrderQosPolicy destination_order{};
PresentationQosPolicy presentation{};
PartitionQosPolicy partition{};
TopicDataQosPolicy topic_data{};
GroupDataQosPolicy group_data{};
DataRepresentationQosPolicy representation{};
};
struct SubscriptionBuiltinTopicData
{
BuiltinTopicKey_t key{}; // remote DataReader GUID
BuiltinTopicKey_t participant_key{}; // owning DomainParticipant GUID
std::string topic_name;
std::string type_name;
DurabilityQosPolicy durability{};
DeadlineQosPolicy deadline{};
LatencyBudgetQosPolicy latency_budget{};
LivelinessQosPolicy liveliness{};
ReliabilityQosPolicy reliability{};
OwnershipQosPolicy ownership{};
DestinationOrderQosPolicy destination_order{};
UserDataQosPolicy user_data{};
TimeBasedFilterQosPolicy time_based_filter{};
PresentationQosPolicy presentation{};
PartitionQosPolicy partition{};
TopicDataQosPolicy topic_data{};
GroupDataQosPolicy group_data{};
DataRepresentationQosPolicy representation{};
TypeConsistencyEnforcementQosPolicy type_consistency{};
};
} // namespace astutedds::dcps
#endif // ASTUTEDDS_DCPS_BUILTIN_TOPIC_DATA_HPP