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

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

  • Acronym: DDS-PSM-Cxx
  • Issues Count: 66
  • Description: Issues not resolved
Open Closed All
Issues not resolved

Issues Summary

Key Issue Reported Fixed Disposition Status
DDSPSMC11-7 API corrections required to src/hpp/dds/core/TQosProvider.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-66 Make use of C++11 final/override/delete DDS-PSM-Cxx 1.0 open
DDSPSMC11-65 Generic InstanceHandle constructor should be explicit DDS-PSM-Cxx 1.0 open
DDSPSMC11-44 Provide extension constructors for standard classes DDS-PSM-Cxx 1.0 open
DDSPSMC11-45 Default Constructors DDS-PSM-Cxx 1.0b2 open
DDSPSMC11-53 DynamicData should be value type, not a reference type DDS-PSM-Cxx 1.0 open
DDSPSMC11-35 API correction required to src/hpp/dds/sub/TDataReader.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-64 Inconsistent ways to set functor in Condition types DDS-PSM-Cxx 1.0 open
DDSPSMC11-13 API correction required to src/hpp/dds/core/policy/TCorePolicy.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-63 API correction required to dds/sub/find.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-62 Correction required to dds/sub/ddssub.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-33 API correction required to src/hpp/dds/sub/SharedSamples.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-17 API correction required to src/hpp/dds/core/types.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-61 API correction required to dds/topic/TBuiltinTopic.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-23 API correction required to src/hpp/dds/pub/AnyDataWriter.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-60 Missing constants/functions to obtain the built-in topic names DDS-PSM-Cxx 1.0 open
DDSPSMC11-24 Documentation comments corrections to src/hpp/dds/pub/TPublisher.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-59 Selector missing next_instance() function DDS-PSM-Cxx 1.0 open
DDSPSMC11-27 Missing file dds/pub/detail/find.hpp referenced in src/hpp/dds/pub/find.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-58 dds/pub/find.hpp is incomplete DDS-PSM-Cxx 1.0 open
DDSPSMC11-21 Documentation comments corrections required to src/hpp/dds/domain/discovery.hpp & find.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-57 Missing get_discovered_participants and get_discovered_participant_data functions DDS-PSM-Cxx 1.0 open
DDSPSMC11-56 Declaring Reference::operator new() private causes undesired side effects DDS-PSM-Cxx 1.0 open
DDSPSMC11-46 API needs a standardized way of downcasting API entities DDS-PSM-Cxx 1.0 open
DDSPSMC11-55 Method SampleInfo::valid() should be renamed SampleInfo::valid_data() DDS-PSM-Cxx 1.0 open
DDSPSMC11-54 API corrections required to dds/core/Duration.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-32 API correction required to src/hpp/dds/sub/LoanedSamples.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-14 API correction required to src/hpp/dds/core/status/State.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-52 API correction required to dds/core/Time.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-51 API corrections required to dds/sub/AnyDataReader.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-50 API does not provide functionality from the DomainParticipantFactory DDS-PSM-Cxx 1.0 open
DDSPSMC11-49 API corrections required to ManipulatorSelector and related functions DDS-PSM-Cxx 1.0 open
DDSPSMC11-48 Name clash between Topic discovery functions DDS-PSM-Cxx 1.0 open
DDSPSMC11-47 Inheritance hierarchy of C++11 PSM conflicts with inheritance hierarchy from DDS PIM DDS-PSM-Cxx 1.0 open
DDSPSMC11-31 API correction required to src/hpp/dds/sub/DataReaderListener.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-30 DataReader.hpp, ContentFilteredTopic.hpp, Topic.hpp, TopicDescription.hpp o not compile with MS Visual Studio DDS-PSM-Cxx 1.0 open
DDSPSMC11-29 API correction required to src/hpp/dds/sub/AnyDataReaderListener.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-28 API correction required to src/hpp/dds/pub/qos/detail/DataWriterQos.hpp & PublisherQos.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-26 Documentation comments corrections to src/hpp/dds/pub/discovery.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-25 API correction required to src/hpp/dds/pub/TSuspendedPublication.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-22 API correction required to src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-20 API correction required to src/hpp/dds/domain/TDomainParticipant.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-19 src/hpp/dds/domain/TDomainId.hpp should be removed from the API DDS-PSM-Cxx 1.0 open
DDSPSMC11-18 API correction required to src/hpp/dds/dds.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-16 API correction required to src/hpp/dds/core/status/TStatus.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-15 API correction required to src/hpp/dds/core/ref_traits.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-12 API correction required to src/hpp/dds/core/detail/conformance.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-11 Example vendor code is incorrect DDS-PSM-Cxx 1.0 open
DDSPSMC11-10 API correction required to src/hpp/dds/core/cond/TWaitSet.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-9 API correction required to src/hpp/dds/core/cond/StatusCondition.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-8 Code in src/hpp/dds/core/array.hpp does not compile DDS-PSM-Cxx 1.0 open
DDSPSMC11-6 API corrections required to src/hpp/dds/core/TInstanceHandle.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-5 Inconsistent use of Type/type - fix compilation DDS-PSM-Cxx 1.0 open
DDSPSMC11-4 API correction required to src/hpp/dds/core/Optional.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-3 API corrections required to src/hpp/dds/core/Exception.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-1 Condition classes should only be used with WaitSets DDS-PSM-Cxx 1.0b2 open
DDSPSMC11-43 Missing TBuiltinTopicTypes DDS-PSM-Cxx 1.0 open
DDSPSMC11-42 dds/core/cond/TCondition.hpp should have virtual methods DDS-PSM-Cxx 1.0 open
DDSPSMC11-41 Ownership label SHARED is already defined as a macro in some SUN compilers DDS-PSM-Cxx 1.0b2 open
DDSPSMC11-40 Compilation error in dds/core/policy/PolicyKind.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11-39 Names of the generated headers DDS-PSM-Cxx 1.0 open
DDSPSMC11-34 API correction required to src/hpp/dds/sub/SubscriberListener.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-38 API correction required to src/hpp/dds/core/cond/detail/GuardCondition.hpp DDS-PSM-Cxx 1.0 open
DDSPSMC11-37 Small correctes to the specification DDS-PSM-Cxx 1.0 open
DDSPSMC11-36 Normative references not complete and out of date DDS-PSM-Cxx 1.0 open
DDSPSMC11-2 EntityQos is overly general DDS-PSM-Cxx 1.0b2 open

Issues Descriptions

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

  • Legacy Issue Number: 18616
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Thu, 3 Aug 2017 18:37 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.0 — Mon, 26 Jun 2017 06:50 GMT
  • Updated: Wed, 19 Jul 2017 21:22 GMT

Generic InstanceHandle constructor should be explicit

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Mon, 19 Sep 2016 16:59 GMT
  • Updated: Mon, 19 Sep 2016 16:59 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.0 — Mon, 4 Jan 2016 20:20 GMT
  • Updated: Tue, 13 Sep 2016 22:48 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: Tue, 13 Sep 2016 22:25 GMT

DynamicData should be value type, not a reference type

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 22:18 GMT
  • Updated: Tue, 13 Sep 2016 22:18 GMT

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

  • Legacy Issue Number: 18649
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Tue, 13 Sep 2016 22:16 GMT

Inconsistent ways to set functor in Condition types

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Thu, 21 Jul 2016 22:35 GMT
  • Updated: Thu, 21 Jul 2016 22:39 GMT

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

  • Legacy Issue Number: 18627
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Thu, 21 Jul 2016 22:30 GMT

API correction required to dds/sub/find.hpp

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

    The return type of dds::sub::builtin_subscriber() is a const reference, forcing to keep the builtin subscriber is kept 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.0 — Thu, 21 Jul 2016 22:12 GMT
  • Updated: Thu, 21 Jul 2016 22:12 GMT

Correction required to dds/sub/ddssub.hpp

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

    Missing include:

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

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

  • Legacy Issue Number: 18647
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Wed, 20 Jul 2016 17:30 GMT

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

  • Legacy Issue Number: 18631
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Tue, 19 Jul 2016 22:45 GMT

API correction required to dds/topic/TBuiltinTopic.hpp

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Mon, 18 Jul 2016 22:03 GMT
  • Updated: Mon, 18 Jul 2016 22:03 GMT

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

  • Legacy Issue Number: 18637
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Mon, 18 Jul 2016 21:39 GMT

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

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Fri, 15 Jul 2016 18:50 GMT
  • Updated: Fri, 15 Jul 2016 18:50 GMT

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

  • Legacy Issue Number: 18638
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Thu, 14 Jul 2016 23:43 GMT

Selector missing next_instance() function

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Thu, 14 Jul 2016 23:06 GMT
  • Updated: Thu, 14 Jul 2016 23:06 GMT

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

  • Legacy Issue Number: 18641
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Thu, 14 Jul 2016 18:32 GMT

dds/pub/find.hpp is incomplete


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

  • Legacy Issue Number: 18635
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Thu, 14 Jul 2016 18:26 GMT

Missing get_discovered_participants and get_discovered_participant_data functions

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Thu, 14 Jul 2016 18:21 GMT
  • Updated: Thu, 14 Jul 2016 18:23 GMT

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

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 23:54 GMT
  • Updated: Wed, 13 Jul 2016 23:54 GMT

API needs a standardized way of downcasting API entities

  • Status: open  
  • Source: PrismTech ( 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.0 — Wed, 16 Mar 2016 19:03 GMT
  • Updated: Wed, 13 Jul 2016 23:13 GMT

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

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 23:07 GMT
  • Updated: Wed, 13 Jul 2016 23:08 GMT

API corrections required to dds/core/Duration.hpp

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 22:46 GMT
  • Updated: Wed, 13 Jul 2016 22:46 GMT

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

  • Legacy Issue Number: 18646
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Wed, 13 Jul 2016 22:02 GMT

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

  • Legacy Issue Number: 18628
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Wed, 13 Jul 2016 20:19 GMT

API correction required to dds/core/Time.hpp

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 18:12 GMT
  • Updated: Wed, 13 Jul 2016 18:12 GMT

API corrections required to dds/sub/AnyDataReader.hpp

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 18:07 GMT
  • Updated: Wed, 13 Jul 2016 18:07 GMT

API does not provide functionality from the DomainParticipantFactory

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 17:57 GMT
  • Updated: Wed, 13 Jul 2016 17:59 GMT

API corrections required to ManipulatorSelector and related functions

  • Status: open  
  • Source: Real-Time Innovations ( 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.0 — Wed, 13 Jul 2016 17:41 GMT
  • Updated: Wed, 13 Jul 2016 17:42 GMT

Name clash between Topic discovery functions

  • Status: open  
  • Source: PrismTech ( 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.0 — Wed, 16 Mar 2016 19:53 GMT
  • Updated: Wed, 13 Jul 2016 17:14 GMT

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

  • Status: open  
  • Source: PrismTech ( 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.0 — Wed, 16 Mar 2016 19:27 GMT
  • Updated: Wed, 16 Mar 2016 19:27 GMT

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

  • Legacy Issue Number: 18645
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Tue, 22 Sep 2015 13:58 GMT

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

  • Legacy Issue Number: 18644
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Tue, 22 Sep 2015 13:55 GMT

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

  • Legacy Issue Number: 18643
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Tue, 22 Sep 2015 13:44 GMT

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

  • Legacy Issue Number: 18642
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Mon, 21 Sep 2015 18:07 GMT

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

  • Legacy Issue Number: 18640
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Mon, 21 Sep 2015 17:56 GMT

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

  • Legacy Issue Number: 18639
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Mon, 21 Sep 2015 17:54 GMT

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

  • Legacy Issue Number: 18636
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Mon, 21 Sep 2015 13:52 GMT

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

  • Legacy Issue Number: 18634
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 04:49 GMT

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

  • Legacy Issue Number: 18633
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 02:22 GMT

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

  • Legacy Issue Number: 18632
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 02:19 GMT

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

  • Legacy Issue Number: 18630
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 02:08 GMT

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

  • Legacy Issue Number: 18629
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 02:05 GMT

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

  • Legacy Issue Number: 18626
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 01:00 GMT

Example vendor code is incorrect

  • Legacy Issue Number: 18625
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 00:57 GMT

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

  • Legacy Issue Number: 18619
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sat, 19 Sep 2015 00:47 GMT

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

  • Legacy Issue Number: 18618
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 04:59 GMT

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

  • Legacy Issue Number: 18617
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 04:55 GMT

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

  • Legacy Issue Number: 18615
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 04:39 GMT

Inconsistent use of Type/type - fix compilation

  • Legacy Issue Number: 18614
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 04:33 GMT

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

  • Legacy Issue Number: 18613
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 04:08 GMT

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

  • Legacy Issue Number: 18612
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 18 Sep 2015 03:49 GMT

Condition classes should only be used with WaitSets

  • Legacy Issue Number: 17063
  • Status: open  
  • Source: Anonymous
  • 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: Fri, 18 Sep 2015 03:05 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.0 — Tue, 9 Jun 2015 04:00 GMT
  • Updated: Wed, 1 Jul 2015 21:49 GMT

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

  • Status: open  
  • Source: PrismTech ( Erik Hendriks)
  • Summary:

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

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

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

  • Status: open  
  • Source: PrismTech ( Erik Hendriks)
  • Summary:

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

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

    git diff:

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

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

  • Status: open  
  • Source: PrismTech ( Erik Hendriks)
  • Summary:

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

    git diff:

    @@ -96,7 +96,7 @@ namespace dds { namespace core { namespace policy {
         }; };
       typedef dds::core::safe_enum<LivelinessKind_def> LivelinessKind;
    
    -  namespace TypeConsistencyEnforcementKind_def {
    +  struct TypeConsistencyEnforcementKind_def {
         enum type {
           EXACT_TYPE_TYPE_CONSISTENCY,
           EXACT_NAME_TYPE_CONSISTENCY,
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 13 Apr 2015 13:46 GMT
  • Updated: Mon, 11 May 2015 11:00 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.0 — Mon, 27 Apr 2015 04:00 GMT
  • Updated: Tue, 28 Apr 2015 06:29 GMT

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

  • Legacy Issue Number: 18648
  • Status: open  
  • Source: Micro Focus ( 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.0 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Fri, 17 Apr 2015 14:24 GMT

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

  • Legacy Issue Number: 18620
  • Status: open  
  • Source: Micro Focus ( 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.0 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 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.0 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 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.0 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 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: Fri, 6 Mar 2015 20:57 GMT