.. _`MATLAB without IDL`: ################## MATLAB without IDL ################## It is possible, but not recommended, to directly create MATLAB classes that represent DDS topics. This approach allows you to quickly start using Vortex DDS, but it has a number of disadvantages: * without IDL, you cannot reliably define the topic in other language bindings. * not all IDL types are available. Creating a MATLAB Topic class ***************************** To create a Topic Class without IDL, create a MATLAB class that inherits from Vortex.AbstractType. The class will be interpreted as an IDL struct. Class properties will be interpreted as IDL struct fields. Finally, the class must define a static method `getKey` which returns a comma separated list of key fields for the topic. The following shows a simple MATLAB class, ShapeType:: classdef ShapeType < Vortex.AbstractType properties color char % IDL: string color; x int32 % IDL: long x; y int32 % IDL: long y; shapesize int32 % IDL: long shapesize; end methods (Static) function keys = getKey keys = 'color'; end end end The topic class defines four fields, and identifies the ``color`` field as the topic key. You would use the topic class in the same way as one generated by IDLPP. The following example shows the creation of a DDS topic object from a topic class:: % define a Vortex DDS topic called 'Circle' circleTopic = Vortex.Topic('Circle', ?ShapeType); With the `circleTopic` variable, you can then create appropriate Vortex DDS readers and writers. Mapping of MATLAB types to IDL types ************************************ When using an IDL-less Topic class, the Vortex DDS API for MATLAB makes maps property types to IDL types as follows: =========== ===================== MATLAB Type IDL Type =========== ===================== logical boolean int8 char uint8 octet int16 short uint16 unsigned short int32 long uint32 unsigned long int64 long long uint64 unsigned long long single float double double char string class equivalent IDL struct enum class equivalent IDL enum not type double =========== ===================== Creating arrays *************** When defining a topic class, you can make a field map to an IDL array by initializing it to an array of the appropriate dimensions. The MATLAB API for Vortex DDS recognizes arrays of most types as identifying IDL arrays. The one exception is that arrays of MATLAB ``char`` are still interpreted as an IDL string. The following example shows an topic class that defines arrays:: classdef ArrayTopic < Vortex.AbstractType properties x = zeros([1 4]) %IDL: double x[4]; y int32 = zeros([3 4]) %IDL: long y[3][4]; end methods (Static) function keys = getKey keys = ''; %No Key end end end Unsupported Types ***************** When creating topics with out IDL, you must accept the following restrictions: * IDL sequences cannot be defined. * arrays of IDL strings cannot be defined. * bounded IDL strings cannot be defined.