Dynamic Data
[Topic Module]

<<eXtension>> The Dynamic Data API provides a way to interact with arbitrarily complex data types at runtime without the need for code generation. More...

Classes

class  DDSDynamicDataTypeSupport
 A factory for registering a dynamically defined type and creating DDS_DynamicData objects. More...
class  DDSDynamicDataReader
 Reads (subscribes to) objects of type DDS_DynamicData. More...
class  DDSDynamicDataWriter
 Writes (publishes) objects of type DDS_DynamicData. More...
struct  DDS_DynamicDataProperty_t
 A collection of attributes used to configure DDS_DynamicData objects. More...
struct  DDS_DynamicDataTypeSerializationProperty_t
 Properties that govern how data of a certain type will be serialized on the network. More...
struct  DDS_DynamicDataInfo
 A descriptor for a DDS_DynamicData object. More...
struct  DDS_DynamicDataMemberInfo
 A descriptor for a single member (i.e. field) of dynamically defined data type. More...
struct  DDS_DynamicData
 A sample of any complex data type, which can be inspected and manipulated reflectively. More...
struct  DDS_DynamicDataSeq
 An ordered collection of DDS_DynamicData elements. More...
struct  DDS_DynamicDataTypeProperty_t
 A collection of attributes used to configure DDSDynamicDataTypeSupport objects. More...

Defines

#define DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED
 A sentinel value that indicates that no member ID is needed in order to perform some operation.

Typedefs

typedef DDS_Long DDS_DynamicDataMemberId
 An integer that uniquely identifies some member of a data type within that type.

Variables

struct DDS_DynamicDataProperty_t DDS_DYNAMIC_DATA_PROPERTY_DEFAULT
 Sentinel constant indicating default values for DDS_DynamicDataProperty_t.
struct
DDS_DynamicDataTypeProperty_t 
DDS_DYNAMIC_DATA_TYPE_PROPERTY_DEFAULT
 Sentinel constant indicating default values for DDS_DynamicDataTypeProperty_t.

Detailed Description

<<eXtension>> The Dynamic Data API provides a way to interact with arbitrarily complex data types at runtime without the need for code generation.

This API allows you to define new data types, modify existing data types, and interact reflectively with samples. To use it, you will take the following steps:

1. Obtain a DDS_TypeCode (see Type Code Support) that defines the type definition you want to use.
A DDS_TypeCode includes a type's kind (DDS_TCKind), name, and members (that is, fields). You can create your own DDS_TypeCode using the DDS_TypeCodeFactory class -- see, for example, the DDS_TypeCodeFactory::create_struct_tc method. Alternatively, you can use a remote DDS_TypeCode that you discovered on the network (see Built-in Topics) or one generated by rtiddsgen.

2. Wrap the DDS_TypeCode in a DDSDynamicDataTypeSupport object.
See the constructor DDSDynamicDataTypeSupport::DDSDynamicDataTypeSupport. This object lets you connect the type definition to a DDSDomainParticipant and manage data samples (of type DDS_DynamicData).

3. Register the DDSDynamicDataTypeSupport with one or more domain participants.
See DDSDynamicDataTypeSupport::register_type. This action associates the data type with a logical name that you can use to create topics. (Starting with this step, working with a dynamically defined data type is almost exactly the same as working with a generated one.)

4. Create a DDSTopic from the DDSDomainParticipant.
Use the name under which you registered your data type -- see DDSDomainParticipant::create_topic. This DDSTopic is what you will use to produce and consume data.

5. Create a DDSDynamicDataWriter and/or DDSDynamicDataReader.
These objects will produce and/or consume data (of type DDS_DynamicData) on the DDSTopic. You can create these objects directly from the DDSDomainParticipant -- see DDSDomainParticipant::create_datawriter and DDSDomainParticipant::create_datareader -- or by first creating intermediate DDSPublisher and DDSSubscriber objects -- see DDSDomainParticipant::create_publisher and DDSDomainParticipant::create_subscriber.

6. Write and/or read the data of interest.

7. Tear down the objects described above.
You should delete them in the reverse order in which you created them. Note that unregistering your data type with the DDSDomainParticipant is optional; all types are automatically unregistered when the DDSDomainParticipant itself is deleted.


Define Documentation

#define DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED

A sentinel value that indicates that no member ID is needed in order to perform some operation.

Most commonly, this constant will be used in "get" operations to indicate that a lookup should be performed based on a name, not on an ID.

See also:
DDS_DynamicDataMemberId


Typedef Documentation

An integer that uniquely identifies some member of a data type within that type.

The range of a member ID is the range of an unsigned short integer, except for the value 0, which is reserved.

See also:
DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED


Variable Documentation

Sentinel constant indicating default values for DDS_DynamicDataProperty_t.

Pass this object instead of your own DDS_DynamicDataProperty_t object to use the default property values:

See also:
DDS_DynamicDataProperty_t

Sentinel constant indicating default values for DDS_DynamicDataTypeProperty_t.

Pass this object instead of your own DDS_DynamicDataTypeProperty_t object to use the default property values:

 DDS_DynamicDataTypeSupport* support = new DDS_DynamicDataTypeSupport( 
      myTypeCode, 
      &DDS_DYNAMIC_DATA_TYPE_PROPERTY_DEFAULT); 

See also:
DDS_DynamicDataTypeProperty_t


RTI Data Distribution Service C++ API Version 4.5e Copyright © 23 Oct 2011 Real-Time Innovations, Inc