ISO/IEC C++ 2003 Language DDS PSM Avatar
  1. OMG Specification

ISO/IEC C++ 2003 Language DDS PSM — All Issues

  • Acronym: DDS-PSM-Cxx
  • Issues Count: 112
  • Description: All Issues
Open Closed All
All Issues

Issues Summary

Key Issue Reported Fixed Disposition Status
DDSPSMC11_-4 DynamicData should be value type, not a reference type DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-96 dds::core::status::StatusMask should allow you to set mutiple Status bits by using the logical OR operation DDS-PSM-Cxx 1.0 open
DDSPSMC11_-95 Listener model breaks API design goal of automatic resource management DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-93 Typo fixes DDS-PSM-Cxx 1.0 open
DDSPSMC11_-94 DynamicType should be a value type, not a reference type DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-3 Missing get_discovered_participants and get_discovered_participant_data functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-86 Instance handle constructor for TopicInstance should be deleted. DDS-PSM-Cxx 1.0 open
DDSPSMC11_-77 Unintuitive way to access extension member functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-69 Condition classes should only be used with WaitSets DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-71 Remove templatization for datatype from TopicDescription DDS-PSM-Cxx 1.0 open
DDSPSMC11_-82 MERGE CONFLICT: Modify Topic inheritance DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-25 Inheritance hierarchy of C++11 PSM conflicts with inheritance hierarchy from DDS PIM DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-73 Use consistent way to refer to vendor specific Delegate DDS-PSM-Cxx 1.0 open
DDSPSMC11_-7 Inconsistent ways to set functor in Condition types DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-79 MERGE CONFLICT: Modify description of additional StatusCondition constructor. DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-70 StatusCondition should have a singleton delegate DDS-PSM-Cxx 1.0 open
DDSPSMC11_-75 MAP_TYPE enumeration constant should be redefined due to clash with POSIX macro DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-1 API correction required to dds/sub/find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-72 Transform AnyDataWriter and AnyDataReader from wrappers into parent classes. DDS-PSM-Cxx 1.0 open
DDSPSMC11_-74 Define relationship between Query and QueryCondition DDS-PSM-Cxx 1.0 open
DDSPSMC11_-66 Make use of C++11 final/override/delete DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-68 Small correctes to the specification DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-67 Normative references not complete and out of date DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-64 Missing TBuiltinTopicTypes DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-63 Provide extension constructors for standard classes DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-65 EntityQos is overly general DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-62 Names of the generated headers DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-61 Default Constructors DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-53 API corrections required to src/hpp/dds/core/Exception.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-51 API corrections required to src/hpp/dds/core/TQosProvider.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-52 API corrections required to src/hpp/dds/core/TInstanceHandle.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-50 Documentation comments corrections required to src/hpp/dds/domain/discovery.hpp & find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-60 API correction required to src/hpp/dds/dds.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-55 API correction required to src/hpp/dds/core/status/TStatus.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-59 API correction required to src/hpp/dds/core/status/State.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-57 API correction required to src/hpp/dds/core/policy/TCorePolicy.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-56 API correction required to src/hpp/dds/sub/AnyDataReaderListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-54 Missing file dds/pub/detail/find.hpp referenced in src/hpp/dds/pub/find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-47 Documentation comments corrections to src/hpp/dds/pub/TPublisher.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-48 API correction required to src/hpp/dds/sub/LoanedSamples.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-58 DataReader.hpp, ContentFilteredTopic.hpp, Topic.hpp, TopicDescription.hpp o not compile with MS Visual Studio DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-49 API correction required to src/hpp/dds/core/cond/detail/GuardCondition.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-28 Inconsistent use of Type/type - fix compilation DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-31 API correction required to src/hpp/dds/core/Optional.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-43 Example vendor code is incorrect DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-29 API correction required to src/hpp/dds/core/cond/TWaitSet.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-45 API correction required to src/hpp/dds/core/cond/StatusCondition.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-33 Code in src/hpp/dds/core/array.hpp does not compile DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-41 API correction required to src/hpp/dds/pub/AnyDataWriter.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-34 API correction required to src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-32 API correction required to src/hpp/dds/domain/TDomainParticipant.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-42 src/hpp/dds/domain/TDomainId.hpp should be removed from the API DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-40 API correction required to src/hpp/dds/core/types.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-30 API correction required to src/hpp/dds/core/ref_traits.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-39 API correction required to src/hpp/dds/core/detail/conformance.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-44 API correction required to src/hpp/dds/pub/qos/detail/DataWriterQos.hpp & PublisherQos.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-36 Documentation comments corrections to src/hpp/dds/pub/discovery.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-35 API correction required to src/hpp/dds/pub/TSuspendedPublication.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-46 API correction required to src/hpp/dds/sub/TDataReader.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-37 API correction required to src/hpp/dds/sub/SubscriberListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-38 API correction required to src/hpp/dds/sub/DataReaderListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-27 API correction required to src/hpp/dds/sub/SharedSamples.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-23 API needs a standardized way of downcasting API entities DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-26 Name clash between Topic discovery functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-24 dds::topic::TBuiltinTopicKey should be completely customizable. DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-19 dds/core/cond/TCondition.hpp should have virtual methods DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-22 Ownership label SHARED is already defined as a macro in some SUN compilers DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-21 Compilation error in dds/core/policy/PolicyKind.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-20 dds/core/array.hpp is licensed under LGPL DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-12 Reference should provide comparison operators DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-15 Missing constants/functions to obtain the built-in topic names DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-14 API corrections required to dds/core/Duration.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-17 API correction required to dds/core/Time.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-8 API corrections required to dds/sub/AnyDataReader.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-13 API does not provide functionality from the DomainParticipantFactory DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-9 Correction required to dds/sub/ddssub.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-11 API correction required to dds/topic/TBuiltinTopic.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-16 Selector missing next_instance() function DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-18 dds/pub/find.hpp is incomplete DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-10 Declaring Reference::operator new() private causes undesired side effects DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-5 Generic InstanceHandle constructor should be explicit DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-2 Method SampleInfo::valid() should be renamed SampleInfo::valid_data() DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-6 API corrections required to ManipulatorSelector and related functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC-24 Inconsistencies related to use of const& DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMCF2-2 ReaderState: the class name does not reflect the intent of the class DDS-PSM-Cxx 1.0b2 DDS-PSM-Cxx 1.0 Resolved closed
DDSPSMCF2-1 The Status API, e.g. sample_rejected_status, deadline_missed_status, etc., are missing from the DataReader DDS-PSM-Cxx 1.0b2 DDS-PSM-Cxx 1.0 Resolved closed
DDSPSMCF2-3 Useless ReaderQuery on DataReader read/take DDS-PSM-Cxx 1.0b2 DDS-PSM-Cxx 1.0 Resolved closed
DDSPSMCF2-4 Assignment Rule for Container Types DDS-PSM-Cxx 1.0b2 DDS-PSM-Cxx 1.0 Resolved closed
DDSPSMC-11 Exception safety guarantees for the DataReader API DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-10 Portable exception-safety guarantees for DDS C++ PSM DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-3 Union/array/bounded types lacking DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-2 factory methods on the "parents" (e.g. create_topic, create_data_writer, etc.) DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-5 Compilation errors on Visual Studio 2008/2010 DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-4 Dividing a scalar in Duration and Time classes DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-1 XML-Based QoS Policy Settings (DDS-PSM-Cxx/DDS-PSM-Java) DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-7 Fixing bugs and improving usability of the InstanceHandle class DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-9 Use traits for topic/datareader/datawriter DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-8 Inheritance via dominance warning on Visual Studio DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-6 Improving usability of Reference class DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-12 General Exception Safety Considerations DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-23 read/take consistency for loaned and non-loaned samples DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-20 The tdds namespace should be merged into the dds namespace DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-22 Getter/Setter for member arrays DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-21 Expected use of AnyDataReader::get and its implication on AnyDataReader's template constructor DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-14 Supporting automatic conversion from value types to delegate types DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-13 Improving usability of EntityQoS API DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-17 RadarTrack uses anonymous types DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-16 Typos in Value.hpp, Exception.hpp DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-19 IDL mapping for non-trivial struct fields DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-18 optional support DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMC-15 Make parameter passing same for native/type parameters DDS-PSM-Cxx 1.0b1 DDS-PSM-Cxx 1.0b2 Resolved closed
DDSPSMCF2-5 Update specification for final DDS-XTypes DDS-PSM-Cxx 1.0b2 DDS-PSM-Cxx 1.0 Resolved closed

Issues Descriptions

DynamicData should be value type, not a reference type

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The class DynamicData inherits from Reference, but this class shouldn't behave differently from any other topic-type T, which (including the built-in types) are always value types.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 22:18 GMT
  • Updated: Wed, 29 Mar 2023 18:29 GMT

dds::core::status::StatusMask should allow you to set mutiple Status bits by using the logical OR operation

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current dds::core::status::StatusMask inherits from a bitset, but it does not allow you to use the logical OR ( operator | () ) to set multiple bits in the mask.

    Even though StatusMask inherits from std::bitset (which does allow you to use the | operator() ), any attempt to use it on the StatusMask (as in
    StatusMask | StatusMask) results in a compilation error because the resulting type is a bitset, not a StatusMask.

    This seems a bit weird, since using the logical OR seems the natural way in which people set bits in a mask, and it is a common pattern that is used extensively in its parent, the bitset.

    The current StatusMask does allow you to use the streaming operator << for the same purpose instead, but this does not feel like a natural way of doing it.

    Last but not least, some implementations are already supporting the | operator where others don't, so we might as well want to standardize is to keep application code portable across vendors.

  • Reported: DDS-PSM-Cxx 1.0 — Mon, 20 Dec 2021 21:02 GMT
  • Updated: Mon, 20 Dec 2021 21:02 GMT

Listener model breaks API design goal of automatic resource management

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The way the C++ PSM modeled listeners has proven problematic. While the whole language binding is designed to provide automatic resource management, listeners break that model. Listeners are assigned to a DDS Entity as a raw pointer and “retain” the Entity.

    Because an Entity with a listener is retained, the user must manually reset the listener to allow its automatic destruction or explicitly close the entity. This defeats the purpose of automatic resource management, forcing users to write exception-safe code or risk “leaking” the resource.

    RTI proposes a change in how listeners are set. In summary:

    1) Listeners are set as std::shared_ptr's. All APIs change to receive a std::shared_ptr<Listener> instead of a Listener*
    2) Listeners no longer retain the entity. (It's the other way around; the Entity keeps a reference to its listener, which ensures the listener is not deleted). 

    Note that an entity can be explicitly retained with the member function retain(), which allows preserving the old behavior quite easily.

    The changes, affecting all dds::core::Entity-derived types, are the following:
     

    Previous API (usable but deprecated) New API
    Constructor with Listener* argument Constructor with std::shared_ptr<Listener>
    Listener setter: listener(Listener*, StatusMask) Listener setter: set_listener(std::shared_ptr<Listener>, StatusMask)
     (not available) Listener setter with no mask, added for convenience: set_listener(std::shared_ptr<Listener>) // Defaults to all() when the listener is not null or none() when it’s null
    Listener getter: Listener * listener() const  Listener getter: std::shared_ptr<Listener> get_listener() const

    Notice the name change—the overloaded listener is now get_listener/set_listener. A new overload wasn’t possible because the getter would only differ on the return type.

    Implementations that do not support C++11 can offer the old listener model.
     
    Example:

    // Previous API:
    MyListener *my_listener = new MyListener();
    reader.listener(my_listener, StatusMask::all());
    // ...
    reader.listener(NULL, StatusMask::none()); // user must reset the listener to destroy entity
    delete my_listener;
    
    // New API:
    auto my_listener = std::make_shared<MyListener>();
    reader.set_listener(my_listener);// No manual resource management required anymore
    
    // Or simply:
    reader.set_listener(std::make_shared<MyListener>());
     

     

  • Reported: DDS-PSM-Cxx 1.0b2 — Sun, 14 Jun 2020 19:45 GMT
  • Updated: Mon, 15 Jun 2020 23:32 GMT

Typo fixes

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    p3 section 5 table 1st row right column

    [...] Given two programming language type T and Q,

    -> types

    p5 7.1 1st para 3rd line

    [...] language today universally sup- ported by C++ compilers.

    -> supported

    p5 7.2 1st para 3rd sentence

    The specification defines
    type constructors, i.e., parameterized class, that delegate

    -> classes

    p6 7.2 cont'd

    Under no circumstances a vendor shall change [...]. The only action performed by
    type constructor is to delegate their implementation

    -> constructors

    p6 7.3 2nd bullet

    * Loand-based read/take operation shall be exception safe.

    -> Loan based

    p7 7.4.1 MappingClasses (title)
    -> Mapping Classes

    p10 7.4.5 3rd table

    [left column] PIM Native Return Type

    -> PIM Return Type

    [right column] One of the following, depending on wether

    -> whether

    p12 Table 7-2 Namespace 2nd column 2nd row

    pomain

    -> domain

    p13 7.5.2 end of 1st sentence and 2nd sentence

    (note that for immutable value-types the only form of change is to create
    a new value- type).
    The DDS-PSM-Cxx models all DDS PIM classes [...] as value- types.

    -> value-type, value-types (remove space after hyphen)

    p14 top of page sentence preceding 7.5.5

    The full set of status classes is includes in the mandatory standard headers [...]

    -> included

    p16 7.6.2.1 1st para 3rd sentence

    As an
    example, from the URI ” the QosProvider would deduce [...]

    Please clarify - the single quotation mark is not a valid URI.
    I suspect the following might be intended:
    {{As an example, from the URI "file://" the QosProvider would deduce [...]}

    p18 7.8 1st sentence

    The topic packaged defines the classes related to [...]

    -> package

    p18 7.8 6th para

    If the topic is to be created with a QoS different from the default, than the code [...]

    -> from the default then

  • Reported: DDS-PSM-Cxx 1.0 — Sun, 9 Feb 2020 19:39 GMT
  • Updated: Fri, 12 Jun 2020 06:31 GMT

DynamicType should be a value type, not a reference type

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    A type description is conceptually a value type, not a reference type. A type doesn't have a special identity, like for example a DomainParticipant. A type description can be copied, compared for equality, passed by value, etc. That doesn't preclude applications from using a shared_ptr<DynamicType> if they want to.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 28 Apr 2020 21:26 GMT
  • Updated: Tue, 28 Apr 2020 21:26 GMT

Missing get_discovered_participants and get_discovered_participant_data functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The C++ PSM doesn't provide the following DDS-standard functions:

    • DomainParticipant::get_discovered_participants
    • DomainParticipant::get_discovered_participant_data.

    Proposed resolution
    To be consistent with PSM functions like matched_publications and matched_publication_data, we should add the following functions in the dds::domain namespace:

    dds/domain/discovery.hpp
    dds::core::InstanceHandleSeq discovered_participants(
        DomainParticipant participant);
    
    template <typename FwdIterator>
    FwdIterator discovered_participants(
        DomainParticipant participant,
        FwdIterator begin,
        FwdIterator end);
    
    dds::topic::ParticipantBuiltinTopicData discovered_participant_data(
        DomainParticipant participant,
        const dds::core::InstanceHandle& handle);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 14 Jul 2016 18:21 GMT
  • Updated: Sat, 15 Jun 2019 01:16 GMT

Instance handle constructor for TopicInstance should be deleted.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The dds/topic/TopicInstance object is used as a holder for both a sample, and the instance handle to its corresponding instance. There are operations on the DataWriter that accept a TopicInstance as their parameter.

    However, it is possible to instantiate a TopicInstance without sample, by using a constructor that only accepts an instance handle. It is unclear what the behavior of the write operations should be in case they receive a TopicInstance without corresponding sample.

    I therefore propose to either delete the constructor that accepts only an instance handle, and remove the key_value() function that accepts TopicInstance as input parameter (it is already overloaded by another key_value() that accepts an InstanceHandle) or otherwise define an exception when passing a TopicInstance without sample to a write() operation.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 5 Jun 2019 12:01 GMT
  • Updated: Wed, 5 Jun 2019 12:01 GMT

Unintuitive way to access extension member functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Invoking an extension function in a standard type requires using an overloaded arrow operator. For example:

    // Standard class (in dds namespace)
    dds::domain::DomainParticipant participant(MY_DOMAIN_ID);
    // Call a standard method
    participant.assert_liveliness();
    // Call an extension method:
    participant->vendor_specific_method(...);
    

    The use of the arrow operator is counterintuitive to most people (the variable is not a pointer) and didn't allow an IDE to show the available extensions if the regular dot operator was used.

    We propose adding an "extensions()" function to dds::core::Reference and dds::core::Value that can be used as follows:

    // Call an extension method:
    participant.extensions().register_durable_subscription(...);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 10 May 2019 18:32 GMT
  • Updated: Wed, 15 May 2019 16:12 GMT

Condition classes should only be used with WaitSets

  • Legacy Issue Number: 17063
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DataReader API provides methods to read samples with a condition. This condition can be either a ReadCondition or a QueryCondition, and in this case the samples returned are either filtered by the status (ReadCondition) or the content+status (QueryCondition).
    The ReadCondition is completely in overlap with the instance/status/view states and its use is really irrelevant when in combination with the DataReader. On the other end the only aspect of the QueryCondition that really matters to a DataReader are the query expression and parameters.

    By looking carefully at the API, it seems apparent that the ReadCondition and the QueryCondition really make sense only when used with a WaitSet. On the other end, their use in conjunction of a DataReader is a stretch and breaks the semantics of the "Condition". On principle a condition is used to "wait" for a particular status to be true, yet the DataReader "read" are – rightfully – always non-blocking. In addition, the API opens up for gratuitous runtime errors as I could write silly code as follows (in C++):

    auto rc = reader.create_readcondition();
    reader2.read(..., rc,...);

    This although silly is allowed by the API and on a proper DDS implementation should raise an exception.

    The same could happen with a QueryCondition!

    Resolution
    ---------------
    Limit the use of Read/QueryCondition to waitsets and put in place a more robust mechanism to do status and content filtering on a data-reader read.

    An example of what could be done is provided below, where I assume that the DataStatus is the former ReaderState:

    reader
    .filter_status(DataStatus::new_data())
    .filter_content(Query("x < 100 AND y < 100"))
    .read();

    Equally, one could write (again legal C++ below with little magic under-cover) :

    reader
    .instance(handle)
    .filter_status(DataStatus::new_data())
    .filter_content(Query("x < 100 AND y < 100"))
    .read();

    Notice that this code, not only is very declarative and thus shows very clearly the intent of the programmer, but in addition does not allow for the silly mistakes shown above. Further more, it really highlights he role of the Sample/Instance/View status as a "filter" on the status of data.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Updated: Wed, 15 May 2019 14:16 GMT

Remove templatization for datatype from TopicDescription

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the current DDS-PSM-Cxx spec files, the TopicDescription is not only templatized for its Delegate, but also for its datatype. However, none of the functions exposed by the TopicDescription has a dependency on this datatype.

    I therefore suggest to remove the template parameter for the datatype from the TopicDescription.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:01 GMT
  • Updated: Wed, 15 May 2019 14:13 GMT

MERGE CONFLICT: Modify Topic inheritance


Inheritance hierarchy of C++11 PSM conflicts with inheritance hierarchy from DDS PIM

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the DDS PIM the Topic inherits from two other classes: TopicDescription and Entity. However, in the C++11 PSM, this double inheritance relationship has been removed by making TopicDescription inherit from Entity, and making Topic only inherit from TopicDescription.

    Although this seems to simplify the inheritance hierarchy, it has a couple of unwanted side-effects, since all TopicDescriptions are now Entities. That means that ContentFilteredTopic and MultiTopic now offer all the operations that an Entity normally offers:

    • They have a StatusCondition
      • However, ContentFilteredTopic and MultiTopic have no statuses that are applicable to this StatusCondition.
    • They offer an operation to extract their instance handle
      • However, ContentFilteredTopic and MultiTopic are not discoverable and therefore do not have an instance handle.
    • Conceptually, Entities are supposed to offer Qos and Listeners, which ContentFilteredTopic and MultiTopic do not do.

    We want to correct for this by removing the inheritance relationship between TopicDescription and Entity and reinstating the double inheritance for Topic on both TopicDescription and Entity.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:27 GMT
  • Updated: Wed, 15 May 2019 14:12 GMT

Use consistent way to refer to vendor specific Delegate

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current DDS-PSM-Cxx spec often refers to the vendor specific Delegate in the following way:

    • A typedef refers Entity<T> to detail::Entity<T>, which is in a vendor specific file.
    • In detail::Entity, another typedef then substitutes the vendor specific Delegate for the template parameter.

    However, for some unknown reason this pattern is not followed for the DataWriter and QueryCondition classes.

    I propose to apply the same pattern to those classes as well.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:22 GMT
  • Updated: Wed, 15 May 2019 12:50 GMT

Inconsistent ways to set functor in Condition types

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Conditions have an optional functor handler that WaitSet::dispatch() calls when they're active. But the ways to set this handler vary depending on the Condition type:

    Condition type How you set the handler
    GuardCondition handler(Functor&) setter (therefore mutable)
    ReadCondition In constructor (therefore immutable)
    QueryCondition No way to set it (it seems a oversight; should be same as ReadCondition)
    StatusCondition No way to set it (not clear if it's on purpose or an oversight)

    Note that making the handler mutable or immutable has consequences in the thread-safety requirements of the implementations.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:35 GMT
  • Updated: Wed, 15 May 2019 12:24 GMT


StatusCondition should have a singleton delegate

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Because the DDS-PSM-C++ abandoned the factory pattern, you now have to instantiate your own StatusCondition object, and pass the Entity to which it applies as parameter to its constructor.

    However, DDS spec states that each Entity can have only one StatusCondition, and the get_statuscondition operation is responsible for that. Since with the DDS-PSM-Cxx API I can repeatedly create a StatusCondition for the same Entity, I can potentially break the Singleton pattern.

    I would suggest that we state explicitly that when you instantiate multiple StatusCondition objects to the same Entity, they all end up pointing to the same Delegate.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 12:51 GMT
  • Updated: Wed, 15 May 2019 12:22 GMT

MAP_TYPE enumeration constant should be redefined due to clash with POSIX macro

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    On some Linux systems the following enumeration:

    dds::core::xtypes::TypeKind::MAP_TYPE

    clashes with the macro MAP_TYPE defined in <sys/mman.h>

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 24 Apr 2019 14:07 GMT
  • Updated: Fri, 26 Apr 2019 14:52 GMT

API correction required to dds/sub/find.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The return type of dds::sub::builtin_subscriber() is a const reference, forcing to keep the builtin subscriber as a member in the DomainParticipant.

    We cannot make the subscriber a member of the DomainParticipant because this would cause a shared_ptr loop. This also unnecessarily restricts the implementation of this function.

    Proposed resolution:

    - const dds::sub::Subscriber&
    - builtin_subscriber(const dds::domain::DomainParticipant& dp);
    + dds::sub::Subscriber 
    + builtin_subscriber(const dds::domain::DomainParticipant& dp);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:12 GMT
  • Updated: Wed, 24 Apr 2019 16:18 GMT

Transform AnyDataWriter and AnyDataReader from wrappers into parent classes.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the current DDS-PSM-Cxx spec, the AnyDataWriter and AnyDataReader classes are untyped wrappers around the typed Writers and Readers that only expose their untyped operations.

    I suggest to make the AnyDataWriter and AnyDataReader the parent classes for the typed Writers and Readers. That makes it much easier to navigate from for example an untyped AnyDataWriter to typed DataWriter and vice versa.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:06 GMT
  • Updated: Wed, 24 Apr 2019 13:56 GMT

Define relationship between Query and QueryCondition

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current DDS-PSM-Cxx spec distinguishes between Queries and QueryConditions. The former can be used in a Selector, the latter can be used in a WaitSet. However, from the end-user perspective it would make sense that if I want my WaitSet to trigger on incoming data matching my QueryCondition, that I then want to consume the data matching my Query in some way.

    According to the current specification I would need to instantiate both a Query and a QueryCondition based on the same expression. If I then want to modify my Query parameters, I would need to do so consistently for both my Query and my QueryCondition.

    I propose to make QueryCondition extend from Query, and make Query extend from Reference instead of Value. That allows us to store a reference to our internal query state (e.g. to the parse-tree) into the Query object instead of having to redo the whole thing over and over again.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:31 GMT
  • Updated: Wed, 24 Apr 2019 13:31 GMT

Make use of C++11 final/override/delete

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In case we have a C+11 or newer compiler we the C+ PSM should also make use of final/override/delete.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 26 Jun 2017 06:50 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Small correctes to the specification

  • Legacy Issue Number: 19586
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Some small fixes to the spec

    Section 7.1, change "sup- ported" to "supported"

    Section 7.4.3, C+11 talks about strong typed enums, so change "C+11 enumeration
    classes" to "C++11 strongly typed enums"

    Section 7.5.1.2, why let the user initialize a null reference by assigning dds::core::null, wouldn't be be easier to say "The trivial constructor for reference types will initialize it to a null reference"

    Section 8.2, constructor of RadarTrack doesn't use optional for argument z

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Normative references not complete and out of date

  • Legacy Issue Number: 19585
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The normative references lack the listing of the IDL2C++11 specification which is referred in several sections of the spec, this should refer to at least the V1.1 version of this spec. For DDS4CCM the reference should be updated to the V1.1 of the specification

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Missing TBuiltinTopicTypes

  • Legacy Issue Number: 19801
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The built-in topics are defined in dds/core/BuiltinTopicTypes.hpp as:
    #include <dds/core/TBuiltinTopicTypes.hpp>

    namespace dds { namespace core

    { typedef TBytesTopicType<detail::BytesTopicType> BytesTopicType; typedef TStringTopicType<detail::StringTopicType> StringTopicType; typedef TKeyedBytesTopicType<detail::KeyedBytesTopicType> KeyedBytesTopicType; typedef TKeyedStringTopicType<detail::KeyedStringTopicType> KeyedStringTopicType; }

    }

    But dds/core/TBuiltinTopicTypes.hpp and the types TBytesTopicType, TStringTopicType, etc. don't exist.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Jun 2015 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Provide extension constructors for standard classes

  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The specification does not seem to provide any "standard" way to pass vendor-specific arguments to constructors of standard classes. As constructor is a special function, the trick of overloading operator -> (used for vendor-specific member functions) does not work.

    Take DataState for example: We need to pass more that just InstanceState, ViewState, and SampleState.

    Proposed Resolution: (1) Add overly-generic template constructors that accepts any number of generic arguments. For instance,

    template <class Arg1, class Arg2, class Arg3>
    Class(Arg1 &, Arg2 &, Arg3 &);

    Some classes like DataState may be extended with operator >> template. This style is used in DataReaderQos and DataWriterQos.

    RTI is not thrilled about this option. However, it may solve similar problems in all the classes that need vendor-specific constructors.

    Alternatively, (2) Allow vendor-specific constructors and member-functions in standard classes. The standard simply needs to say that it is allowed.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 4 Jan 2016 20:20 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

EntityQos is overly general

  • Legacy Issue Number: 18445
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    EntityQos template is a rather overly general way of setting and getting policies. Member template functions generate the code depending upon the policy type. If you pass a wrong type, it eventually ends up showing a link-time error as opposed to a compile-time error. For instance, there is a link-time error in the code below because DataWriterQos has no presentation policy.

    dds::pub::qos::DataWriterQos dwqos;
    dds::core::policy::Deadline d;
    dds::core::policy::Presentation p;
    dwqos >> p; /// Linker error here. No compile-time error
    dwqos >> d; /// Fine!

    Additionally, the dot operator provides no help for syntax completion because the policy function is a member template. Consequently, the end-user might be tempted to use the -> operator, which does provide syntax completion depending upon the implementation of the delegate. As a result, for standard policies -> will be used, which is unintended.

    Proposed Resolution:

    1. Add template classes DataReaderQos, DataWriterQoS, PublisherQos, SubscriberQos, DomainParticipantQos in the dds namespace.

    2. Support non-template member functions for setting and getting respective policies. For instance. dwqos.deadline() and dwqos.deadline(d) should be supported.

    3. Define operator << and operator >> outside the QoS class and overload for the respective policies.

    4. The templated verions of policy getters/setters can still be supported. However, I seriously doubt their usefulness. If we decide to keep them, at least I would like to turn the linker error into compiler error using a meta-programming technique described here:

    http://cpptruths.googlecode.com/svn/trunk/cpp/entityqos.cpp

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 12 Feb 2013 05:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Names of the generated headers

  • Legacy Issue Number: 19753
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    To ensure application portability, the names of the generated header files should be standard. For example, for Foo.idl, generate Foo.h. The spec does not specify a standard naming scheme.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 27 Apr 2015 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Default Constructors

  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Reference types do not have default constructors, forcing the use of nullptr to construct null references. This runs counter to modern C++ conventions; for example, consider C++11 smart pointers. Forcing explicit initialization also prevents the sensible use of compiler-generated default constructors for objects containing DDS objects as members.

    To get the behavior I want, I've to define constructor and destructor for a struct for no purpose other than to initialize a member instance handle to null, or just make it a std::unique_ptr<dds::core::InstanceHandle> and circumvent the API.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Jan 2016 19:02 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/Exception.hpp

  • Legacy Issue Number: 18612
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    API requires warning suppression with MS Visual Studio.
    MS symbol export macros missing.
    Missing constructor.
    Incorrect comments.
    Some in-line definition remaining in declaration only file.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/Exception.hpp b/src/hpp/dds/core/Exception.hpp
    index 84c7c28..22b05ab 100644
    --- a/src/hpp/dds/core/Exception.hpp
    +++ b/src/hpp/dds/core/Exception.hpp
    @@ -23,194 +23,261 @@
     #include <string>
     #include <dds/core/macros.hpp>
    
    -namespace dds { namespace core {
    +#if defined _MSC_VER
    +#   pragma warning (push)
    +#   pragma warning (disable:4275) // non dll-interface class 'std::foo_error' used as base for dll-interface class 'dds::core::BarError'
    +#endif
    
    -  /**
    -   * This files contains the exceptions corresponding to DDS errors.
    -   * In the DDS-PSM-Cxx in place of DDS errors the associated expcetion
    -   * should be raised. Please section 7.5.5 of the DDS-PSM-C++ specification.
    -   */
    +namespace dds
    +{
    +namespace core
    +{
    
    -  class Exception
    -  {
    -  protected:
    +/**
    + *
    + * DDS PIM Return Code            | DDS-PSM-CXX Exception Class   | std C++ Parent Exception
    + * -------------------            | ---------------------------   | ------------------------
    + * RETCODE_OK                     | Normal return; no exception   | N/A
    + * RETCODE_NO_DATA                | Normal return with informational state attached    | N/A
    + * RETCODE_ERROR                  | Error                         | std::logic_error
    + * RETCODE_BAD_PARAMETER          | InvalidArgumentError          | std::invalid_argument
    + * RETCODE_TIMEOUT                | TimeoutError                  | std::runtime_error
    + * RETCODE_UNSUPPORTED            | UnsupportedError              | std::logic_error
    + * RETCODE_ALREADY_DELETED        | AlreadyClosedError            | std::logic_error
    + * RETCODE_ILLEGAL_OPERATION      | IllegalOperationError         | std::logic_error
    + * RETCODE_NOT_ENABLED            | NotEnabledError               | std::logic_error
    + * RETCODE_PRECONDITION_NOT_MET   | PreconditionNotMetError       | std::logic_error
    + * RETCODE_IMMUTABLE_POLICY       | ImmutablePolicyError          | std::logic_error
    + * RETCODE_INCONSISTENT_POLICY    | InconsistentPolicyError       | std::logic_error
    + * RETCODE_OUT_OF_RESOURCES       | OutOfResourcesError           | std::runtime_error
    + *
    + * The DDS-PSM-Cxx maps error codes to C++ exceptions defined in the dds::core namespace and
    + * inheriting from a base Exception class and the appropriate standard C++ exception.
    + * Table 7.3 lists the mapping between error codes as defined in the DDS PIM and C++ exceptions
    + * as used in this specification. Exceptions have value semantics; this means that they must
    + * always have deep copy semantics.
    + * The full list of exceptions is included in the file dds/core/Exceptions.hpp.
    + *
    + */
    +
    +class OMG_DDS_API Exception
    +{
    +protected:
         Exception();
    -  public:
    -    virtual ~Exception() throw ();
    +public:
    +    virtual ~Exception() throw();
    
    -  public:
    -    virtual const char* what() const throw () = 0;
    -  };
    +public:
    +    virtual const char* what() const throw() = 0;
    +};
    
    -  class Error : public Exception, public std::exception
    -  {
    -  public:
    -    Error();
    +/**
    + *  Generic, unspecified error.
    + */
    +class OMG_DDS_API Error : public Exception, public std::logic_error
    +{
    +public:
    +    explicit Error(const std::string& msg);
         Error(const Error& src);
    -  public:
    -    virtual ~Error() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~Error() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class AlreadyClosedError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * The object target of this operation has already been closed
    + */
    +class OMG_DDS_API AlreadyClosedError : public Exception, public std::logic_error
    +{
    +public:
         explicit AlreadyClosedError(const std::string& msg);
         AlreadyClosedError(const AlreadyClosedError& src);
    -    virtual ~AlreadyClosedError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~AlreadyClosedError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class IllegalOperationError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * An operation was invoked on an inappropriate object or at an inappropriate time
    + * (as determined by policies set by the specification or the Service implementation).
    + * There is no precondition that could be changed to make the operation succeed.
    + */
    +class OMG_DDS_API IllegalOperationError : public Exception, public std::logic_error
    +{
    +public:
         explicit IllegalOperationError(const std::string& msg);
         IllegalOperationError(const IllegalOperationError& src);
    -    virtual ~IllegalOperationError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~IllegalOperationError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class ImmutablePolicyError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application attempted to modify an immutable QosPolicy
    + */
    +class OMG_DDS_API ImmutablePolicyError : public Exception, public std::logic_error
    +{
    +public:
         explicit ImmutablePolicyError(const std::string& msg);
         ImmutablePolicyError(const ImmutablePolicyError& src);
    -    virtual ~ImmutablePolicyError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~ImmutablePolicyError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InconsistentPolicyError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application specified a set of policies that are not
    + * consistent with each other
    + */
    +class OMG_DDS_API InconsistentPolicyError : public Exception, public std::logic_error
    +{
    +public:
         explicit InconsistentPolicyError(const std::string& msg);
         InconsistentPolicyError(const InconsistentPolicyError& src);
    -    virtual ~InconsistentPolicyError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~InconsistentPolicyError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InvalidArgumentError : public Exception, public std::invalid_argument
    -  {
    -  public:
    +/**
    + * Application is passing an invalid argument
    + */
    +class OMG_DDS_API InvalidArgumentError : public Exception, public std::invalid_argument
    +{
    +public:
         explicit InvalidArgumentError(const std::string& msg);
         InvalidArgumentError(const InvalidArgumentError& src);
    -    virtual ~InvalidArgumentError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~InvalidArgumentError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class NotEnabledError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Operation invoked on an Entity that is not yet enabled
    + */
    +class OMG_DDS_API NotEnabledError : public Exception, public std::logic_error
    +{
    +public:
         explicit NotEnabledError(const std::string& msg);
         NotEnabledError(const NotEnabledError& src);
    -    virtual ~NotEnabledError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~NotEnabledError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class OutOfResourcesError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Service ran out of the resources needed to complete the
    + * operation
    + */
    +class OMG_DDS_API OutOfResourcesError : public Exception, public std::runtime_error
    +{
    +public:
         explicit OutOfResourcesError(const std::string& msg);
         OutOfResourcesError(const OutOfResourcesError& src);
    -    virtual ~OutOfResourcesError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    -
    +    virtual ~OutOfResourcesError() throw();
    
    -  class PreconditionNotMetError : public Exception, public std::logic_error
    -  {
    -  public:
    -    explicit PreconditionNotMetError(const std::string& msg) : std::logic_error(msg) { }
    -    PreconditionNotMetError(const PreconditionNotMetError& src) : std::logic_error(src.what()) {}
    -    virtual ~PreconditionNotMetError() throw () { }
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  public:
    -    virtual const char* what() const throw () {
    -      return this->std::logic_error::what();
    -    }
    
    -  };
    -
    -
    -  class TimeoutError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * A pre-condition for the operation was not met
    + */
    +class OMG_DDS_API PreconditionNotMetError : public Exception, public std::logic_error
    +{
    +public:
    +    explicit PreconditionNotMetError(const std::string& msg);
    +    PreconditionNotMetError(const PreconditionNotMetError& src);
    +    virtual ~PreconditionNotMetError() throw();
    +
    +public:
    +    virtual const char* what() const throw();
    +};
    +
    +/**
    + * The operation timed out
    + */
    +class OMG_DDS_API TimeoutError : public Exception, public std::runtime_error
    +{
    +public:
         explicit TimeoutError(const std::string& msg);
         TimeoutError(const TimeoutError& src);
    -    virtual ~TimeoutError() throw ();
    +    virtual ~TimeoutError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -
    -  class UnsupportedError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Unsupported operation. Can only be returned by operations that are optional.
    + */
    +class OMG_DDS_API UnsupportedError : public Exception, public std::logic_error
    +{
    +public:
         explicit UnsupportedError(const std::string& msg);
         UnsupportedError(const UnsupportedError& src);
    -    virtual ~UnsupportedError() throw ();
    +    virtual ~UnsupportedError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InvalidDowncastError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Application has attempted to cast incompatible types
    + */
    +class OMG_DDS_API InvalidDowncastError : public Exception, public std::runtime_error
    +{
    +public:
         explicit InvalidDowncastError(const std::string& msg);
         InvalidDowncastError(const InvalidDowncastError& src);
         virtual ~InvalidDowncastError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class NullReferenceError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Application returned a null reference
    + */
    +class OMG_DDS_API NullReferenceError : public Exception, public std::runtime_error
    +{
    +public:
         explicit NullReferenceError(const std::string& msg);
         NullReferenceError(const NullReferenceError& src);
         virtual ~NullReferenceError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -
    -  class InvalidDataError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application returned invalid data
    + */
    +class OMG_DDS_API InvalidDataError : public Exception, public std::logic_error
    +{
    +public:
         explicit InvalidDataError(const std::string& msg);
         InvalidDataError(const InvalidDataError& src);
    -    virtual ~InvalidDataError() throw ();
    +    virtual ~InvalidDataError() throw();
    +
    +public:
    +    virtual const char* what() const throw();
    +};
    +
    +}
    +}
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +#if defined _MSC_VER
    +#   pragma warning (pop)
    +#endif
    
    -}}
    
     #endif /* OMG_DDS_CORE_EXCEPTION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/TQosProvider.hpp

  • Legacy Issue Number: 18616
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Incorrect comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/TQosProvider.hpp
    b/src/hpp/dds/core/TQosProvider.hpp
    index ef2a3e3..9cdda28 100644
    --- a/src/hpp/dds/core/TQosProvider.hpp
    +++ b/src/hpp/dds/core/TQosProvider.hpp
    @@ -47,8 +47,8 @@ public:
        * For instance, the following code:
        * <pre><code>
              QosProvider xml_file_provider("file:///somewhere/on/disk/qos-config.xml");
    -         QosProvider json_file_provider(""file:///somewhere/on/disk/json-config.json");
    -         QosProvider json_http_provider(""http:///somewhere.org/here/json-config.json");
    +         QosProvider json_file_provider("file:///somewhere/on/disk/json-config.json");
    +         QosProvider json_http_provider("http:///somewhere.org/here/json-config.json");
           </code></pre>
    
    
        * The URI determines the how the Qos configuration is fetched and the
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/TInstanceHandle.hpp

  • Legacy Issue Number: 18615
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Incorrect comment.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/TInstanceHandle.hpp
    b/src/hpp/dds/core/TInstanceHandle.hpp
    index c4c4014..b93975d 100644
    --- a/src/hpp/dds/core/TInstanceHandle.hpp
    +++ b/src/hpp/dds/core/TInstanceHandle.hpp
    @@ -44,7 +44,7 @@ public:
       TInstanceHandle(const TInstanceHandle& other);
    
    
       /**
    -   * Distructor
    +   * Destructor
        */
       ~TInstanceHandle();
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections required to src/hpp/dds/domain/discovery.hpp & find.hpp

  • Legacy Issue Number: 18635
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Comment correction required.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/discovery.hpp b/src/hpp/dds/domain/discovery.hpp
    index e43d28d..97943ec 100644
    --- a/src/hpp/dds/domain/discovery.hpp
    +++ b/src/hpp/dds/domain/discovery.hpp
    @@ -26,7 +26,7 @@
     namespace dds { namespace domain {
    
    
       /**
    -   * This function allows to express the will to ignore the entity
    +   * This function allows one to express the will to ignore the entity
        * represented by the given <code>InstanceHandle</code> for the specific
        * <code>DomainParticipant</code>.
        *
    @@ -40,7 +40,7 @@ namespace dds { namespace domain {
       void ignore(const dds::domain::DomainParticipant& dp, const dds::core::InstanceHandle& handle);
    
    
       /**
    -   * This function allows to express the will to ignore a series of entities
    +   * This function allows one to express the will to ignore a series of entities
        * whose instance handles are made available via the provided iterators.
        *
        * @param dp      the <code>DomainParticipant</code> for which the remote
    diff --git a/src/hpp/dds/domain/find.hpp b/src/hpp/dds/domain/find.hpp
    index 112d67c..2043f04 100644
    --- a/src/hpp/dds/domain/find.hpp
    +++ b/src/hpp/dds/domain/find.hpp
    @@ -27,7 +27,7 @@ namespace dds { namespace domain {
       /**
        * This operation retrieves a previously created <code>DomainParticipant</code>
        * belonging to specified domain_id. If no such DomainParticipant
    -   * exists, the operation will return a <it>nil</it> value.
    +   * exists, the operation will return a @a nil value.
        *
        * @param id the domain id
        */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/dds.hpp

  • Legacy Issue Number: 18632
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    File has left over mistaken vendor include.

    Could probably do with a nice comment, whilst we're here.

    Suggested resolution:

    diff --git a/src/hpp/dds/dds.hpp b/src/hpp/dds/dds.hpp
    index 9de7249..b6bf026 100644
    --- a/src/hpp/dds/dds.hpp
    +++ b/src/hpp/dds/dds.hpp
    @@ -1,6 +1,28 @@
    +/* Copyright 2010, Object Management Group, Inc.
    + * Copyright 2010, PrismTech, Corp.
    + * Copyright 2010, Real-Time Innovations, Inc.
    + * 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_DDS_HPP__
     #define __OMG_DDS_DDS_HPP__
    
    
    +/**
    + * @file
    + * This utility header includes the headers of all the DDS DCPS modules.
    + */
    +
     #include <dds/core/ddscore.hpp>
     #include <dds/domain/ddsdomain.hpp>
     #include <dds/topic/ddstopic.hpp>
    @@ -9,7 +14,5 @@
     #include <dds/pub/ddspub.hpp>
    
    
     #include <dds/core/QosProvider.hpp>
    -#include <org/opensplice/topic/TopicTraits.hpp>
    -
    
    
     #endif /* __OMG_DDS_DDS_HPP__ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/status/TStatus.hpp

  • Legacy Issue Number: 18630
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to fix compilation.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/status/TStatus.hpp b/src/hpp/dds/core/status/TStatus.hpp
    index 638e188..6d6122f 100644
    --- a/src/hpp/dds/core/status/TStatus.hpp
    +++ b/src/hpp/dds/core/status/TStatus.hpp
    @@ -138,7 +138,7 @@ namespace dds { namespace core { namespace status {
       template <typename D>
       class TPublicationMatchedStatus : public dds::core::Value<D> {
       public:
    -    TPublicationMatchedStatus() : dds::core::Value<D>();
    +    TPublicationMatchedStatus();
    
    
       public:
         int32_t total_count() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/status/State.hpp

  • Legacy Issue Number: 18628
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code (and comments) need removing for consistency and to fix compilation.

    Header include missing.

    Required inline operation missing.

    Windows export macros required.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/status/State.hpp b/src/hpp/dds/core/status/State.hpp
    index 8ac4475..ab8d1cf 100644
    --- a/src/hpp/dds/core/status/State.hpp
    +++ b/src/hpp/dds/core/status/State.hpp
    @@ -21,19 +21,20 @@
    
    
     #include <bitset>
     #include <dds/core/macros.hpp>
    +#include <dds/core/types.hpp>
    
    
    
     namespace dds { namespace core { namespace status {
    
    
    
    -  class SampleRejectedState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
    +  class OMG_DDS_API SampleRejectedState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
       public:
         typedef std::bitset<OMG_DDS_STATE_BIT_COUNT> MaskType;
    
    
       public:
    -    SampleRejectedState() : MaskType() { }
    -    SampleRejectedState(const SampleRejectedState& src) : MaskType(static_cast<int>(src.to_ulong())) { }
    -    SampleRejectedState(const MaskType& src) : MaskType(static_cast<int>(src.to_ulong())) { }
    +    SampleRejectedState();
    +    SampleRejectedState(const SampleRejectedState& src);
    +    SampleRejectedState(const MaskType& src);
    
    
       public:
         inline static const SampleRejectedState not_rejected() {
    @@ -50,29 +51,29 @@ namespace dds { namespace core { namespace status {
         }
    
    
       private:
    -    // @TODO
    -    // -- This Ctor should be fixed as currently there is this
    -    // -- cast only to avoid an error when compiling with the  MS vC++ compiler
    -    SampleRejectedState(uint32_t s)
    -    : MaskType((uint64_t)s)
    -    { }
    -
    +    SampleRejectedState(uint32_t s);
       };
    
    
    
       // StatusMask create_status_mask(uint64_t);
    
    
    -  class StatusMask : public std::bitset<OMG_DDS_STATUS_COUNT> {
    +  class OMG_DDS_API StatusMask : public std::bitset<OMG_DDS_STATUS_COUNT> {
       public:
         typedef std::bitset<OMG_DDS_STATUS_COUNT> MaskType;
    
    
       public:
    -    StatusMask() { }
    -    explicit StatusMask(uint64_t mask) : std::bitset<OMG_DDS_STATUS_COUNT>(mask) { }
    -    StatusMask(const StatusMask& other) : MaskType(static_cast<int>(other.to_ulong())) { }
    -    ~StatusMask() { }
    +    StatusMask();
    +    explicit StatusMask(uint32_t mask);
    +    StatusMask(const StatusMask& other);
    +    ~StatusMask();
    
    
       public:
    +    inline StatusMask& operator << (const dds::core::status::StatusMask& mask)
    +    {
    +        *this |= mask;
    +        return *this;
    +    }
    +
         inline static const StatusMask all() {
           return StatusMask(0x7fe7u);
         }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/policy/TCorePolicy.hpp

  • Legacy Issue Number: 18627
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes and corrections to API documentation comments required.

    Incorrect default reliability duration (infinite). Should be 100 milliseconds per table in section "7.1.3 Supported QoS" (formal 07-01-01)

    Suggested resolution:

    diff --git a/src/hpp/dds/core/policy/TCorePolicy.hpp b/src/hpp/dds/core/policy/TCorePolicy.hpp
    index 382e521..1313b32 100644
    --- a/src/hpp/dds/core/policy/TCorePolicy.hpp
    +++ b/src/hpp/dds/core/policy/TCorePolicy.hpp
    @@ -47,7 +47,7 @@ namespace dds { namespace core { namespace policy {
         /**
          * Create a <code>UserData</code> instance with an empty user data.
          */
    -    TUserData() : dds::core::Value<D>();
    +    TUserData();
    
    
         /**
          * Create a <code>UserData</code> instance.
    @@ -56,7 +56,7 @@ namespace dds { namespace core { namespace policy {
          */
         explicit TUserData(const dds::core::ByteSeq& seq);
    
    
    -    //@TODO Implement
    +    /** @todo Implement this */
         TUserData(const uint8_t* value_begin, const uint8_t* value_end);
    
    
         TUserData(const TUserData& other);
    @@ -102,16 +102,16 @@ namespace dds { namespace core { namespace policy {
       class TGroupData : public dds::core::Value<D> {
       public:
         /**
    -     * Create a <code>GroupData<code> instance.
    +     * Create a <code>GroupData</code> instance.
          */
    -    TGroupData() : dds::core::Value<D>();
    +    TGroupData();
    
    
         /**
    -     * Create a <code>GroupData<code> instance.
    +     * Create a <code>GroupData</code> instance.
          *
          * @param seq the group data value
          */
    -    explicit TGroupData(const dds::core::ByteSeq& seq) : dds::core::Value<D>(seq);
    +    explicit TGroupData(const dds::core::ByteSeq& seq);
    
    
         TGroupData(const TGroupData& other);
    
    
    @@ -160,7 +160,7 @@ namespace dds { namespace core { namespace policy {
       template <typename D>
       class TTopicData : public dds::core::Value<D> {
       public:
    -    TTopicData() : dds::core::Value<D>();
    +    TTopicData();
    
    
         explicit TTopicData(const dds::core::ByteSeq& seq);
    
    
    @@ -219,7 +219,7 @@ namespace dds { namespace core { namespace policy {
       template <typename D>
       class TEntityFactory : public dds::core::Value<D> {
       public:
    -    TEntityFactory() :dds::core::Value<D>(true);
    +    TEntityFactory();
         explicit TEntityFactory(bool the_auto_enable);
         TEntityFactory(const TEntityFactory& other);
    
    
    @@ -255,7 +255,7 @@ namespace dds { namespace core { namespace policy {
       public:
         explicit TTransportPriority(int32_t prio);
    
    
    -    TTransportPriority() : dds::core::Value<D>(0);
    +    TTransportPriority();
    
    
         TTransportPriority(const TTransportPriority& other);
    
    
    @@ -554,7 +554,7 @@ namespace dds { namespace core { namespace policy {
         const dds::core::Duration max_blocking_time() const;
    
    
       public:
    -    static TReliability Reliable(const dds::core::Duration& d = dds::core::Duration::infinite());
    +    static TReliability Reliable(const dds::core::Duration& d = dds::core::Duration(0, 100000000));
         static TReliability BestEffort();
       };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/AnyDataReaderListener.hpp

  • Legacy Issue Number: 18643
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to be consistent with other No-op listener declarations.

    Missing headers required to fix compilation.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/AnyDataReaderListener.hpp b/src/hpp/dds/sub/AnyDataReaderListener.hpp
    index 4646bfd..aabd71a 100644
    --- a/src/hpp/dds/sub/AnyDataReaderListener.hpp
    +++ b/src/hpp/dds/sub/AnyDataReaderListener.hpp
    @@ -19,6 +19,8 @@
      * limitations under the License.
      */
    
    
    +#include <dds/core/refmacros.hpp>
    +#include <dds/core/status/Status.hpp>
    
    
     namespace dds { namespace sub {
    
    
    @@ -59,37 +61,36 @@ namespace dds { namespace sub {
             const dds::core::status::SampleLostStatus& status) = 0;
       };
    
    
    -
       class NoOpAnyDataReaderListener : public virtual AnyDataReaderListener {
       public:
    -    virtual ~NoOpAnyDataReaderListener() { }
    +    virtual ~NoOpAnyDataReaderListener();
    
    
       public:
         virtual void on_requested_deadline_missed(
             AnyDataReader& the_reader,
    -        const dds::core::status::RequestedDeadlineMissedStatus& status) { }
    +        const dds::core::status::RequestedDeadlineMissedStatus& status);
    
    
         virtual void on_requested_incompatible_qos(
             AnyDataReader& the_reader,
    -        const dds::core::status::RequestedIncompatibleQosStatus& status) { }
    +        const dds::core::status::RequestedIncompatibleQosStatus& status);
    
    
         virtual void on_sample_rejected(
             AnyDataReader& the_reader,
    -        const dds::core::status::SampleRejectedStatus& status) { }
    +        const dds::core::status::SampleRejectedStatus& status);
    
    
         virtual void on_liveliness_changed(
             AnyDataReader& the_reader,
    -        const dds::core::status::LivelinessChangedStatus& status) { }
    +        const dds::core::status::LivelinessChangedStatus& status);
    
    
    -    virtual void on_data_available(AnyDataReader& the_reader) { }
    +    virtual void on_data_available(AnyDataReader& the_reader);
    
    
         virtual void on_subscription_matched(
             AnyDataReader& the_reader,
    -        const dds::core::status::SubscriptionMatchedStatus& status) { }
    +        const dds::core::status::SubscriptionMatchedStatus& status);
    
    
         virtual void on_sample_lost(
             AnyDataReader& the_reader,
    -        const dds::core::status::SampleLostStatus& status) { }
    +        const dds::core::status::SampleLostStatus& status);
       };
     } }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Missing file dds/pub/detail/find.hpp referenced in src/hpp/dds/pub/find.hpp

  • Legacy Issue Number: 18641
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Missing include - fails to compile.

    Suggested resolution:

    Add vendor example file and remove below comment.

    diff --git a/src/hpp/dds/pub/find.hpp b/src/hpp/dds/pub/find.hpp
    index 6c10f59..6a50fad 100644
    --- a/src/hpp/dds/pub/find.hpp
    +++ b/src/hpp/dds/pub/find.hpp
    @@ -21,9 +21,9 @@
    
    
     #include <string>
    
    
    +/** @todo This does not compile - no such example file (in spec). Need to add one */
     #include <dds/pub/detail/find.hpp>
    
    
    -
     namespace dds { namespace pub {
    
    
       /**
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections to src/hpp/dds/pub/TPublisher.hpp

  • Legacy Issue Number: 18638
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Corrections to documentation comments required.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/TPublisher.hpp b/src/hpp/dds/pub/TPublisher.hpp
    index 3534a29..d872370 100644
    --- a/src/hpp/dds/pub/TPublisher.hpp
    +++ b/src/hpp/dds/pub/TPublisher.hpp
    @@ -97,16 +97,16 @@ public:
        *
        * @param pqos the new publisher QoS
        */
    -  TPublisher& operator <<(const dds::pub::qos::PublisherQos& the_qos);
    +  TPublisher& operator <<(const dds::pub::qos::PublisherQos& pqos);
    
    
       /**
        * Get the publisher qos policies.
        */
    -  TPublisher& operator >> (dds::pub::qos::PublisherQos& the_qos);
    +  TPublisher& operator >> (dds::pub::qos::PublisherQos& qos);
    
    
       /**
    -   * This operation sets a default value of the <code>DataWriterQos<\code>
    -   * which will be used for newly created <core>DataWriter<code>entities
    +   * This operation sets a default value of the <code>DataWriterQos</code>
    +   * which will be used for newly created <code>DataWriter</code>entities
        * for which no <code>DataWriterQos</code> is provided in the constructor.
        * This operation will check that the resulting policies are self consistent;
        * if they are not, the operation will have no effect and raise an
    @@ -115,7 +115,7 @@ public:
       TPublisher& default_writer_qos(const dds::pub::qos::DataWriterQos& dwqos);
    
    
       /**
    -   * This operation retrieves the default value of the <code>DataWriterQos<\code>,
    +   * This operation retrieves the default value of the <code>DataWriterQos</code>,
        * that is, the QoS policies which will be used for newly created DataWriter
        * that don't provide a QoS parameter in the constructor.
        */
    @@ -155,7 +155,7 @@ public:
       //==========================================================================
    
    
       /**
    -   * Return the <code>DomainParticipant<code> that owns this Publisher.
    +   * Return the <code>DomainParticipant</code> that owns this Publisher.
        */
       const dds::domain::DomainParticipant& participant() const;
    
    @@ -143,19 +159,21 @@ public:
         * This operation blocks the calling thread until either all data written
         * by the reliable DataWriter entities is acknowledged by all matched
         * reliable DataReader entities, or else the duration specified by the
    -     * max_wait parameter elapses, whichever happens first.
    +     * timeout parameter elapses, whichever happens first.
         * A normal return indicates that all the samples written have been
    -     * acknowledged by all reliable matched data readers; A TimeoutError
    -     * indicates that max_wait elapsed before all the data was acknowledged.
    +     * acknowledged by all reliable matched data readers. A TimeoutError
    +     * indicates that timeout elapsed before all the data was acknowledged.
    +     *
    +     * @param timeout the time out duration
         */
        void wait_for_acknowledgments(const dds::core::Duration& timeout);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/LoanedSamples.hpp

  • Legacy Issue Number: 18646
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes required to code.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/LoanedSamples.hpp b/src/hpp/dds/sub/LoanedSamples.hpp
    index 633f065..1456e57 100644
    — a/src/hpp/dds/sub/LoanedSamples.hpp
    +++ b/src/hpp/dds/sub/LoanedSamples.hpp
    @@ -9,7 +9,7 @@
    namespace dds {
    namespace sub {
    template <typename T,

    • template <typename Q> class DELEGATE = detail::LoanedSamples>
      + template <typename Q> class DELEGATE = dds::sub::detail::LoanedSamples>
      class LoanedSamples;

    // Used by C++11 compilers to allow for using LoanedSamples
    @@ -67,8 +67,8 @@ private:
    namespace dds {
    namespace sub

    { template <typename T, template <typename Q> class D> - LoanedSamples<T, D<T> > - move(LoanedSamples<T, D<T> >& a); + LoanedSamples<T, D > + move(LoanedSamples<T, D >& a); }

    }
    #endif /* OMG_DDS_SUB_TLOANED_SAMPLES_HPP_ */

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

DataReader.hpp, ContentFilteredTopic.hpp, Topic.hpp, TopicDescription.hpp o not compile with MS Visual Studio

  • Legacy Issue Number: 18644
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    In src/hpp/dds/sub/DataReader.hpp; src/hpp/dds/topic/ContentFilteredTopic.hpp; src/hpp/dds/topic/Topic.hpp; src/hpp/dds/topic/TopicDescription.hpp

    ... the template header file includes need to be moved as MSVC appears to ignore any attempt to 're-declare' a template class with a 'new' default argument and only considers defaults on the first time of asking.

    Without the move the compiler emits an error in each case like something like e.g.:

    dds/topic/detail/AnyTopicDescription.hpp(48): error C2976: 'dds::topic::TopicDescription' : too few template arguments
    dds/topic/TTopicDescription.hpp(41) : see declaration of 'dds::topic::TopicDescription'

    Suggested resolutions:

    diff --git a/src/hpp/dds/sub/DataReader.hpp b/src/hpp/dds/sub/DataReader.hpp
    index b38ddaa..b476779 100644
    --- a/src/hpp/dds/sub/DataReader.hpp
    +++ b/src/hpp/dds/sub/DataReader.hpp
    @@ -1,10 +1,8 @@
     #ifndef OMG_DDS_SUB_DATA_READER_HPP_
     #define OMG_DDS_SUB_DATA_READER_HPP_
    
    
    -#include <dds/sub/TDataReader.hpp>
     #include <dds/sub/detail/DataReader.hpp>
    
    
    -
     namespace dds {
       namespace sub {
         template <typename T,
    @@ -15,6 +13,7 @@ namespace dds {
       }
     }
    
    
    +#include <dds/sub/TDataReader.hpp>
    
    
     // = Manipulators
     namespace dds {
    
    
    diff --git a/src/hpp/dds/topic/ContentFilteredTopic.hpp b/src/hpp/dds/topic/ContentFilteredTopic.hpp
    index 057a2f6..cbc5cfc 100644
    --- a/src/hpp/dds/topic/ContentFilteredTopic.hpp
    +++ b/src/hpp/dds/topic/ContentFilteredTopic.hpp
    @@ -20,11 +20,12 @@
      */
    
    
     #include <dds/topic/detail/ContentFilteredTopic.hpp>
    -#include <dds/topic/TContentFilteredTopic.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T, template <typename Q> class DELEGATE = dds::topic::detail::ContentFilteredTopic>
       class ContentFilteredTopic;
     } }
    
    
    +#include <dds/topic/TContentFilteredTopic.hpp>
    +
     #endif /* OMG_DDS_TOPIC_CONTENT_FILTERED_TOPIC_HPP_ */
    
    
    diff --git a/src/hpp/dds/topic/Topic.hpp b/src/hpp/dds/topic/Topic.hpp
    index cd69316..5545f76 100644
    --- a/src/hpp/dds/topic/Topic.hpp
    +++ b/src/hpp/dds/topic/Topic.hpp
    @@ -2,11 +2,12 @@
     #define OMG_DDS_TOPIC_TOPIC_HPP_
    
    
     #include <dds/topic/detail/Topic.hpp>
    -#include <dds/topic/TTopic.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T, template <typename Q> class DELEGATE = dds::topic::detail::Topic>
       class Topic;
     } }
    
    
    +#include <dds/topic/TTopic.hpp>
    +
     #endif /* OMG_DDS_TOPIC_TOPIC_HPP_ */
    
    
    diff --git a/src/hpp/dds/topic/TopicDescription.hpp b/src/hpp/dds/topic/TopicDescription.hpp
    index 47e2dd1..6e908b0 100644
    --- a/src/hpp/dds/topic/TopicDescription.hpp
    +++ b/src/hpp/dds/topic/TopicDescription.hpp
    @@ -20,7 +20,6 @@
      */
    
    
     #include <dds/topic/detail/TopicDescription.hpp>
    -#include <dds/topic/TTopicDescription.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T,
    @@ -28,5 +27,6 @@ namespace dds { namespace topic {
       class TopicDescription;
     } }
    
    
    +#include <dds/topic/TTopicDescription.hpp>
    
    
     #endif /* OMG_DDS_TOPIC_TOPIC_DESCRIPTION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/detail/GuardCondition.hpp

  • Legacy Issue Number: 18620
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/detail/GuardCondition.hpp b/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    index a9143fa..fdc8b98 100644
    — a/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    +++ b/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    @@ -20,13 +20,13 @@
    */

    #include <dds/core/cond/TGuardCondition.hpp>
    -#include <foo/bar/core/cond/GuardConditionImpl.hpp>
    +#include <foo/bar/core/cond/GuardCondition.hpp>

    namespace dds {
    namespace core {
    namespace cond {
    namespace detail

    { - typedef dds::core::cond::TGuardCondition<foo::bar::core::cond::GuardConditionl> GuardCondition; + typedef dds::core::cond::TGuardCondition<foo::bar::core::cond::GuardCondition> GuardCondition; }

    }
    }

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Inconsistent use of Type/type - fix compilation

  • Legacy Issue Number: 18614
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code in src/hpp/dds/core/SafeEnumeration.hpp and
    src/hpp/dds/core/policy/PolicyKind.hpp does not compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/SafeEnumeration.hpp
    b/src/hpp/dds/core/SafeEnumeration.hpp
    index 3f7ca67..0d443c2 100644
    --- a/src/hpp/dds/core/SafeEnumeration.hpp
    +++ b/src/hpp/dds/core/SafeEnumeration.hpp
    @@ -1,29 +1,76 @@
    +/* Copyright 2010, Object Management Group, Inc.
    +* Copyright 2010, PrismTech, Corp.
    +* Copyright 2010, Real-Time Innovations, Inc.
    +* 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_SAFEENUMERATION_HPP_
     #define OMG_DDS_CORE_SAFEENUMERATION_HPP_
    
    namespace dds {
    namespace core {
    +/**
    + * safe_enum provides a wrapper for enumerated types in a typesafe
    + * manner.
    + * safe_enums allow specification of the underlying type,
    + * do not implictly convert to integers, and resolve scoping issues.
    + */
    -    template<typename def, typename inner = typename def::type>
    +    template<typename def, typename inner = typename def::Type>
         class safe_enum : public def
         {
    -      typedef typename def::type type;
    +      typedef typename def::Type type;
           inner val;
    
         public:
    diff --git a/src/hpp/dds/core/policy/PolicyKind.hpp
    b/src/hpp/dds/core/policy/PolicyKind.hpp
    index 6928742..9537d78 100644
    --- a/src/hpp/dds/core/policy/PolicyKind.hpp
    +++ b/src/hpp/dds/core/policy/PolicyKind.hpp
    @@ -25,7 +25,7 @@
     namespace dds { namespace core { namespace policy {
    
    
       struct OwnershipKind_def {
    -    enum type {
    +    enum Type {
           SHARED
    
    
     #ifdef  OMG_DDS_OWNERSHIP_SUPPORT
    @@ -37,7 +37,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<OwnershipKind_def> OwnershipKind;
    
    
       struct DurabilityKind_def {
    -    enum type {
    +    enum Type {
           VOLATILE,
           TRANSIENT_LOCAL
    
    
    @@ -46,8 +46,7 @@ namespace dds { namespace core { namespace policy {
           TRANSIENT,
           PERSISTENT
     #endif  // #ifdef  OMG_DDS_PERSISTENCE_SUPPORT
    -    };
    -  };
    +    }; };
       typedef dds::core::safe_enum<DurabilityKind_def> DurabilityKind;
    
    
       struct PresentationAccessScopeKind_def  {
    @@ -60,11 +59,11 @@ namespace dds { namespace core { namespace policy {
           GROUP
     #endif  // OMG_DDS_OBJECT_MODEL_SUPPORT
         }; };
    -
    +  typedef dds::core::safe_enum<PresentationAccessScopeKind_def>
    PresentationAccessScopeKind;
    
    
    
       struct ReliabilityKind_def {
    -    enum type {
    +    enum Type {
           BEST_EFFORT,
           RELIABLE
         };
    @@ -73,7 +72,7 @@ namespace dds { namespace core { namespace policy {
    
    
    
       struct DestinationOrderKind_def {
    -    enum type {
    +    enum Type {
           BY_RECEPTION_TIMESTAMP,
           BY_SOURCE_TIMESTAMP
         }; };
    @@ -81,7 +80,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<DestinationOrderKind_def>
    DestinationOrderKind;
    
    
       struct HistoryKind_def {
    -    enum type {
    +    enum Type {
           KEEP_LAST,
           KEEP_ALL
         };};
    @@ -89,7 +88,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<HistoryKind_def> HistoryKind;
    
    
       struct LivelinessKind_def {
    -    enum type {
    +    enum Type {
           AUTOMATIC,
           MANUAL_BY_PARTICIPANT,
           MANUAL_BY_TOPIC
    @@ -97,7 +96,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<LivelinessKind_def> LivelinessKind;
    
    
       struct TypeConsistencyEnforcementKind_def {
    -    enum type {
    +    enum Type {
           EXACT_TYPE_TYPE_CONSISTENCY,
           EXACT_NAME_TYPE_CONSISTENCY,
           DECLARED_TYPE_CONSISTENCY,
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/Optional.hpp

  • Legacy Issue Number: 18613
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Escape '@' annotation in comment

    Suggested resolution:

    diff --git a/src/hpp/dds/core/Optional.hpp b/src/hpp/dds/core/Optional.hpp
    index 5e563d0..7f1a1fc 100644
    --- a/src/hpp/dds/core/Optional.hpp
    +++ b/src/hpp/dds/core/Optional.hpp
    @@ -24,7 +24,7 @@ namespace dds { namespace core {
    
    
       /**
        * The optional class is used to wrap attributes annotated with the
    -   * @optional annotation. This class provides a simple and safe way of
    +   * \@optional annotation. This class provides a simple and safe way of
        * accessing, setting and resetting the stored attribute.
        */
       template <typename T, template <typename Q> class DELEGATE>
       class optional : public dds::core::Value< DELEGATE<T> >
       {
       public:
         optional(const T& t);
    
       public:
         /**
          * Returns true only if the attribute is set.
          */
         bool is_set() const;
    
         /**
    -     * Reset the attribute
    +     * Reset the attribute.
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Example vendor code is incorrect

  • Legacy Issue Number: 18625
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/detail/StatusCondition.hpp b/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    index 400c6c8..06f0198 100644
    --- a/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    +++ b/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    @@ -27,7 +27,7 @@ namespace dds {
       namespace core {
         namespace cond {
           namespace detail {
    -        typedef dds::core::cond::StatusCondition<foo::bar::core::cond::StatusCondition> StatusCondition;
    +        typedef dds::core::cond::TStatusCondition<foo::bar::core::cond::StatusCondition> StatusCondition;
           }
         }
       }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/TWaitSet.hpp

  • Legacy Issue Number: 18619
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code does not compile.
    Comments incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/TWaitSet.hpp b/src/hpp/dds/core/cond/TWaitSet.hpp
    index dfb05a2..a7fa3ee 100644
    --- a/src/hpp/dds/core/cond/TWaitSet.hpp
    +++ b/src/hpp/dds/core/cond/TWaitSet.hpp
    @@ -22,7 +22,9 @@
     #include <vector>
    
    
     #include <dds/core/types.hpp>
    +#include <dds/core/Duration.hpp>
     #include <dds/core/cond/Condition.hpp>
    +#include <dds/core/cond/WaitSet.hpp>
    
    
     namespace dds {
       namespace core {
    
    @@ -39,209 +44,207 @@ namespace dds {
      * the attached Condition objects has a trigger_value of TRUE or else
      * until the timeout expires.
      * A WaitSet is not necessarily associated with a single DomainParticipant
    - * and could be used to wait on Condition objects associated with different
    + * and could be used to wait for Condition objects associated with different
      * DomainParticipant objects.
    
     public:
    -  OMG_DDS_REF_TYPE(TWaitSet, dds::core::Reference, DELEGATE)
    + OMG_DDS_REF_TYPE_PUBLIC(TWaitSet, dds::core::Reference, DELEGATE)
    
     public:
    -  /**
    -   * Creates a new waitset.
    -   */
    -  TWaitSet();
    -
       ~TWaitSet();
    
    
     public:
     public:
      /**
       * This operation allows an application thread to wait for the occurrence
    -   * of certain conditions. If none of the conditions attached to the
    +  * of certain Conditions. If none of the Conditions attached to the
       * WaitSet have a trigger_value of TRUE, the wait operation will block
       * suspending the calling thread.
         *
         * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
         * the attached Condition objects is true, wait will continue and the
         * returned ConditionSeq will be empty.
         *
         * It is not allowed for more than one application thread to be waiting
         * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
         *
         * The result of the wait operation is the list of all the attached
    -     * conditions that have a trigger_value of TRUE (i.e., the conditions
    +     * Conditions that have a trigger_value of TRUE (i.e., the Conditions
         * that unblocked the wait).
         *
         * @param timeout the maximum amount of time for which the wait
    -     * should block while waiting for a condition to be triggered.
    +     * should block while waiting for a Condition to be triggered.
         *
    -     * @raise PreconditionNotMetException when multiple thread try to invoke
    -     *        the method concurrently.
    +     * @throws PreconditionNotMetException when multiple threads try to invoke
    +     *        the function concurrently.
         *
    -     * @return a vector containing the triggered conditions
    +     * @return a vector containing the triggered Conditions
         */
    
    @@ -95,11 +92,6 @@ public:
       /**
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +   * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
    -   * The wait operation takes a timeout argument that specifies the maximum
    -   * duration for the wait. It this duration is exceeded and none of
    -   * the attached Condition objects is true, wait will continue and the
    -   * returned ConditionSeq will be empty.
    -   *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
        *
    -   * @param timeout the maximum amount of time for which the wait
    -   * should block while waiting for a condition to be triggered.
    -   *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
    @@ -142,7 +131,7 @@ public:
       /**
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +    * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
        * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
        * the attached Condition objects is true, wait will continue and the
        * returned ConditionSeq will be empty.
        *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
    +    *
    +    * @param triggered a ConditionSeq in which to put Conditions that were
    +    * triggered during the wait.
        *
        * @param timeout the maximum amount of time for which the wait
    -    * should block while waiting for a condition to be triggered.
    +    * should block while waiting for a Condition to be triggered.
        *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
    @@ -173,7 +162,7 @@ public:
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +    * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
        * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
        * the attached Condition objects is true, wait will continue and the
        * returned ConditionSeq will be empty.
        *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
        *
    +    * @param triggered a ConditionSeq in which to put Conditions that were
    +    * triggered during the wait.
    -    *
    -    * @param timeout the maximum amount of time for which the wait
    -    * should block while waiting for a condition to be triggered.
        *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
        ConditionSeq& wait(ConditionSeq& triggered);
    
    public:
        /**
    -     * Waits for at least one of the attached conditions to trigger and then
    -     * dispatches the events.
    +     * Waits for at least one of the attached Conditions to trigger and then
    +     * dispatches the functor associated with the Condition.
         */
        void dispatch();
    
        /**
    -     * Waits for at least one of the attached conditions to trigger and then
    -     * dispatches the events, or, times out and unblocks.
    +    * Waits for at least one of the attached Conditions to trigger and then
    +     * dispatches the functor associated with the Condition, or, times
    +     * out and unblocks.*
         */
        void dispatch(const dds::core::Duration& timeout);
    
    @@ -199,12 +188,12 @@ public:
       /**
        * A synonym for attach_condition.
        */
    -  WaitSet& operator +=(const dds::core::cond::Condition& cond);
    +  TWaitSet& operator +=(const dds::core::cond::Condition& cond);
    
    
       /**
        * A synonym for detach_condition.
        */
    -  WaitSet& operator -=(const dds::core::cond::Condition& cond);
    +  TWaitSet& operator -=(const dds::core::cond::Condition& cond);
    
    
       /**
        * Attaches a Condition to the WaitSet. It is possible to attach a
    @@ -216,7 +205,7 @@ public:
       /**
        * Attaches a Condition to the WaitSet. It is possible to attach a
        * Condition on a WaitSet that is currently being waited upon
        * (via the wait operation). In this case, if the Condition has a
    -    * trigger_value of TRUE, then attaching the condition will unblock
    +    * trigger_value of TRUE, then attaching the Condition will unblock
        * the WaitSet. Adding a Condition that is already attached to the WaitSet
        * has no effect.
        *
    -    * @param cond the condition to be attached to this waitset.
    +    * @param cond the Condition to be attached to this WaitSet.
    +    *
    +    * @return the WaitSet itself so that attaching Conditions
    +    * can be chained.
        */
    -  WaitSet& attach_condition(const dds::core::cond::Condition& cond);
    +  TWaitSet& attach_condition(const dds::core::cond::Condition& cond);
    
    
       /**
        * Detaches a Condition from the WaitSet. If the Condition was not
        * attached to the WaitSet, the operation will return false.
        *
    -    * @param cond the condition to detach from this WaitSet
    +    * @param cond the Condition to detach from this WaitSet
        *
    -    * @return true if the condition was found and detached, false if the
    -    *         condition was not part of the WaitSet.
    +    * @return true if the Condition was found and detached, false if the
    +    *         Condition was not part of the WaitSet.
        */
       bool detach_condition(const dds::core::cond::Condition& cond);
    
       /**
    -    * This operation retrieves the list of attached conditions.
    +   * This operation retrieves the list of attached Conditions.
        *
    -    * @return the list of attached conditions.
    +    * @return the list of attached Conditions.
        */
    -   const ConditionSeq conditions();
    +   const ConditionSeq conditions() const;
    
       /**
    -    * This operation retrieves the list of attached conditions.
    +    * This operation retrieves the list of attached Conditions.
        *
    +    * @param conds a ConditionSeq in which to put the attached
    +    * Conditions.
    +    *
    -    * @return the list of attached conditions.
    +    * @return the list of attached Conditions.
        */
       ConditionSeq& conditions(ConditionSeq& conds) const;
    };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/StatusCondition.hpp

  • Legacy Issue Number: 18618
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Does not compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/StatusCondition.hpp b/src/hpp/dds/core/cond/StatusCondition.hpp
    index 4e33b3d..e500e39 100644
    --- a/src/hpp/dds/core/cond/StatusCondition.hpp
    +++ b/src/hpp/dds/core/cond/StatusCondition.hpp
    @@ -22,7 +22,7 @@
     #include <dds/core/cond/TStatusCondition.hpp>
    
    
     namespace dds { namespace core { namespace cond {
    -  typedef TStatusCondition<detail::StatusCondition> StatusCondition;
    +  typedef detail::StatusCondition StatusCondition;
     } } }
    
    
     #endif /* OMG_DDS_CORE_STATUSCONDITION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Code in src/hpp/dds/core/array.hpp does not compile

  • Legacy Issue Number: 18617
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Does not compile

    Suggested resolution:

    diff --git a/src/hpp/dds/core/array.hpp b/src/hpp/dds/core/array.hpp
    index cd39d02..dfa910b 100644
    --- a/src/hpp/dds/core/array.hpp
    +++ b/src/hpp/dds/core/array.hpp
    @@ -219,6 +219,8 @@ namespace dds {
         template<std::size_t _Int, typename _Tp>
            class tuple_element;
    
    
    +    template <typename _Tp> class tuple_size;
    +
         template<typename _Tp, std::size_t _Nm>
            struct tuple_size<array<_Tp, _Nm> >
            { static const std::size_t value = _Nm; };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/AnyDataWriter.hpp

  • Legacy Issue Number: 18637
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Incorrect and unnecessary operator declaration should be removed.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/AnyDataWriter.hpp b/src/hpp/dds/pub/AnyDataWriter.hpp
    index b6bbde2..6d0bad5 100644
    --- a/src/hpp/dds/pub/AnyDataWriter.hpp
    +++ b/src/hpp/dds/pub/AnyDataWriter.hpp
    @@ -72,9 +72,6 @@ public:
       template <typename T> AnyDataWriter&
       operator =(const dds::pub::DataWriter<T>& rhs);
    
    
    -  template <typename T>
    -  AnyDataWriter& operator =(const AnyDataWriter& rhs);
    -
       inline AnyDataWriter& operator =(AnyDataWriter rhs);
    
    
     public:
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp

  • Legacy Issue Number: 18636
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor code is incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp b/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    index 9007702..c57454d 100644
    --- a/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    +++ b/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    @@ -28,7 +28,7 @@ namespace dds {
       namespace domain {
         namespace qos {
           namespace detail {
    -      typedef ::dds::core::qos::TEntityQos< foo::bar::domain::qos::DomainParticipantQos >
    +      typedef ::dds::core::TEntityQos< foo::bar::domain::qos::DomainParticipantQos >
           DomainParticipantQos;
           }
         }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/domain/TDomainParticipant.hpp

  • Legacy Issue Number: 18634
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to fix compilation.

    Correct comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/TDomainParticipant.hpp
    b/src/hpp/dds/domain/TDomainParticipant.hpp
    index ce51ea9..3bf7bb0 100644
    --- a/src/hpp/dds/domain/TDomainParticipant.hpp
    +++ b/src/hpp/dds/domain/TDomainParticipant.hpp
    @@ -75,8 +75,7 @@ public:
        *           <code>DomainParticipant</code>.
        *
        */
    -  TDomainParticipant(uint32_t did)
    -  : ::dds::core::TEntity<DELEGATE>(new DELEGATE(did));
    +  TDomainParticipant(uint32_t id);
    
    
       /**
        * Create a new <code>DomainParticipant</code> object.
    @@ -103,11 +102,11 @@ public:
     public:
    
    
       /**
    -   * Register a listener with the <core>DomainParticipant</code>.
    +   * Register a listener with the <code>DomainParticipant</code>.
        * The notifications received by the listener depend on the
        * status mask with which it was registered.
        *
        * @param listener the listener
        * @param event_mask the mask defining the events for which the listener
        *  will be notified.
        */
    -    void listener(Listener* the_listener,listener,
    +    void listener(Listener* listener,listener,
                      const ::dds::core::status::StatusMask& event_mask);
    
    @@ -144,19 +151,18 @@ public:
    
        /**
         * This operation manually asserts the liveliness of the DataWriter.
    -     * This is used in combination with the LIVELINESS QoS policy
    +     * This is used in combination with the Liveliness QoS policy
         * (see Section 7.1.3, Supported QoS, on page 96) to indicate to the
         * Service that the entity remains active.
         * This operation need only be used if the LIVELINESS setting is either
         * MANUAL_BY_PARTICIPANT or MANUAL_BY_TOPIC. Otherwise, it has no effect.
         *
    -     * <b>Note</b> Writing data via the write operation on a DataWriter
    +     * Note: Writing data via the write operation on a DataWriter
         * asserts liveliness on the DataWriter itself and its DomainParticipant.
         * Consequently the use of assert_liveliness is only needed if the
         * application is not writing data regularly.
         */
        void assert_liveliness();
    
    
        /**
    
    @@ -187,17 +193,70 @@ public:
    +    /**
    +     * Set the QoS associated with this DomainParticipant.
    +     * @param qos the new DomainParticipant QoS
    +     */
    +    dds::domain::qos::DomainParticipantQos& operator << (const dds::domain::qos::DomainParticipantQos& qos);
    +
    +    /**
    +     * Get the QoS associated with this DomainParticipant.
    +     *
    +     * @param qos the current DomainParticipant QoS
    +     */
    +    const TDomainParticipant& operator >> (dds::domain::qos::DomainParticipantQos& qos) const;
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

src/hpp/dds/domain/TDomainId.hpp should be removed from the API

  • Legacy Issue Number: 18633
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    uint32_t is used as the Domain ID throughout the spec so TDomainId.hpp is no longer required.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/TDomainId.hpp b/src/hpp/dds/domain/TDomainId.hpp
    deleted file mode 100644
    index dc6d9af..0000000
    --- a/src/hpp/dds/domain/TDomainId.hpp
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -#ifndef OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_
    -#define OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_
    -
    -#include <dds/core/Value.hpp>
    -
    -namespace dds { namespace domain {
    -  template <typename DELEGATE>
    -  class TDomainId;
    -} }
    -
    -
    -template <typename DELEGATE>
    -class dds::domain::TDomainId : public dds::core::Value<DELEGATE> {
    -public:
    -
    -  template <typename ARG0>
    -  TDomainId(ARG0 id) : dds::core::Value<DELEGATE>(id);
    -
    -  template <typename ARG0, typename ARG1>
    -  TDomainId(ARG0 arg0, ARG1 arg1);
    -
    -  operator uint32_t () const;
    -
    -  uint32_t value() const;
    -
    -  static const TDomainId default_domain();
    -};
    -
    -#endif /* OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/types.hpp

  • Legacy Issue Number: 18631
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Windows export macros required.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/types.hpp b/src/hpp/dds/core/types.hpp
    index c58e002..90c56f4 100644
    --- a/src/hpp/dds/core/types.hpp
    +++ b/src/hpp/dds/core/types.hpp
    @@ -33,8 +33,8 @@ namespace dds { namespace core {
       typedef std::vector<std::string> StringSeq;
    
    
       // DDS Null-Reference
    -  class null_type { };
    -  extern const null_type null;
    +  class OMG_DDS_API null_type { };
    +  extern const null_type OMG_DDS_API null;
    
    
    
     #ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/ref_traits.hpp

  • Legacy Issue Number: 18629
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Advisory comment is inadvertently and inappropriately documenting namespace.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/ref_traits.hpp b/src/hpp/dds/core/ref_traits.hpp
    index 5a34f6f..ff469d1 100644
    --- a/src/hpp/dds/core/ref_traits.hpp
    +++ b/src/hpp/dds/core/ref_traits.hpp
    @@ -19,11 +19,13 @@
      * limitations under the License.
      */
    
    
    -/**
    +
    +namespace  dds { namespace core {
    +
    +/*
      * These traits have to be provided by compliant implementations
      * to enable safe polymorphic casts.
      */
    -namespace  dds { namespace core {
    
    
       template <typename T1, typename T2>
       struct is_base_of;
    
    @@ -38,12 +43,12 @@ namespace  dds { namespace core {
    TO  polymorphic_cast(FROM& from);
    
    
    }
    } /* namespace dds / namespace core */
    
    
    // This include should stay here as it provides implementations
    -// for the declaration just above.
    +// for the declaration immediately above.
    #include <dds/core/detail/ref_traits.hpp>
    
    #endif /* OMG_DDS_CORE_REF_TRAITS_H_ */
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/detail/conformance.hpp

  • Legacy Issue Number: 18626
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor file is missing a conformance point macro used elsewhere in the API.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/detail/conformance.hpp b/src/hpp/dds/core/detail/conformance.hpp
    index f8b5f9b..bb8e974 100644
    --- a/src/hpp/dds/core/detail/conformance.hpp
    +++ b/src/hpp/dds/core/detail/conformance.hpp
    @@ -22,6 +22,7 @@
     #define OMG_DDS_OBJECT_MODEL_SUPPORT                        FULL
     #define OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT   FULL
     #define OMG_DDS_X_TYPES_DYNANIC_TYPE_SUPPORT                FULL
    +#define OMG_DDS_X_TYPES_BUILTIN_TOPIC_TYPES_SUPPORT         FULL
     #define OMG_DDS_HAS_PRETTY_PRINT_COUT 1
    
    
     #endif /* OMG_DDS_CORE_DETAIL_CONFORMANCE_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/qos/detail/DataWriterQos.hpp & PublisherQos.hpp

  • Legacy Issue Number: 18642
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor code is incorrect in these two files.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp b/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    index 67483ec..2f7a23e 100644
    --- a/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    +++ b/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    @@ -23,7 +23,7 @@
     #include <foo/bar/pub/qos/DataWriterQos.hpp>
    
    
     namespace dds { namespace pub { namespace qos { namespace detail {
    -  typedef dds::core::qos::TEntityQos<foo::bar::pub::qos::DataWriterQos> DataWriterQos;
    +  typedef dds::core::TEntityQos<foo::bar::pub::qos::DataWriterQos> DataWriterQos;
     } } } }
    
    
     #endif /* OMG_DDS_QOS_DETAIL_DATA_WRITER_QOS_HPP_ */
    diff --git a/src/hpp/dds/pub/qos/detail/PublisherQos.hpp b/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    index 1abff41..a60635b 100644
    --- a/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    +++ b/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    @@ -23,7 +23,7 @@
     #include <foo/bar/pub/qos/PublisherQos.hpp>
    
    
     namespace dds { namespace pub { namespace qos { namespace detail {
    -  typedef dds::core::qos::TEntityQos<foo::bar::pub::qos::PublisherQos> PublisherQos;
    +  typedef dds::core::TEntityQos<foo::bar::pub::qos::PublisherQos> PublisherQos;
     } } } }
    
    
     #endif /* OMG_DDS_PUB_QOS_DETAIL_PUBLISER_QOS_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections to src/hpp/dds/pub/discovery.hpp

  • Legacy Issue Number: 18640
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Corrections to documentation comments required.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/discovery.hpp b/src/hpp/dds/pub/discovery.hpp
    index f50e179..5a8eb28 100644
    --- a/src/hpp/dds/pub/discovery.hpp
    +++ b/src/hpp/dds/pub/discovery.hpp
    @@ -40,8 +40,6 @@ namespace dds { namespace pub {
        * @param dp      the <code>DomainParticipant</code> for which the remote
        *                entity will be ignored
        *
    -   * @param handle  the <code>InstanceHandle</code> of the remote entity that
    -   *                has to be ignored
        */
       template <typename FwdIterator>
       void ignore(const dds::domain::DomainParticipant& dp, FwdIterator begin, FwdIterator end);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/TSuspendedPublication.hpp

  • Legacy Issue Number: 18639
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Destructor declaration incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/TSuspendedPublication.hpp b/src/hpp/dds/pub/TSuspendedPublication.hpp
    index fcd096b..ac4ea26 100644
    --- a/src/hpp/dds/pub/TSuspendedPublication.hpp
    +++ b/src/hpp/dds/pub/TSuspendedPublication.hpp
    @@ -72,7 +72,7 @@ public:
        * suspend_publications. Otherwise the operation will return the
        * error PRECONDITION_NOT_MET.
        */
    -  ~SuspendedPublication();    // resumes publications implicitly
    +  ~TSuspendedPublication();    // resumes publications implicitly
     };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/TDataReader.hpp

  • Legacy Issue Number: 18649
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Duplicate function definition to remove.

    Missing header required to fix compilation.

    Correct comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/TDataReader.hpp b/src/hpp/dds/sub/TDataReader.hpp
    index e10705c..ca592bb 100644
    — a/src/hpp/dds/sub/TDataReader.hpp
    +++ b/src/hpp/dds/sub/TDataReader.hpp
    @@ -23,6 +23,7 @@
    #include <dds/topic/ContentFilteredTopic.hpp>
    #include <dds/topic/TopicInstance.hpp>
    #include <dds/sub/LoanedSamples.hpp>
    +#include <dds/sub/Subscriber.hpp>

    namespace dds {
    namespace sub {
    @@ -56,7 +57,6 @@ public:
    Selector(DataReader& dr);

    Selector& instance(const dds::core::InstanceHandle& h);

    • Selector& instance(const dds::core::InstanceHandle& h);
      Selector& state(const dds::sub::status::DataState& s);
      Selector& content(const dds::sub::Query& query);
      Selector& max_samples(uint32_t n);
      @@ -220,7 +220,7 @@ public:

    /**

    • Returns the default read-state (if not changed, it is set to
    • * ReaderState::any()).
      + * DataState::any()).
      */
      const dds::sub::status::DataState& default_filter_state();

    @@ -258,7 +258,7 @@ public:

    • Read all samples using the default filter state. The memory used for
    • storing the sample may be loaned by the middleware thus allowing zero
    • copy operations.
    • * Implementation should strike to makethis read implementation
      + * Implementors should strive to make this read implementation
    • exception safe.
      */
      LoanedSamples<T> read();
      @@ -267,7 +267,7 @@ public:
    • Take all samples using the default filter state. The memory used for
    • storing the sample may be loaned by the middleware thus allowing zero
    • copy operations.
    • * Implementation should strike to make this read implementation
      + * Implementors should strive to make this take implementation
    • exception safe.
      */
      LoanedSamples<T> take();
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/SubscriberListener.hpp

  • Legacy Issue Number: 18648
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Missing header includes are required for this header to compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/SubscriberListener.hpp b/src/hpp/dds/sub/SubscriberListener.hpp
    index b185342..77f3e08 100644
    — a/src/hpp/dds/sub/SubscriberListener.hpp
    +++ b/src/hpp/dds/sub/SubscriberListener.hpp
    @@ -19,6 +19,8 @@

    • limitations under the License.
      */

    +#include <dds/sub/AnyDataReaderListener.hpp>
    +#include <dds/sub/Subscriber.hpp>

    namespace dds { namespace sub {

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/DataReaderListener.hpp

  • Legacy Issue Number: 18645
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Code needs compilation fixes.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/DataReaderListener.hpp b/src/hpp/dds/sub/DataReaderListener.hpp
    index 17c620e..70b2777 100644
    --- a/src/hpp/dds/sub/DataReaderListener.hpp
    +++ b/src/hpp/dds/sub/DataReaderListener.hpp
    @@ -32,10 +32,10 @@ namespace dds { namespace sub {
     template <typename T>
     class dds::sub::DataReaderListener {
     public:
    -  typedef ::dds::core::smart_ptr_traits<DataReaderListener>::ref_type ref_type;
    +  typedef typename ::dds::core::smart_ptr_traits<DataReaderListener>::ref_type ref_type;
    
    
     public:
    -  virtual ~DataReaderListener();
    +  virtual ~DataReaderListener() = 0;
    
    
     public:
       virtual void on_requested_deadline_missed(
    @@ -69,7 +69,7 @@ public:
     template <typename T>
     class dds::sub::NoOpDataReaderListener : public virtual DataReaderListener<T> {
     public:
    -  typedef ::dds::core::smart_ptr_traits<NoOpDataReaderListener>::ref_type ref_type;
    +  typedef typename ::dds::core::smart_ptr_traits<NoOpDataReaderListener>::ref_type ref_type;
    
    
     public:
       virtual ~NoOpDataReaderListener();
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/SharedSamples.hpp

  • Legacy Issue Number: 18647
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes required to code.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/SharedSamples.hpp b/src/hpp/dds/sub/SharedSamples.hpp
    index c48271a..8c517c8 100644
    — a/src/hpp/dds/sub/SharedSamples.hpp
    +++ b/src/hpp/dds/sub/SharedSamples.hpp
    @@ -30,7 +30,7 @@ public:
    typedef typename DELEGATE<T>::iterator iterator;
    typedef typename DELEGATE<T>::const_iterator const_iterator;

    -
    + typedef typename dds::core::smart_ptr_traits< DELEGATE<T> >::ref_type DELEGATE_REF_T;

    public:
    /**
    @@ -44,7 +44,7 @@ public:

    • @param ls the loaned samples.
      *
      */
    • SharedSamples(LoanedSamples ls);
      + SharedSamples(dds::sub::LoanedSamples<T> ls);

    ~SharedSamples();

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API needs a standardized way of downcasting API entities

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Right now, API entities are wrapper templates around the actual Delegate implementation, as in (depicted a bit simplified):

    typedef TEntity<EntityDelegate> Entity;
    typedef TPublisher<PublisherDelegate> Publisher;

    If I have an entity of type Entity, and I want to widen it to a type Publisher, I cannot use a regular cast because I need to cast both the wrapper and its Delegate.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:03 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Name clash between Topic discovery functions

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The discovery functions for Topics (dds/topic/discovery.hpp) has a name clash between the function to discover a single topic by name (first function) and the function to discover all topics using a back-inserting iterator (third function):

    template <typename TOPIC>
    TOPIC discover(const dds::domain::DomainParticipant& dp,
                   const std::string& name,
                   const dds::core::Duration& timeout = dds::core::Duration::infinite());
    
    template <typename ANYTOPIC, typename BinIterator>
    uint32_t discover(const dds::domain::DomainParticipant& dp, BinIterator begin);
    

    The first function has a default value for the 3rd parameter, but when you try to invoke it with only 2 parameters, the compiler picks the latter function because it considers that one a better match. (It matches both the amount and the type of the parameters, since the 2nd parameter is templatized and accepts any type).

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:53 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds::topic::TBuiltinTopicKey should be completely customizable.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the DDS 1.4 specification, the IDL file describing the builtin topics consists of two parts:

    • A section with #define statements where certain datatypes may be customized by the different vendors.
    • A section where these customized datatypes are actually embedded in the builtin topic declarations.

    All builtin topics contain a key field of type BuiltinTopicKey_t that is defined in the following way:

    #define BUILTIN_TOPIC_KEY_TYPE_NATIVE long
    
    module DDS {
        struct BuiltinTopicKey_t {
            BUILTIN_TOPIC_KEY_TYPE_NATIVE value[3];
        };
    };
    

    This implies that vendors may specify part of the key (the array element type), but they may not specify it to be anything else than an array of three of those vendor specific datatypes.

    Right now, different vendors have specified the BuiltinTopicKey_t in various different ways: some uses an array of 16 octets to directly reflect the RTPS GUID, but the official DDS spec does not allow for this.

    For the DDS 1.4 specification, this has been files as a separate issue (see DDS15-206). For the Cxx PSM for DDS, this also needs to be addressed which is the purpose of this ticket. Right now, for the Cxx PSM specifies the dds::topic::BuiltinTopicKey as a vendor spefic instantiation of the dds::topic::TBuiltinTopicKey template in the following way:

    template <typename D>
    class dds::topic::TBuiltinTopicKey : public ::dds::core::Value<D>
    {
    public:
        /**
         * Gets the BuiltinTopicKey.
         *
         * @return the BuiltinTopicKey
         */
        const int32_t* value() const;
    
        /**
         * Sets the BuiltinTopicKey.
         *
         * @param v the value to set
         */
        void value(const int32_t v[]);
    };
    

    It is clear from this description that although the size of the array is unspecified, it is still implied that the key is an array of int32_t. This conflicts with the original DDS specification that explicitly allows for the builtin topic key type to be customizable by the user.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 5 Dec 2017 19:29 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds/core/cond/TCondition.hpp should have virtual methods

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The operations of the dds::core::cond::TCondition.hpp class should be virtual:

    public:
    -   ~TCondition();
    +   virtual ~TCondition();
    
    public:
        /**
         * Dispatches the functors that have been registered with the condition.
         */
    -   void dispatch();
    +   virtual void dispatch();
    
        /**
         * This operation retrieves the trigger_value of the Condition.
         */
    -   bool trigger_value() const;
    +   virtual bool trigger_value() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 20 Apr 2015 09:54 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Ownership label SHARED is already defined as a macro in some SUN compilers

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Some SUN compilers have predefined a macro called SHARED. This clashes with the definition of the enumeration label SHARED for the OwnershipKind_def struct.

    We suggest to add some conditional code to undef the SUN macro in that case.

    git diff:

    --- a/include/dds/core/policy/PolicyKind.hpp
    +++ b/include/dds/core/policy/PolicyKind.hpp
    @@ -29,6 +29,10 @@ namespace core
     namespace policy
     {
    
    +/** @todo raise spec issue **/
    +#if defined (__SUNPRO_CC) && defined(SHARED)
    +#   undef SHARED
    +#endif
     struct OwnershipKind_def
     {
         enum Type
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 13 Apr 2015 15:32 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Compilation error in dds/core/policy/PolicyKind.hpp

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The enumeration for the TypeConsistencyEnforcementKind_def is not scoped by a struct, as all the other enumerations, but by a namespace. This should be fixed.

    git diff:

    @@ -96,7 +96,7 @@ namespace dds { namespace core { namespace policy {
         }; };
       typedef dds::core::safe_enum<LivelinessKind_def> LivelinessKind;
    
    -  namespace TypeConsistencyEnforcementKind_def {
    +  struct TypeConsistencyEnforcementKind_def {
         enum type {
           EXACT_TYPE_TYPE_CONSISTENCY,
           EXACT_NAME_TYPE_CONSISTENCY,
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 13 Apr 2015 13:46 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds/core/array.hpp is licensed under LGPL

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    According to the comments mentioned in dds/core/array.hpp, it contains code that is licensed under LGPL. This may cause legal issues for users that do not want to have their code impacted by LGPL license conditions.

  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 9 Feb 2018 16:25 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Reference should provide comparison operators

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    dds::core::Reference<D> should provide comparison operators beyond == and !=. operator< is especially useful to make reference types the key of std::map.

    Proposed solution: add the following lines to Reference.hpp, inside the dds::core namespace:

    template <class T, class U>
    bool operator <(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() < b.delegate().get();
    }
    
    template <class T, class U>
    bool operator <=(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() <= b.delegate().get();
    }
    
    template <class T, class U>
    bool operator >(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() > b.delegate().get();
    }
    
    template <class T, class U>
    bool operator >=(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() >= b.delegate().get();
    }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 5 Jan 2018 18:24 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Missing constants/functions to obtain the built-in topic names

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The API should provide a way to obtain the built-in topic names:

    • "DCPSParticipant"
    • "DCPSTopic"
    • "DCPSPublication"
    • "DCPSSubscription"

    Proposed resolution:

    Add the following free-standing functions to the dds::topic namespace:

    namespace dds { namespace topic {
    
    /** 
     * @brief Participant builtin topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::ParticipantBuiltinTopicData type 
     */
    OMG_DDS_API std::string participant_topic_name();
    
    /** 
     * @brief Topic topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::TopicBuiltinTopicData type 
     */
    OMG_DDS_API std::string topic_topic_name();
    
    /** 
     * @brief  Publication topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::PublicationBuiltinTopicData type 
     */
    OMG_DDS_API std::string publication_topic_name();
    
    /** 
     * @brief Subscription topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::SubscriptionBuiltinTopicData type 
     */
    OMG_DDS_API std::string subscription_topic_name();
    
    } }  // namespace dds::topic
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 15 Jul 2016 18:50 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to dds/core/Duration.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The class Duration needs the following corrections:

    • Add missing operator!=
    • Replace type of member sec_ from uint32_t to int32_t.

    We also suggest adding the following implicit constructor that allows interchanging C++11 chrono types and Duration throughout the API:

        /**
         * @brief Allow implicit creation from std::chrono::duration
         *
         * For example:
         * \code
         * dds::core::cond::WaitSet waitset;
         * // ...
         * waitset.wait(std::chrono::seconds(1) + std::chrono::milliseconds(250));
         * \endcode
         *
         */
        template <typename Rep, typename Period>
        /* implicit */ Duration(const std::chrono::duration<Rep, Period>& duration)
            : sec_(static_cast<int32_t>(
                  std::chrono::duration_cast<std::chrono::seconds, Rep, Period>(duration).count())),
              nsec_(static_cast<uint32_t>(
                  (std::chrono::nanoseconds(duration) % 1000000000).count()))
        {
        }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 22:46 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API correction required to dds/core/Time.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The dds::core::Time structure declares the sec field as an int64_t, but in the DDS spec, Time is defined as:

    struct Time_t {
    long sec;
    unsigned long nanosec;
    };
    

    It should be replaced with int32_t.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 18:12 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to dds/sub/AnyDataReader.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    This class is missing most methods:

    • qos() — getter and setter
    • topic_name()
    • type_name()
    • subscriber()
    • operator== and !=
    • close()
    • retain()
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 18:07 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API does not provide functionality from the DomainParticipantFactory

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:
    • There isn't a way to create DomainParticipants in disabled state, because there isn't a DomainParticipantFactory to set its EntityFactory policy.
    • There isn't a placeholder for extensions to the DomainParticipantFactoryQos.
    • There isn't any function that allows releasing global resources that in other APIs are contained in the DomainParticipantFactory.

    Proposed solution:

    • Create dds::domain::qos::DomainParticipantFactoryQos in a new file, dds/domain/qos/DomainParticipantFactoryQos.hpp}}
    • Add the following static methods to the DomainParticipant
      TDomainParticipant.hpp
          /**
           * @brief Set the 
           * dds::domain::qos::DomainParticipantFactoryQos
           *  
           * @param qos The DomainParticipantFactoryQos to set.
           */
          static void participant_factory_qos(
             const dds::domain::qos::DomainParticipantFactoryQos& qos)
          {
              DELEGATE::participant_factory_qos(qos);
          }
      
          /**
           * @brief Get the current dds::domain::qos::DomainParticipantFactoryQos
           *  
           * @return The current DomainParticipantFactoryQos 
           */
          static dds::domain::qos::DomainParticipantFactoryQos participant_factory_qos()
      
          /**
           * @brief Finalize the DomainParticipantFactory. 
           *  
           * The DomainParticipantFactory is a singleton that the C++ API 
           * uses implicitly to create participants. This operation allows releasing any memory allocated by this singleton.
           *
           */
          static void finalize_participant_factory();
      
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 17:57 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Correction required to dds/sub/ddssub.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Missing include:

    + #include <dds/sub/discovery.hpp>
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:04 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API correction required to dds/topic/TBuiltinTopic.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Missing const qualifier for TTopicBuiltinTopicData::key():

    Resolution:

    - const dds::topic::BuiltinTopicKey& key();
    + const dds::topic::BuiltinTopicKey& key() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 18 Jul 2016 22:03 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Selector missing next_instance() function

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The Selector class is missing the following member function:

    Selector& next_instance(const dds::core::InstanceHandle& h)
    

    Note that ManipulatorSelector does have it.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 14 Jul 2016 23:06 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT


Declaring Reference::operator new() private causes undesired side effects

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Reference makes the new operator private to disallow dynamic allocation for reference types.

    However, this makes some compilers unable to find the placement-new operator (operator new (size_t, void*)), whose usage is still valid (for example, in STL containers):

    /local/VxWorks/GPP-3.6/gnu/4.1.2-vxworks-6.6/sun4-solaris2/bin/../../lib/gcc/../../include/c++/4.1/xmemory:37: error: no matching function for call to 'dds::core::TEntity<rti::core::Entity>::operator new(unsigned int, void*&)'
    ../../../hpp/dds/core/Reference.hpp:184: note: candidates are: static void* dds::core::Reference<DELEGATE>::operator new(size_t) [with DELEGATE = rti::core::Entity]
    

    We haven't found yet a solution other than not making new private.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 23:54 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Generic InstanceHandle constructor should be explicit

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Replace:

    dds/core/TInstanceHandle.hpp
      template <typename ARG0>
      TInstanceHandle(const ARG0& arg0);
    

    with:

      template <typename ARG0>
      explicit TInstanceHandle(const ARG0& arg0);
    

    An implicit constructor like that one indicates the compiler that it can implicitly convert any type to InstanceHandle, which severely interferes with the compiler's template substitution procedures and error reporting.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 19 Sep 2016 16:59 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Method SampleInfo::valid() should be renamed SampleInfo::valid_data()

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    There are several reasons for this:

    (1) The DDS-PIM defines the information in the SampleInfo as a "valid_data" flag therefore when mapped to the C++ PSM the same name should be retained.

    (2) This is consistent with the other PSMs.

    (3) Semantically SampleInfo::valid() is incorrect. The SampleInfo is always valid. What is invalid is the associated SampleData. Hence the correct name would be SampleInfo::valid_data()

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 23:07 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to ManipulatorSelector and related functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The free-standing functions read() and take() should not be templates.

    They are meant to be passed as function pointers to the streaming ManipulatorSelector API:

    dr >> read >> ... >> loaned_samples;
    

    This syntax is not possible with the current definition of read() and take(), because they require an explicit template argument.

    Proposed solution:
    Remove the template argument, but leave a dummy argument to avoid users passing in any no-argument function.

    DataReader.hpp
    -  template <typename SELECTOR>
    -  SELECTOR& read(SELECTOR& selector);
    +  OMG_DDS_API
    +  bool read(dds::sub::ReadModeDummyType);
    
    -  template <typename SELECTOR>
    -  SELECTOR& take(SELECTOR& selector);
    +  OMG_DDS_API
    +  bool take(dds::sub::ReadModeDummyType);
    
    TDataReader.hpp
    +class ReadModeDummyType {};
    
    …
    
    -  ManipulatorSelector
    -  operator >> (ManipulatorSelector& (manipulator)(ManipulatorSelector&));
    +        ManipulatorSelector&
    +        operator >>(bool(*manipulator)(ReadModeDummyType))
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 17:41 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Inconsistencies related to use of const&

  • Key: DDSPSMC-24
  • Legacy Issue Number: 16269
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    There is consistency issue in the spec with respect to the use of const & versus returning copies.

  • Reported: DDS-PSM-Cxx 1.0b1 — Thu, 26 May 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The API has been verified to consistently use const reference when possible and values when necessary. Notice that these changes do not change the semantics but in some case can reduce the number of temporary object created.

  • Updated: Fri, 6 Mar 2015 23:16 GMT

ReaderState: the class name does not reflect the intent of the class

  • Legacy Issue Number: 17064
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The class ReaderState encapsulate the Sample, Instance and View States and provides some useful predefined statuses.
    However the name of the class is relatively misleading as these statuses have nothing to do with the DataReader.
    These statuses are really used to "filter" the data on the reader cache based on its status. The name of the class should
    be replaced by something that better express its role.

    Resolution
    ---------------
    Rename the "ReaderState" class into "DataStatus".

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0
  • Disposition Summary:

    Rename the "ReaderState" class into "DataStatus".

  • Updated: Fri, 6 Mar 2015 20:58 GMT

The Status API, e.g. sample_rejected_status, deadline_missed_status, etc., are missing from the DataReader

  • Legacy Issue Number: 17048
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    Description
    ---------------
    The Status API, e.g. sample_rejected_status, deadline_missed_status, etc., are missing from the DataReader.

    Resolution
    ---------------
    Simply add them.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0
  • Disposition Summary:

    The missing statuses methods have been added to the DataReader

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Useless ReaderQuery on DataReader read/take

  • Legacy Issue Number: 17066
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The ReaderQuery class bundles together the read-state as well as potential read conditions. However the read-condition is not always present. This leads to code that needs to check all the time wether something is set or not, which is not only very elegant/efficient but it is also error prone

    Resolution
    ---------------
    Remove the ReaderQuery and let the read API deal, through proper operations overloads, with ReadState and potential ReadConditions. This way it will always be clear if a read/take is with a condition or not both for the client code and the DDS implementor.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0
  • Disposition Summary:

    The DataReader API has been updated to provide the proper read/take overloads and remove the useless ReaderQuery. The concept of a Selector has been introduced to orchestrate complex read/take operations requiring selection based on state, content and instance. The new API is orthogonal, simple and composable. Below an example usage of the selector API:

    LoanedSamples<Foo> ls =
    dr.select()
    .instance(handle)
    . content(query)
    .take();

    This example takes the samples matching the query q for the instance with given handle.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Assignment Rule for Container Types

  • Legacy Issue Number: 17067
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The ctors declared by the macros OMG_DDS_REF_TYPE_BASE and OMG_DDS_REF_TYPE_BASE_T for initializing proxy classes with delegates should be declared protected as opposed to public. This will ensure (1) that client code is not able to invoke these methods and (2) that the C++ compiler won't try to apply some of the parametrized ctors to incomplete arg-list provided by the user.

    Resolution
    ---------------
    Change ctors declaration from "public" to "protected"

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0
  • Disposition Summary:

    The Reference class ctors identified in this issue were declared “protected”.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Exception safety guarantees for the DataReader API

  • Key: DDSPSMC-11
  • Legacy Issue Number: 16402
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The DataReader API must provide an exception-safe way to retrieve samples and must specify guarantees when exceptions are thrown. The exception safety of the DataReader API is analyzed with respect to user level state and middleware state. Read and take are both logically non-const operations with respect to the m/w because both of them have side effects such as changes in the sample_state and instance_state. There could be exceptions while delivering samples from m/w space to user space on the boundary of the read/take function calls. Depending upon the implementation there may or may not be a way to roll-back the changes in sample_state and instance_state. However, it is critical to have a way to not lose the samples even in case of exceptions. In general, it is difficult to provide strong guarantees with respect to m/w for datareader api.

    1. Strong and no throw guarantees for LoanedSamples:

    The constructor of LoanedSamples should provide strong guarantees. All the remaining operations (specifically copy-ctor and copy-assignment operator) should provide no-throw guarantees. It is important for LoanedSample to not throw exception during copy because then the samples would be lost. Further, read/take api should minimize dynamic memory allocation and locks on the critical path for performance reasons. Therefore LoanedSamples can’t use reference semantics either. (Reference<D> uses shared_ptr, which uses dynamic memory allocation and mutex to construct and protect the reference count.)

    These strict guarantees for LoanedSamples appear to be essential to support at least minimally exception safe read/take api that does no lose samples in case of exceptions. It is also the intent of LoanedSamples<T> to return the resources to m/w as soon as it goes out of scope.

    Proposed Solution: Use std::auto_ptr semantics in LoanedSamples. A key property of std::auto_ptr is that it can be safely returned while moving the resources out of an inner scope to an outer. No exceptions will be thrown. LoanedSamples<T> should be designed as such to avoid exceptions on copy. There is an idiomatic way of implementing such a class: The Move-constructor Idiom.

    Consequences: No std::vector<LoanedSamples<T>> would be possible. However the anticipated use-case of LoandedSamples is that the users would iterate over the range of samples and copy them and return the loan. For those users who really want to create vectors of loaned buffers, they would take ownership of the buffer from the LoanedSamples and use std::vector<shared_ptr<T> > to automate memory management. Use of custom deleters feature of shared_ptr may facilitate returning of the loan.

    2. LoanedSamples take(): Basic exception safe.

    The take function is loaning a buffer from the m/w. The implementations may or may not provide a way to ‘untake' samples. So this function cannot provide strong exception safety with respect to m/w. Therefore, guarantees of LoanedSample above are applicable here. This would guarantee that the samples that are removed from the history cache are not destoyed before the user gets a chance to access them.

    3. LoanedSamples read(): Basic exception safe.

    An attempt can be made to reread the samples. Above guarantees of LoanedSamples are applicable here

    4. // — Forward Iterators: — //
    void read(SamplesFWIterator, InfoFWIterator, size_t max_samples): Basic exception safe void take(SamplesFWIterator, InfoFWIterator, size_t max_samples): Basic exception safe

    This API probably needs to specify guarantees with respect to two different things:

    1. With respect to state changes in the user supplied range
    2. With respect to m/w state

    Changes to user-supplied range ==== If Nth copy throws there is no way to recover earlier N-1 objects that were already copied successfully. So in general only basic guarantee is provided. If the first object in the range throws, nothing changes and strong safety is provided. Further the API must provide a way to return # of objects were actually copied. API should specify a precondition: iterators must be from a range that is initialized and contain valid max_samples objects. In other words, the range cannot contain any uninitialized object. This prohibits uses such as

    std::vector<T> v;
    v.reserve(max);
    dr.read(v.begin(), v.end(), max);

    Changes to m/w state ==== The read() function has side effects like changes in the view_state and instance_state so it's really not a const function. The implementations may or may not provide a way to ‘unread' samples. So with respect to these status bits there is no way to provide strong exception guarantee so only basic guarantee is provided.

    Proposed Solution: In case of an exception (e.g., std::bad_alloc) during these function calls, construct an internal LoanedSamples<T> object and wrap it in a ‘ReadTakeException’ object and throw it. ReadTakeException class must provide an API to retrieve the LoanedSamples. Nothrow guarantees of LoanedSamples are important here again. This solution provides at least one way to retrieve the samples that are read/take from the history cache. Such a wrapper may also need to wrap the original exception that was raised to support exception neutrality.

    5. // — Back-Inserting Iterators: — //
    read(SamplesBIIterator, InfoBIIterator, size_t max_samples): Basic exception safe take(SamplesBIIterator, InfoBIIterator, size_t max_samples): Basic exception safe

    In addition to the exceptions that forward iterator versions can throw, these functions can throw when vector::push_back throws. I think the same rules are applicable to these functions.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 29 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    This issue raises a very important and tricky point. Exceptions raised during a read/take operation might leave user without data and the cache with a side-effect. Although the exceptions that would induce such a undesirable side-effect are due to memory exhaustion, it is desirable to provide at least some variation of the read/take API that are exception safe.
    This issue has been addressed by recommending that the loan-based implementation of read/take operations on the data-reader are implemented using a move-idiom (see http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Move_Constructor) and thus are exception safe (see resolution for issue 16401).
    In addition a new class called SharedSamples has been introduced to ensure we can still use loaned data in combination with standard containers.
    The specification of the SharedSamples class is available at:
    dds-psm-cxx/src/hpp/dds/sub/SharedSamples.hpp

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Portable exception-safety guarantees for DDS C++ PSM

  • Key: DDSPSMC-10
  • Legacy Issue Number: 16401
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The users of the DDS C++ PSM can benefit significantly if the specification standardizes exception-safety guarantees of the API. Exception safety specification for normative classes would support portable safety guarantees irrespective of vendor implementation and extensions. This would facilitate frictionless transition from one vendor to another in user code.

    Exception safety is about how programs, libraries behave when an exceptional condition arises. It is often much more than just raising an exception. For instance, constructor or copy-ctor of std::string may run out of memory resulting into std::bad_alloc exception. However, in practice, APIs must specify guarantees about the internal state of the data structures after any exception propagates out. Exception-safety guarantees for C++ abstractions come in four categories: strong, basic, nothrow, and neutral. For instance, the push_back member function of std::vector, std::list guarantees that the container remains unchanged (strong exception safety) in case of any exception. In general, programmers expect strong exception safety guarantees but it is often expensive to do so.

    RTI is proposing refined specifications for normative DDS C++ PSM API to make it easier to use even in the face of exceptions.

    1. Strong guarantees for value types:

    All the constructors and copy-assignment operators of normative classes that inherit from Value<D> and the Value<D> template itself should provide strong guarantees. A simple way to achieve that is to ensure that Value<D> template provides strong guarantees and then implement the derived classes in terms of value<D>.

    Not all value types are POD. Some of them use std::string and may throw. Consider, for instance, SubscriptionBuiltinTopicData. Value<D> delegates the assignment to its delegate, SubscriptionBuiltinTopicDataImpl. This impl class has non-pod members such as std::string and does not define its own assignment operator. Assignment of one string (topic_name) may succeed but the assignment of second string (type_name) may fail with a bad_alloc exception. This may result into inconsistent left-hand-side SubscriptionBuiltinTopicData object when DataWriter:: matched_subscription_data is called.

    In general, classes that have more than one non-pod types should have an assignment operator that is strongly safe. Instead of handpicking such classes, Value<D should be made strong exception-safe so that irrespective of vendor-specific extensions, types that users will deal with the most, will be safe to use.

    Proposed solution: Implement the copy-assignment operator of Value<D> using copy-and-swap technique.

    2. At least basic guarantees for reference types:

    Not all implementations may be able to provide strong guarantees for reference types such as DataWriter<Foo>, DataReader<Foo>. Therefore, constructors and copy-assignment operators must provide at least basic guarantees. While Reference<D> itself should provide strong guarantees; just that is insufficient to extend the guarantees to all its derived classes. The normative reference types should provide strong guarantees whenever it is not prohibitively expensive to do so.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 29 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    Section 7.3 on page 16 of the specification lists not the mandatory exception safety requiremenst on Value types and Reference Types. Specifically, for reference types it is required that loan-based read/take are exception safe.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Union/array/bounded types lacking

  • Key: DDSPSMC-3
  • Legacy Issue Number: 16261
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The specification should describe the mapping for Union, Array, and the behavior for bounded strings (what happens if we go beyond the bound)

  • Reported: DDS-PSM-Cxx 1.0b1 — Tue, 24 May 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    Arrays are now mapped to the dds::core::array<T,N> type which is designed to be compatible with C+11 arrays and thus to simplify idiomatic C11 usage as well as portability of DDS code to C+11 compilers.

    The table 7.1 in section 7.4.2 reflects the new mapping of array (see last column).

    Section 7.4.3 provides now a definition of the mapping for enumerations.

    Section 7.4.4 provides a definition of the mapping for unions.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

factory methods on the "parents" (e.g. create_topic, create_data_writer, etc.)

  • Key: DDSPSMC-2
  • Legacy Issue Number: 15967
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The changes introduced in the final submission to support factory methods on
    the "parents" (e.g. create_topic, create_data_writer, etc.) has introduced a
    few issues.

    a. Reference types are not created in a uniform way. In essence,
    DomainParticipant, Subscriber, Publisher, DataReader and DataWriter
    types are instantiated using a different syntax than that used by
    WaitSets or Conditions. This is unfortunate as it reduces the
    consistency of the API.

    b. To eliminate the circular dependencies induced by the factory methods
    the API has to implement a few "creative" solutions that impact
    clarity as well as robustness. All of a sudden it is relatively hard
    to find where is defined what and also the include systems is very
    fragile, e.g. one can break the API very easily by mistakenly changing
    one include order.

    The changes suggested to the submission is to equip each
    Reference type with a factory method called "create". This not only allows to
    remove circular references, but it also allows for an organization of the API
    that is more robust and easier to follow. Furthermore, it ensures that
    all references are created in an uniform manner.

  • Reported: DDS-PSM-Cxx 1.0b1 — Mon, 17 Jan 2011 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The dds-psm-cxx API has been updated to remove the circular dependencies introduced by factory methods. Along with removing circular dependencies the API has been refactored to ensure that no forward includes are needed thus maintaining local, and thus clear and visible, the set of dependencies for each file. The necessary changes have been applied to all the DDS entities, such as DomainParticipant, Publisher and Subscriber.
    Examples in the specification have been updated to reflect the API change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Compilation errors on Visual Studio 2008/2010

  • Key: DDSPSMC-5
  • Legacy Issue Number: 16338
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Description: The sources obtained from dds-psm-cxx.googlecode.com do not compile on Visual Studio compilers without significant efforts. There are multiple issues most related to type conversion.

    1. All the classes that inherit from dds::core::Value<D> seem to be missing a copy-ctor. For example, QosPolicyCount in src\hpp\tdds\core\policy\QosPolicyCount.hpp. Without a copy-ctor, VS2010 issues a “cannot convert from ...” error.

    Most of these classes are found in the following files:

    src\hpp\tdds\core\InstanceHandle.hpp
    src\hpp\tdds\core\policy\CorePolicy.hpp
    src\hpp\tdds\core\policy\QosPolicyCount.hpp
    src\hpp\tdds\core\qos\EntityQos.hpp

    Proposed Solution: Add a copy constructor to all the classes that inherit from dds::core::Value<D> as follows:

    QosPolicyCount(const QosPolicyCount& src) : dds::core::Value<DELEGATE>(src.delegate()) { }

    2. The exception classes in dds-psm-cxx\src\hpp\dds\core\Exception.hpp do not need copy-ctor because there is nothing to copy and the base classes don’t have copy constructors either.

    Proposed resolution: Remove the declarations of copy constructors in dds-psm-cxx\src\hpp\dds\core\Exception.hpp

    3. The private constructor of SampleRejectedStatus in dds-psm-cxx-read-only\src\hpp\dds\core\status\State.hpp needs a typecast to avoid compilation errors on Visual studio versions of STL.

    The following constructor can’t be called due to ambiguous overloads of bistset<N> constructors.

    private: SampleRejectedState(uint32_t s) : MaskType(s) { }

    Proposed solution: Change the call to the base constructor to include an explicit static_cast to int.

    private: SampleRejectedState(uint32_t s) : MaskType(static_cast<int>(s)) { }

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 17 Jun 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The Visual Studio C++ 2010 compiler was raising a series of errors and warning that were not caught by GCC relating to some lacking ctors and conversion operators in some template classes. All the errors raised by Visual Studio C++ 2010 have been addressed as verifiable on the latest version of the dds-psm-cxx source code available at https://github.com/kydos/dds-psm-cxx

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Dividing a scalar in Duration and Time classes

  • Key: DDSPSMC-4
  • Legacy Issue Number: 16308
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Duration and Time have some arithmetic operators that have the form:

    const Duration operator /(uint32_t lhs, const Duration& rhs);
    const Time operator /(uint32_t lhs, const Time& rhs);

    In the above, the intent of dividing a scalar by Duration/Time is not clear.

    Duration/N is conceivable but not N/Duration.

    Proposed solution:

    Remove the following free functions.
    const Duration operator /(uint32_t lhs, const Duration& rhs);

    const Time operator /(uint32_t lhs, const Time& rhs);

  • Reported: DDS-PSM-Cxx 1.0b1 — Wed, 1 Jun 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    Removed the operation:
    const Duration operator /(uint32_t lhs, const Duration& rhs);

    from the Duration class. The Time class did not have such a method to begin with.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

XML-Based QoS Policy Settings (DDS-PSM-Cxx/DDS-PSM-Java)

  • Key: DDSPSMC-1
  • Legacy Issue Number: 15965
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The newly introduced XML Based Policy configuration adds new methods in the core DDS entities that allow to fetch QoS from XML filers. This solution is not ideal since if generalized, e.g. QoS configuration from an URI, JSON stream, etc., would lead to an explosion of the core DDS API.

    The suggestion is to remove the added methods from the core API and use instead a Builder pattern (of some form).

    A sketch of the suggested change is provided below:

    PolicyBuilder builder = PolicyBuilder::load("XMLBuilder");

    TopicQos tqos = builder.topic_qos(file_name, profile_name);

    ==============================================================================

    Notice that the suggested approach allows to easily extend the supported format for QoS representation w/o any impact on the core DDS API and overall facilitate the support for multiple approaches.

  • Reported: DDS-PSM-Cxx 1.0b1 — Mon, 17 Jan 2011 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The class dds::core::qos::TQoSProvider provider has been added to the C++ API to allow the external configuration of QoS. Section 7.6.2.1 of the specification document has been updated accordingly to describe the dds::core::TQoSProvider

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Fixing bugs and improving usability of the InstanceHandle class

  • Key: DDSPSMC-7
  • Legacy Issue Number: 16340
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The InstanceHandle class in dds-psm-cxx\src\hpp\tdds\core\instancehandle.hpp appears to be incomplete in several ways.

    1. A missing constructor
    InstanceHandle(const DELEGATE & d) :
    dds::core::Value<DELEGATE>(d) {}

    There is no way to construct an instance handle except a null one!

    2. A missing copy-constructor
    InstanceHandle(const InstanceHandle& src) :
    dds::core::Value<DELEGATE>(src.delegate())
    { }

    3. Typos: a missing return and needs a dot instead of an arrow.

    InstanceHandle& operator=(const dds::core::null_type& src)

    { return this->delegate().operator=(src); }

    4. Missing comparison operators to allow comparisons like
    if(dds::null == instance_handle_object)

    Currently it supports other way round. The proposed solution is to add two overloaded operators in tdds::core namespace.

    template <class D>
    bool operator == (dds::core::null_type, InstanceHandle<D> const &ih)

    { return ih.is_nil(); }

    template <class D>
    bool operator != (dds::core::null_type, InstanceHandle<D> const &ih)

    { return !ih.is_nil(); }

    5. Finally, the InstanceHandle<D> class and in general the classes that support comparison with dds::null will benefit from supporting a generic and succinct syntax of the form: if(instance_handle_object).

    Proposed Solution:
    An idiomatic way of implenting it is the safe-bool idiom, which has been used widely in standard and boost smart pointer classes, such as std::auto_ptr, boost::shared_ptr. Here is a self-sufficient file that shows one way of implementing the safe bool idiom for the instance handle class:

    http://cpptruths.googlecode.com/svn/trunk/cpp/instance_handle.cpp

    Other possible implementation based on the discussions on the boost mailing list is available here:

    http://codepaste.net/c83uuj

  • Reported: DDS-PSM-Cxx 1.0b1 — Mon, 20 Jun 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The following changes have been applied to the TInstanceHandle class to address this issue:
    1. Defined a new constructor for initializing the instance handle with a specific type:
    template <typename ARG0>
    TInstanceHandle(const ARG0& arg0);
    2. Added copy constructor

    The problems 3, 4 , and 5 are rejected since an InstanceHandle is a Value as opposed to a Reference type. As such comparison with null_ref is conceptually non-correct and potentially highly misleading. The current API provides an isNil method to check wether the handle is or isn’t nil. In addition, the InstanceHandle defines the NilHandle to allow proper comparisons. To this hand an operator== for the InstanceHandle has been added.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Use traits for topic/datareader/datawriter

  • Key: DDSPSMC-9
  • Legacy Issue Number: 16374
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The proposed PSM takes the DDS PSM and now gives the users templates instead of new classes as with the IDL to C++ mapping.

    For example RadarTrackDataWriter becomes DataWriter<RadarTrack>.

    To my idea this this is syntactical sugar and I still see how the DDS implementation implement their support. I would like to propose a different way. As user I just have RadarTrack, that is coming from my user domain, so why now create a set of traits that can be used by the end user. Than he doesn't see anything special from DDS, not whether it is a template or a class.

    So he writes
    RadarTrack::data_writer_type dw = pub.create_datawriter()
    RadarTrack::topic_type tp = dp.create_topic().

    The DDS implementation can than do anything behind data_writer_type, the only thing the user has to know are the traits and the methods that are possible to be used.

  • Reported: DDS-PSM-Cxx 1.0b1 — Wed, 20 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Inheritance via dominance warning on Visual Studio

  • Key: DDSPSMC-8
  • Legacy Issue Number: 16354
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Visual Studio spits out many #C4250 warnings on the diamond hierarchy of listeners:

    for instance,
    DomainParticipantListener.hpp(48): warning C4250: 'dds::domain::NoOpDomainParticipantListener' : inherits 'dds::pub::NoOpPublisherListener::dds::pub::NoOpPublisherListener::on_offered_deadline_missed' via dominance

    Proposed solution:

    Add empty bodies for all the inherited virtual functions in all the NoOp*Listener classes. Particularly, NoOpDomainParticipantListener, NoOpPublisherListener, and NoOpSubscriberListener.

    Alternatively, #pragma warning( disable : 4250 ) could be used but its purpose will be less clear even with documentation: "Prevents via dominance warning."

  • Reported: DDS-PSM-Cxx 1.0b1 — Thu, 30 Jun 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    This problems raised by this issue are gone since the specification is not providing with default implementation of any methods. Trivial implementations where used during specification and finalization to ensure the implement-ability of the API along with catching compilation errors. However the finalized API does not include any implementation to avoid over-specification.

    Revised Text:
    No change.

    Disposition: Closed, no change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Improving usability of Reference class

  • Key: DDSPSMC-6
  • Legacy Issue Number: 16339
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    1. Safety of Reference<D> class should be improved by adding "explicit" keyword in the following constructors:

    template <typename D>
    Reference(const Reference<D>& ref);

    template <typename R>
    Reference(const R& that);

    Reference(const DELEGATE_REF_T& ref);

    2. With just member operator== and operator!= functions, Reference<D> can't be used in expressions like

    if(dds::null == r)

    { ... }

    Proposed solution: Add the following free functions in dds::core in Reference.hpp.

    template <class D>
    bool operator == (dds::null_type,
    const Reference<D> & r)

    { return r.is_nil(); }

    template <class D>
    bool operator != (dds::null_type,
    const Reference<D> & r)

    { return !r.is_nil(); }

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 17 Jun 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The changes suggested by the issue submitter have been applied to the Refence class.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

General Exception Safety Considerations

  • Key: DDSPSMC-12
  • Legacy Issue Number: 16403
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    1. The normative implementations shown in the wrapper classes should be at strong exception safe (or at least basic safe). For instance, implementation of DataReader:: create_readcondition as in dds-psm-cxx\src\hpp\dds\sub\DataReader.hpp is a shared_ptr usage anti-pattern.

    Proposed Solution:
    Create separate shared_ptr<T> objects for every new operation. Pass the shared_ptr<T> to the constructor of ReadCondition.

    2. All setters and getters (including overloaded operators) of EntityQos should be strong exception safe.

    Proposed Solution: Make copy-assignment operator of every qos type in normative namespaces strong exception safe.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 29 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

read/take consistency for loaned and non-loaned samples

  • Key: DDSPSMC-23
  • Legacy Issue Number: 17337
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The current DataReader API provides a slightly different API for getting samples when loaning the data vs. when providing user storage.

    When loaning the data the data and the SampleInfo is encapsulated on a Sample type, while when providing user storage two different containers hold the data and the SampleInfo.

    For consistency the two API should encapsulate the data and the SamplInfo on the Sample data structure.

  • Reported: DDS-PSM-Cxx 1.0b1 — Wed, 25 Apr 2012 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    This issue raises a relevant consistency issue. All the operations on the DataReader have been revised to consistently use the Sample type to hold both sample data and sample info.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

The tdds namespace should be merged into the dds namespace

  • Key: DDSPSMC-20
  • Legacy Issue Number: 16655
  • Status: closed  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DDS-PSM-Cxx specification groups types constructors into the "tdds" namespace. However this separation makes it harder than it should be to navigate the code. The suggested approach is to remove the "tdds" namespace and migrate those classes into the "dds" namespace by prefixing them with a "T". For instance the "tdds::sub::Subscriber" would become "dds::sub::TSubscriber".

  • Reported: DDS-PSM-Cxx 1.0b1 — Tue, 8 Nov 2011 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The API code has been refactored to remove the tdds namespace as suggested by the issue description. In addition figure 7.1 in section 7.2 and page 5 has been updated to reflect the new organization and figure 7.2 has been removed.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Getter/Setter for member arrays

  • Key: DDSPSMC-22
  • Legacy Issue Number: 16886
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The specification maps IDL array to C++ native array. There are two possible alternatives as far as getter/setter functions are concerned.

    class Foo {
    char data[10];
    public:
    char * begin_data()

    { return data; }
    char * end_data() { return data + 10; }


    void data(char * begin, char *end) {}


    template <class Iter>
    void data(Iter begin, Iter end) {}
    };


    AND


    class Foo {
    char data[10];
    public:
    char * data() { return data; }

    size_t data_size()

    { return 10; }

    void data(char *ptr, size_t size) {}
    };

    The first version is more consistent with modern C++ usage of iterators. In either case a convention must be defined for portability. This may also be applicable to idl sequences.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 9 Dec 2011 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    This issue is automatically resolved as a consequence of the new mapping defined for array as result of issue 16261.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Expected use of AnyDataReader::get and its implication on AnyDataReader's template constructor

  • Key: DDSPSMC-21
  • Legacy Issue Number: 16885
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    AnyDataReader::get is a member template function, which requires passing a type to retrieve a typed data-reader. For example,

    AnyDataReader adr;
    DataReader<RadarTrack> dr = adr.get<RadarTrack>();

    It is better to pass the topic type instead of the data-reader type. For example,

    AnyDataReader adr;
    DataReader<RadarTrack> dr = adr.get<dds::sub::DataReader<RadarTrack> >();

    The first version is less error prone.

    Construction of AnyDataReader, however, does not look consistent with this use. Currently, the template constructor of the AnyDataReader accepts a data-reader as a type parameter (not just the topic type).

    Also, it is not consistent with AnyDataWriter constructor, which takes topic type as a type parameter.

    Resolution: Use the style of AnyDataWriter in AnyDataReader, AnyTopic, and AnyTopicDescription. I.e., Use the topic type as a type parameter for constructor and get() member function.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 9 Dec 2011 05:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The AnyDataWriter in AnyDataReader, AnyTopic, and AnyTopicDescription now use consistently the topic type as a type parameter for constructor and get() member function. Free function get() have also been added to avoid exotic C++ syntax under some circumstances.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Supporting automatic conversion from value types to delegate types

  • Key: DDSPSMC-14
  • Legacy Issue Number: 16405
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Supporting some vendor-specific extension api is significantly easier using automatic conversion from value types to the delegate types. The situation arises when an extension method defined in the idds namespace takes a parameter defined only in the idds namespace. The parameter type may also be used as a delegate elsewhere. While the programmers can use the -> operator to invoke the extension method, the parameter need must be obtained using the delegate() method of the value type. It would be quite seamless to support automatic convertibility from value types to the delegate.

    Proposed Solution:
    Define two additional generic conversion operators in dds::core::Value<D> template.

    operator D & ()

    { return d_; }
    operator const D & () const { return d_; }

    ;

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 29 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The suggested conversion operators have been added into the Value and Reference classes.
    See:
    dds-psm-cxx/src/hpp/dds/core/Reference.hpp
    dds-psm-cxx/src/hpp/dds/core/Value.hpp

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Improving usability of EntityQoS API

  • Key: DDSPSMC-13
  • Legacy Issue Number: 16404
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    8. Supporting method chaining for setting qos parameters would improve readability of the API.

    For instance,
    DataWriterQos dwqos;
    dw >> dwqos;
    Dwqos.policy<History>().kind(KEEP_ALL).depth(200);
    Dwqos.policy<ResourceLimits>().max_samples(p).max_instances(q).max_samples_per_instance(r);
    dw << dwqos;

    Currently, it needs different function calls for every qos parameter.

    Proposed Solution: Change all the normative core qos policy classes (e.g., History, ResourceLimits) to return a reference to itself from the setters. Currently they return nothing.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 29 Jul 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    The problem raised has been addressed by equipping all the Policy classes with fluent setter methods. The example provided by this issue can now written as follows:

    DataWriterQos dwqos;
    dw >> dwqos;
    dwqos << History::KeepAll(200)
    << dwqos.policy<ResourceLimits>()
    .max_samples(p)
    .max_instances(q)
    .max_samples_per_instance(r);

    dw << dwqos;

    The changes applied to the given policy class P is to have its setter return P&.
    See dds-psm-cxx/blob/master/src/hpp/dds/core/policy/TCorePolicy.hpp

  • Updated: Fri, 6 Mar 2015 20:58 GMT

RadarTrack uses anonymous types

  • Key: DDSPSMC-17
  • Legacy Issue Number: 16563
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The RaderTrack uses an anonymous type in the example for plot on page 22
    of the beta 1 spec.

    So change

    struct RadarTrack

    { string id; long x; long y; long z; //@optional sequence<octet> plot; //@shared }

    ;

    To

    typdef sequence<octet> plot_type;
    struct RadarTrack

    { string id; long x; long y; long z; //@optional plot_type plot; //@shared }

    ;

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 23 Sep 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    Insert required typedefs

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Typos in Value.hpp, Exception.hpp

  • Key: DDSPSMC-16
  • Legacy Issue Number: 16562
  • Status: closed  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:
    • hpp\dds\core\Value.hpp around line 67 added & to the return value:

    const D* operator->() const

    { return &d_; }

    2- same file, line 58, 62 added "const" to != and == operators
    bool operator==(const Value& other) const

    { return (d_ == other.d_); }

    bool operator !=(const Value& other) const

    { return !(d_ == other.d_); }

    3- hpp\tdds\core\qos\EntityQos.hpp line 88 added "const" to declaration

    const EntityQos& operator >> (POLICY& p) const {

    4- dds\core\policy\CorePolicy.hpp, line 38. name() method is not public.
    class policy_name<POLICY>

    { \ public: \ static const std::string& name(); \ }

    ;

    5- hpp\dds\core\Exception.hpp, line 202 wrong parameter type in the ctor
    InvalidDataError(const InvalidDataError& src);

    Proposed solution:

    Add the missing things.

  • Reported: DDS-PSM-Cxx 1.0b1 — Wed, 21 Sep 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    Add missing designators. Notice that as the final API does not include any implementation only designators have been addressed

  • Updated: Fri, 6 Mar 2015 20:58 GMT

IDL mapping for non-trivial struct fields

  • Key: DDSPSMC-19
  • Legacy Issue Number: 16565
  • Status: closed  
  • Source: Northrop Grumman ( Trent Nadeau)
  • Summary:

    The “representative” example in Section 8.2 is not very “representative”. For example, everything in the struct can be trivially returned by value (either a basic type or a pointer) with no impact on performance.

    If, instead, there were a substructure that was large and/or deeply nested, this example seems to break down. For example:

    typedef sequence<long, 1000000> HugeLongSeq; // 4 MB

    struct LargeStruct

    { long id; HugeLongSeq mySeq; }

    ;

    struct RadarTrack

    { string id; long x; long y; long z; //@optional sequence<octet> plot; //@shared LargeStruct myLargeMember; // new field }

    ;

    According to Section 7.4, the return value of the accessor for myLargeMember would either return by value or const reference. This would cause two copies (one for return value of getter and another for setter) of 4 MB of data in order to change one element of LargeStruct::mySeq in the instance.

    I believe that use cases like this require accessors that return by non-const reference if the generated code is to be at all efficient. On page 17 of the Beta 1 spec, there is already use of this pattern for the non-const accessors on the History class (where it probably makes less sense since the types are small). I believe that this pattern should also be used for generated code where many large types can be arbitrarily nested.

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 23 Sep 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    This issue can be easily fixed by ensuring that constructed and sequence types have a reference return type as opposed to a const reference.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

optional support

  • Key: DDSPSMC-18
  • Legacy Issue Number: 16564
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS PSM does expose dds::core::optional to the end user when he uses
    @optional. At some moment we also have this available at the CCM level,
    what about using something that is not tied to DDS in the user defined
    type? Is there nothing in STL that can be used for this?

  • Reported: DDS-PSM-Cxx 1.0b1 — Fri, 23 Sep 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Make parameter passing same for native/type parameters

  • Key: DDSPSMC-15
  • Legacy Issue Number: 16411
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    We would like to propose to make the mapping for native and type parameters the same. So const T& for in and T/const T& for return. This makes the mapping easier and more consistent. For example the DDS InstanceHandle_t is defined as native, some vendors define it as long, some as a struct which leads to different code being generated when the end user has a local interface with a DDS InstanceHandle_t as argument. Also when the end user changes a typedef from a native to a struct the argument passing doesn't change from T to const T&. This doesn't impact performance in anyway, it just makes the mapping the same for all types

  • Reported: DDS-PSM-Cxx 1.0b1 — Mon, 1 Aug 2011 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0b2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Update specification for final DDS-XTypes

  • Legacy Issue Number: 17305
  • Status: closed  
  • Source: DECA ( Rick Warren)
  • Summary:

    The second FTF of the DDS-XTypes spec introduced several API changes that should be incorporated into the DDS-PSM-Cxx spec.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 11 Apr 2012 04:00 GMT
  • Disposition: Resolved — DDS-PSM-Cxx 1.0
  • Disposition Summary:

    Update the DDS-PSM-Cxx API to reflect the finalization of the X-Type speficication.

  • Updated: Fri, 6 Mar 2015 20:58 GMT