Vendor-specific Issues in DEEP

This document describes the vendor-specific differences in DDS implementation that must be dealt with in the DEEP framework. We focus specifically on differences that must be handled in the source code of the framework, excluding anything that must be handled at runtime. Runtime issues may be added to a later version of this document.


Description Differences Compliance Issue?
type of DomainId_t (native in spec IDL)
  • OpenSplice - char*
  • RTI DDS - signed 32-bit int
  • TAO DDS - signed 32-bit int
NO (clearly the DDS spec intent is signed 32-bit int but it's not required)
use of namespace DDS
  • OpenSplice - yes
  • RTI DDS - yes, but must include extra header file
  • TAO DDS - yes
NO (C++ mapping requires it, but it's obtainable from all vendors)
mapping of IDL modules to namespaces
  • OpenSplice - yes
  • RTI DDS - not by default (needs command line option)
  • TAO DDS - yes
NO (C++ mapping requires it, but it's obtainable from all vendors)
use of CORBA _ptr and _var types
  • OpenSplice - yes
  • RTI DDS - no (without RTI CORBA Compatibility Kit)S
  • TAO DDS - yes
YES (It's an IDL to C++ mapping issue)
use of CORBA basic types
  • OpenSplice - no (uses native in C++ standalone generation)
  • RTI DDS - no (proprietary typedefs without RTI CORBA Compatibility Kit)
  • TAO DDS - yes
YES (Not a CORBA issue but IDL to C++ mapping - see section 1.3)
scope of generation from implied IDL
  • OpenSplice - same as original IDL
  • RTI DDS - same as original IDL
  • TAO DDS - configurable (global scope by default)
UNKNOWN (I can't find any reference to it in the DDS spec)
type registration
  • OpenSplice - fooTypeSupport instantiated on stack
  • RTI DDS - no instantiation (register_type() is static)
  • TAO DDS - fooTypeSupport instantiated on heap
YES (Only TAO DDS is conpliant here - see section 1.3 of IDL C++ mapping)
type of [datatype]Seq max length
  • OpenSplice - unsigned long
  • RTI DDS - signed long
  • TAO DDS - unsigned long
YES (C++ mapping prescribes IDL sequence length as CORBA::ULong)
resolution of DomainParticipantFactory
  • OpenSplice - static instance() method
  • RTI DDS - static instance() method
  • TAO DDS - proprietary global function
YES (TAO DDS is non-compliant)
passing of ConditionSeq to wait()
  • OpenSplice - by pointer
  • RTI DDS - by reference
  • TAO DDS - does not support WaitSets or conditions
YES (RTI DDS is compliant with IDL C++ mapping)
passing of [datatype]Seq and SampleInfoSeq to take()
  • OpenSplice - by pointer
  • RTI DDS - by reference
  • TAO DDS - by pointer
YES (RTI DDS is compliant with IDL C++ mapping)
identifier for generated downcasting method
  • OpenSplice - _narrow
  • RTI DDS - narrow
  • TAO DDS - _narrow
YES (RTI DDS is non-compliant with IDL C++ mapping)
StatusMask arg in create_* methods
  • OpenSplice - no
  • RTI DDS - yes
  • TAO DDS - no
YES (RTI DDS compliant with DDS 1.1 & 1.2, others compliant only with DDS 1.0)
proprietary listener methods
  • OpenSplice - no
  • RTI DDS - no
  • TAO DDS - yes (in DataReaderListener and DataWriterListener)
YES (the extra methods are pure virtual, and must be recognized and implemented)