#ifndef OSPL_DDS_DCPS_BUILTINTOPICS_IDL
#define OSPL_DDS_DCPS_BUILTINTOPICS_IDL

/**
 * This file (name) was orginally in ./src/api/dcps/ccpp/idl/.
 * It's been modified to include from another file the base definitions
 * required for this 'built in topics' superset... :
 */

#include "dds_builtinTopics.idl"

module DDS {

    struct Time_t {
#ifdef OSPL_DDS_Y2038_READY
        long long sec;
#else
        long sec;
#endif
        unsigned long nanosec;
    };

    enum SchedulingClassQosPolicyKind {
        SCHEDULE_DEFAULT,
        SCHEDULE_TIMESHARING,
        SCHEDULE_REALTIME
    };

    struct SchedulingClassQosPolicy {
        SchedulingClassQosPolicyKind kind;
    };

    enum SchedulingPriorityQosPolicyKind {
        PRIORITY_RELATIVE,
        PRIORITY_ABSOLUTE
    };

    struct SchedulingPriorityQosPolicy {
        SchedulingPriorityQosPolicyKind kind;
    };

    struct SchedulingQosPolicy {
        SchedulingClassQosPolicy scheduling_class;
        SchedulingPriorityQosPolicy scheduling_priority_kind;
        long scheduling_priority;
    };

    struct ViewKeyQosPolicy {
        boolean use_key_list;
        StringSeq key_list;
    };

    struct DataReaderViewQos {
        ViewKeyQosPolicy view_keys;
    };

    struct DomainParticipantFactoryQos {
        EntityFactoryQosPolicy entity_factory;
    };

    struct DomainParticipantQos {
        UserDataQosPolicy user_data;
        EntityFactoryQosPolicy entity_factory;
        SchedulingQosPolicy watchdog_scheduling;
        SchedulingQosPolicy listener_scheduling;
    };

    struct TopicQos {
        TopicDataQosPolicy topic_data;
        DurabilityQosPolicy durability;
        DurabilityServiceQosPolicy durability_service;
        DeadlineQosPolicy deadline;
        LatencyBudgetQosPolicy latency_budget;
        LivelinessQosPolicy liveliness;
        ReliabilityQosPolicy reliability;
        DestinationOrderQosPolicy destination_order;
        HistoryQosPolicy history;
        ResourceLimitsQosPolicy resource_limits;
        TransportPriorityQosPolicy transport_priority;
        LifespanQosPolicy lifespan;
        OwnershipQosPolicy ownership;
    };

    struct DataWriterQos {
        DurabilityQosPolicy durability;
        DeadlineQosPolicy deadline;
        LatencyBudgetQosPolicy latency_budget;
        LivelinessQosPolicy liveliness;
        ReliabilityQosPolicy reliability;
        DestinationOrderQosPolicy destination_order;
        HistoryQosPolicy history;
        ResourceLimitsQosPolicy resource_limits;
        TransportPriorityQosPolicy transport_priority;
        LifespanQosPolicy lifespan;
        UserDataQosPolicy user_data;
        OwnershipQosPolicy ownership;
        OwnershipStrengthQosPolicy ownership_strength;
        WriterDataLifecycleQosPolicy writer_data_lifecycle;
    };

    struct PublisherQos {
        PresentationQosPolicy presentation;
        PartitionQosPolicy partition;
        GroupDataQosPolicy group_data;
        EntityFactoryQosPolicy entity_factory;
    };

    struct DataReaderQos {
        DurabilityQosPolicy durability;
        DeadlineQosPolicy deadline;
        LatencyBudgetQosPolicy latency_budget;
        LivelinessQosPolicy liveliness;
        ReliabilityQosPolicy reliability;
        DestinationOrderQosPolicy destination_order;
        HistoryQosPolicy history;
        ResourceLimitsQosPolicy resource_limits;
        UserDataQosPolicy user_data;
        OwnershipQosPolicy ownership;
        TimeBasedFilterQosPolicy time_based_filter;
        ReaderDataLifecycleQosPolicy reader_data_lifecycle;
        SubscriptionKeyQosPolicy subscription_keys;
        ReaderLifespanQosPolicy reader_lifespan;
        ShareQosPolicy share;
    };

    struct SubscriberQos {
        PresentationQosPolicy presentation;
        PartitionQosPolicy partition;
        GroupDataQosPolicy group_data;
        EntityFactoryQosPolicy entity_factory;
        ShareQosPolicy share;
    };

};

#endif /* DDS_DCPS_BUILTINTOPICS_IDL */
