ГОСТ Р И С 0 10303-11 — 2009
8.4.1 Перечисляемый тип данных
Областьюопределения перечисляемого типаданных является множество имен. Размерданного мно
жества имен определяется в зависимости от типа перечисляемого типа данных. Различают следующие
перечисляемые типыданных:
- наращиваемый перечисляемый типданных:
- перечисляемый тип данных, расширяющий наращиваемый перечисляемый тип данных, другими
словами, основанный на наращиваемом перечисляемом типе данных;
- перечисляемый типданных, который не является ни наращиваемым, ни расширяющим.
Имена, объявляемые посредством ключевого слова ENUMERATION, могут быть толькодопустимыми
значениями перечисляемого типа данных. Каждое имя из данной области определения называется эле
ментом перечисления и обозначается enumeration_id.
Областью определения перечисляемого типа данных, который не является ни наращиваемым, ни
расширяющим, задаваемой при его объявлении, является упорядоченное множество элементов перечис
ления, указанных при его объявлении.
Областью определения наращиваемого перечисляемого типа данных является множество эле
ментов перечисления, указанных при его объявлении, плюс объединение множеств элементов перечис
лений. заключающее в себе области определения всех расширяющих перечисляемых типов данных.
Наращиваемый перечисляемый тип данных является обобщением основанных на нем перечисляемых
типов данных. Наращиваемый перечисляемый тип данных задается посредством ключевого слова
EXTENSIBLE.
Областью определения расширяющего перечисляемого типа данных является множество элементов
перечисления, указанных при его объявлении, плюс элементы перечисления, указанные непосредственно (а
не через расширение) в наращиваемом перечисляемом типе данных, на котором он основан. Расширя
ющий перечисляемый тип данных задается посредством ключевого слова BASED_ON.
Перечисляемый тип данных может быть как наращиваемым, так и расширяющим перечисляемым
типомданных. Наращиваемый перечисляемый ттшданных может быть задан без элементов перечисления, а
также основан надругом наращиваемом перечисляемом типеданных без задания элементов перечисле
ния. расширяющих данное базисное перечисление. Взаимосвязь «основан на» является транзитивной, то
есть расширяющее перечисление остается основанным на наращиваемом перечислении самого верхнего
уровня даже при наличии нескольких уровней взаимосвязей «основан на»; расширяющее перечисление
включает все элементы, как промежуточных наращиваемых перечислений, так и наращиваемого перечис
ления самого верхнего уровня.
П р и м е ч а н и я
1 Наращиваемое перечисление, расширенное два или более раза в одном контексте, может иметь боль
шую область определения, чем его расширения, и в этом случае оно действительно является обобщением.
2 В первой редакции настоящего стандарта упорядочение элементов перечисления определяло упорядо
чение значений. В настоящем стандарте не определено никакого упорядочения, за исключением указанного
ниже в правиле по перечислению d). Это сделано, чтобы обеспечить существование наращиваемых перечисляе
мых типов данных, в которых упорядочение расширений не может быть определено.
Синтаксис:
213 enumerationjype = [ EXTENSIBLE ] ENUMERATION [ ( OF
Gnumeration_items ) | enumeration_extension).
211 enumerationJtems = ’( ’ enumerationJd {enumerationJd }
209 enumeration_extension = BASED_ON type_ref [ WITH enumerationjtems ].
Правила и ограничения:
a) Перечисляемый типданныхдолжен использоваться только в качестве базисного типа данныхдля
определенного типа данных.
b
) Перечисляемый тип данных может быть расширен, только если в его определении указано ключе
вое слово EXTENSIBLE.
c) Элемент type_ref в enumcrationoxtension должен бытьссылкой на наращиваемый перечисляе
мый тип.
d) В целях сравнения, упорядочение значений перечисляемого типа данных, который не является
ни наращиваемым, ни расширяющим, может быть определено их относительной позицией в списке
enumerationJd; первый встретившийся элемент должен быть меньше второго, второй —
меньше третьего и т.д.
22