Язык EXPRESS. Глава 3. Тип данных ENUMERATION.

Тип ENUMERATION в языке EXPRESS является конструируемым (constructed) типом, а ближайшей его аналогией является enum class языка C++. Тип используется для задания перечисляемых значений, в реализациях СИДД работа с атрибутами перечисляемого типа ведётся через строковые значения, так как при наличии одинаковых значений в процессе создания новых ревизий схемы может меняться их индексация, если были добавлены новые значения или изменился порядок старых (например, изменения индексации наблюдаются в версиях формата IFC).

TYPE DirectionsEnum = ENUMERATION OF
(NORTH
,EAST
,SOUTH
,WEST);
END_TYPE;

В языке EXPRESS тип ENUMERATION может быть расширяемым (extendable), т.е. возможно наследование от базового ENUM для дополнения его новыми перечисляемыми значениями, например:

TYPE DirectionsEnumBase = EXTENSIBLE ENUMERATION OF
 (NORTH
 ,EAST
 ,SOUTH
 ,WEST);
END_TYPE;

Дополним набор значений базового типа четырьмя дополнительными:

TYPE ExtendedDirectionsEnum = ENUMERATION BASED_ON DirectionsEnumBase WITH
 (NORTH_EAST
 ,NORTH_WEST
 ,SOUTH_EAST
 ,SOUTH_WEST);
END_TYPE;

Следующий тип наследует пункты из своего базового типа, но при этом тоже является расширяемым перечислением:

TYPE ExtensibleExtendedDirectionsEnum = EXTENSIBLE ENUMERATION BASED_ON BaseDirectionsEnum WITH
 (NORTH_EAST
 ,NORTH_WEST
 ,SOUTH_EAST
 ,SOUTH_WEST);
END_TYPE;

Так как ENUMERATION в схеме всегда присутствует как именованный тип, для него могут быть заданы ограничения, что на практике обычно не используется:

TYPE NorthDirectionsEnum = ENUMERATION BASED_ON ExtensibleExtendedDirectionsEnum;
  WHERE
    WR1 : SELF IN ['NORTH', 'NORTH_EAST', 'NORTH_WEST'];
END_TYPE;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *