Телекоммуникационные технологии. Том 1

       

Варианты


Определенные структуры могут иметь варианты, базирующиеся на некотором знании того, что доступно в среде. Селектор должен иметь тип нумерованного элемента, который определяет возможные варианты структуры. Телу структуры варианта может быть присвоена метка для ссылок. Механизм, с помощью которого при работе выбирается вариант, языком презентации не определен.

struct {

T1 f1;
T2 f2;
....
Tn fn;
select (E) {
case e1: Te1;
case e2: Te2;
....
case en: Ten;
} [[fv]];} [[Tv]];

Например:

enum { apple, orange } VariantTag;
struct {

uint16 number;
opaque string<0..10>; /* переменная длина */
} V1;

struct {

uint32 number;
opaque string[10]; /* фиксированная длина */
} V2;

struct {

select (VariantTag) {/* value of selector is implicit */
case apple: V1;/* VariantBody, tag = apple */
case orange: V2;/* VariantBody, tag = orange */
} variant_body;/* optional label on variant */
} VariantRecord;

Структуры варианта могут быть подготовлены (сужены) путем спецификации значения селектора до спецификации типа. Например: orange VariantRecord является суженным типом для VariantRecord, содержащего variant_body типа V2.



Содержание раздела