ГОСТ Р ИСО/МЭК 8825-2-2003
Примечание — Заполняющие биты, добавленные для выравнивания по октету при сортировке, не появляются в фактическом кодировании.
21.2 Для BASIC-PER «множество-из» должно быть закодировано так, как если бы это был тип «последовательность-из».
22 Кодирование выборочного типа
Примечание — Выборочный тип кодируется путем кодирования индекса, определяющего выбранную альтернативу. Индекс кодируется как ограниченное целое число (если в выборочном типе нет маркера расширения, когда индекс кодируется как обычно маленькое неотрицательное целое число) и, следовательно, занимает битовое поле фиксированной длины с минимальным количеством битов, необходимых для кодирования индекса. (Хотя, в принципе, оно может быть произвольно большим). Далее следует кодирование выбранной альтернативы с альтернативами, которые являются расширяющими дополнениями, закодированными так, как если бы они были значениями полей открытого типа. Когда выбор имеет только одну альтернативу, индекс не кодируется.
22.1 На кодирование выборочных типов видимые для PER ограничения не влияют.
22.2 Каждый компонент выбора имеет связанный с ним индекс, значение которого равно нулю для первой альтернативы в корне выбора (альтернативы берутся в каноническом порядке, определенном в ГОСТ Р ИСО/МЭК 8824-1, 8.4), равно единичному значению для второй, и так далее до последнего компонента в корне расширения выбора. Аналогично значение индекса присваивается каждому расширяющему дополнению, начиная с нуля, как и для компонентов корня расширения. Обозначим п значение самого большого индекса в корне.
Примечание — ГОСТ Р ИСО/МЭК 8824-1, 28.4, требует, чтобы каждое последующее расширяющее дополнение имело значение тега большее, чем последнее, добавленное к «AdditionalAltemativeTypeList».
22.3 Для канонического упорядочения альтернатив, которые содержат нетегированный выбор, каждый нетегированный тип выбора должен быть упорядочен так, как если бы он имел тег, равный наименьшему тегу в корне расширения данного выборочного типа или любого вложенного нетеги-рованного выборочного типа.
22.4 Если выбор имеет только одну альтернативу в корне расширения, то индекс не должен кодироваться при выборе этой альтернативы.
22.5 Если выборочный тип имеет маркер расширения, то сначала к списку полей в поле битов длины должен быть добавлен один бит. Он равен единице, если в данном кодировании присутствуют значения расширяющих дополнений, и нулю — в противном случае. (Далее по тексту этот бит называется «бит расширения»). Если маркер расширения отсутствует, то бит расширения не должен добавляться.
22.6 Если бит расширения отсутствует, то индекс выбранной альтернативы должен кодироваться в поле по процедурам раздела 12 как значение целочисленного типа (без маркера расширения в ограничении подтипа), заключенное в диапазоне от 0 до п, и это поле должно быть добавлено к списку полей. За этим полем должны следовать поля выбранной альтернативы, и процедуры настоящего раздела завершаются.
22.7 Если бит расширения присутствует и выбранная альтернатива находится в корне расширения, то индекс выбранной альтернативы должен быть закодирован так, как если бы маркер расширения отсутствовал, в соответствии с разделом 12, и процедуры настоящего раздела завершаются.
22.8 Если бит расширения присутствует и выбранная альтернатива не находится в корне расширения, то индекс выбранной альтернативы должен быть закодирован как обычно маленькое неотрицательное число с lb = 0, и это поле должно быть добавлено к списку полей. За этим полем должен следовать список полей, содержащих выбранную альтернативу, закодированную как значение поля открытого типа, как определено в 10.2, и процедуры этого раздела завершаются.
Примечание — Скобки версии в определении расширяющих дополнений выбора не влияют на кодирование «ExtensionAdditionAltematives».
23 Кодирование типа «идентификатор объекта»
Примечание — Кодирование типа «идентификатор объекта» использует октеты содержимого BER с предшествующим детерминантом длины, который, на практике, будет одним октетом.
23