1. OMG Mailing List
  2. DDS PSM Cxx v1.1 Revision Task Force. This RTF has been re-chartered at the Boston 2018 meeting.

Open Issues

  • Issues not resolved
  • Name: dds-psm-cxx-rtf
  • Issues Count: 80

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_-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

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/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