Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-3-2016 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)

     9.25 Условные кодирования

9.25.1 Уже упоминался класс кодирования #TRANSFORM как средство выражения простых арифметических действий над целочисленными значениями (см. 9.17.3). Этот класс кодирования, однако, играет более фундаментальную роль в спецификации кодирований для некоторых простейших классов. Как правило, спецификация кодирований для многих предопределенных типов АСН.1 является двух- или трехстадийным процессом, использующим объекты кодирования класса #TRANSFORM и, например, класса #CONDITIONAL-INT или #CONDITIONAL-REPETITION.

9.25.2 Классы кодирования #TRANSFORM, #CONDITIONAL-INT и #CONDITIONAL-REPETITION ограничены в своем использовании. Объекты кодирования для этих классов могут быть определены только с использованием либо синтаксиса из раздела 24, подразделов 23.7 и 23.14 соответственно, либо не-ECN определения объекта кодирования, причем они могут использоваться только в определениях других объектов кодирования. Они не могут появляться в наборах объектов кодирования или применяться прямо для кодирования полей структур кодирования (см. 18.1.7).

9.25.3 Спецификация кодирования для классов кодирования в категории "целочисленная" выполняется следующим образом. Определяются кодирования (класса кодирования #CONDITIONAL-INT) для конкретного условия границ, указывающего размер контейнера (и как он разделяется), преобразование целого числа в биты (с использованием либо поразрядного дополнения до двух, либо кодирования положительных целых чисел) и способ вставления этих битов в контейнер (примером условия границ является наличие верхней границы и неотрицательной нижней границы). Это называется условным кодированием. Кодирование класса из категории "целочисленная" определяется в виде списка этих условных кодирований, а реальное кодирование, применяемое в любом заданном случае, будет тем, которое находится в начале списка и чье условие границ соблюдается (см. пример в D.1.5.4).

9.25.4 Спецификация кодирования для классов кодирования в категории "повторение" использует класс кодирования #CONDITIONAL-REPETITION, который определяет способ разделения пространства кодирования для повторяющихся элементов и способ размещения в нем повторяющихся кодирований для заданного условия диапазонов, опять образуя условное кодирование. Как и при кодировании классов в категории "целочисленная", окончательное кодирование определяется в виде упорядоченного списка условных кодирований.

9.25.5 Спецификация кодирования для классов кодирования в категории "цепочка октетов" выполняется следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного октета в саморазграничивающую цепочку битов. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION (при конкретных условиях диапазона размера) для взятия каждой цепочки битов (преобразованной из октета цепочки октетов) и конкатенации (сцепления) их в размеченный контейнер (определение таких объектов кодирования нехарактерно для кодирования #OCTETS). Окончательное кодирование класса в категории "цепочка октетов" определяется в виде упорядоченного списка объектов кодирования #CONDITIONAL-REPETITION (см. пример в D.1.8.2).

9.25.6 Спецификации кодирования для классов кодирования в категории "цепочка битов" выполняются следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного бита в цепочку битов аналогично кодированию целого числа в биты, но в этом случае отображение бита должно быть в саморазграничивающую цепочку. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION для повторения битов (это могут быть те же объекты кодирования, которые были определены для использования с классом кодирования в категориях "повторение" или "цепочка октетов"). Наконец, кодирование класса в категории "цепочка битов" определяется в виде упорядоченного списка объектов кодирования #CONDITIONAL-REPETITION (см. пример в D.1.7.3).

9.25.7 Спецификации кодирования классов кодирования в категории "цепочка знаков" выполняются следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного знака в саморазграничивающую цепочку битов, используя несколько возможных механизмов для определения кодирования знака и используя, где подходит, действующее разрешенное ограничение алфавита. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION и, наконец, определяется кодирование класса в категории "цепочка знаков" в виде упорядоченного списка этих объектов (см. пример в D.1.9.2).