ГОСТ Р ИСО/МЭК 8825-2-2003
должны быть использованы процедуры 10.9 для добавления этого битового поля из п битов к списку полей с предшествующим детерминантом длины, равному п битам, в виде ограниченного целого числа с ub и lb, равными п.
Примечание — В этом случае ub и lb будут проигнорированы процедурами для длины. Здесь эти процедуры вызываются для обеспечения фрагментации большой преамбулы. Вероятно, такая ситуация будет возникать очень редко.
18.4 За преамбулой должны по порядку следовать списки полей каждого присутствующего компонента из значения последовательности.
18.5 Для CANONICAL-PER всегда должны отсутствовать кодирования компонентов, отмеченных как DEFAULT, если значение, которое должно быть закодировано, является значением по умолчанию. Для BASIC-PER всегда должны отсутствовать кодирования компонентов, отмеченных как DEFAULT, если значение, которое должно быть закодировано, является значением по умолчанию для простого типа (см. 3.7.25), в противном случае значение должно быть закодировано только тогда, когда оно явно присутствует в абстрактном значении последовательности.
18.6 Этим завершается кодирование, если бит расширения отсутствует или равен нулю. Если бит расширения присутствует и равен единице, то применяются следующие процедуры.
18.7 Обозначим количество расширяющих дополнений в кодируемом типе п. Тогда для добавления к списку полей должно быть создано битовое поле с п битами. Биты этого поля, взятые по порядку, должны кодировать наличие или отсутствие кодирования каждого расширяющего дополнения в кодируемом типе. Значение бита 1 соответствует присутствию, а значение бита 0 — отсутствию кодирования расширяющего дополнения. Головной бит в этом поле кодирует наличие или отсутствие первого расширяющего дополнения, а завершающий бит — наличие или отсутствие последнего расширяющего дополнения.
18.8 Должны быть осуществлены процедуры 10.9 для добавления этого битового поля из п битов к списку полей с предшествующим детерминантом длины, равным п, в виде обычно маленькой длины.
Примечание — п не может быть нулем, так как эта процедура вызывается только тогда, когда есть по крайней мере одно кодируемое расширяющее дополнение.
18.9 Далее следуют списки полей, содержащие по порядку кодирования каждого присутствующего расширяющего дополнения. Каждое расширяющее дополнение, являющееся «Compo-nentType» (т. е. не «ExtensionAdditionGroup»), должно быть закодировано так, как если бы оно было значением поля открытого типа, как определено в 10.2.1. Каждое расширяющее дополнение, являющееся «ExtensionAdditionGroup», должно быть закодировано как последовательность в соответствии с 18.2—18.6, которая затем кодируется так, как если бы она была значением поля открытого типа, как определено в 10.2.1. Если все компоненты значений «ExtensionAdditionGroup» отсутствуют, то «ExtensionAdditionGroup» кодируется как отсутствующее расширяющее дополнение (т. е. соответствующий бит в описанном в 18.7 битовом поле должен быть равен 0).
19 Кодирование типа «последовательность-из»
19.1 Видимые для PER ограничения могут относится к числу компонентов типа «последова-тельность-из».
19.2 Обозначим максимальное (с учетом видимых для PER ограничений) количество компонентов в «последовательности-из» ub, а минимальное — lb. Если не существует конечного максимума или ub > 64К, то говорят, что ub не установлена. Если не существует ограничения на минимум, то lb имеет нулевое значение. Обозначим число компонентов в фактически кодируемом значении «последовательности-из» п.
19.3 Кодирование каждого компонента «последовательности-из» будет генерировать ряд полей, которые добавляются к списку полей для типа «последовательность-из».
19.4 Если есть видимое для PER ограничение и в нем присутствует маркер расширения, то к списку полей в битовом поле длины должен быть добавлен один бит. Он должен быть равен 1, если число компонентов в данном кодировании не находится в пределах диапазона корня расширения, и 0 — в противном случае. В первом случае должны использоваться процедуры 10.9 для добавления
21