MATLAB Mapping for Enumerations

A Slice enumeration maps to the corresponding enumeration in MATLAB. For example:

Slice
enum Fruit { Apple, Pear, Orange }

The MATLAB mapping for Fruit is shown below:

MATLAB
classdef Fruit < int32
    enumeration
        Apple (0)
        Pear (1)
        Orange (2)
    end
    methods(Static)
        ...
        function r = ice_getValue(v)
            switch v
                case 0
                    r = Fruit.Apple;
                case 1
                    r = Fruit.Pear;
                case 2
                    r = Fruit.Orange;
                otherwise
                    throw(Ice.MarshalException(...));
            end
        end
    end
end

Given the above definitions, we can use enumerated values as follows:

MATLAB
f1 = Fruit.Apple;
f2 = Fruit.Orange;

if f1 == Fruit.Apple % Compare with constant
    % ...
end

if f1 == f2          % Compare two enums
    % ...
end

switch f2            % Switch on enum
    case Fruit.Apple
        % ...
    case Fruit.Pear
        % ...
    case Fruit.Orange
        % ...
end

You can obtain the ordinal value of an enumerator using the int32 function:

MATLAB
val = int32(Fruit.Pear);
assert(val == 1);

To convert an integer into its equivalent enumerator, call the ice_getValue function:

MATLAB
f = Fruit.ice_getValue(2);
assert(f == Fruit.Orange);

This function raises an exception if the given integer does not match any of the enumerators.

Note that the generated class contains a number of other members, which we have not shown. These members are internal to the Ice run time and you must not use them in your application code (because they may change from release to release).

The Fruit definition above shows the ordinal values assigned by default to the enumerators. Suppose we modify the definition to include a custom enumerator value:

Slice
enum Fruit { Apple, Pear = 3, Orange }

The generated code changes accordingly:

MATLAB
classdef Fruit < int32
    enumeration
        Apple (0)
        Pear (3)
        Orange (4)
    end
    ...
end

See Also