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

