ГОСТ Р ИСО/МЭК 8825-3—2016
«Integer-with-pointer-concat {< #Element >} ::= «CONCATENATION {
element «Element OPTIONAL-ENCODING «Integer-optionality }
«Integer-optionality«OPTIONAL
integer-optionality-encoding{< REFERENCE: start-pointer>} «Integer-optionality ::= {
ALIGNED TO ANY octet
START-POINTER start-pointer
PRESENCE DETERMINED BY pointer}
integer-with-pointer-concat-encoding {< «Element REFERENCE:pointer. «ENCOINGS:EncodingObjectSet >}
«lnteger-with-pointer-concat{< «Element >} ::= {
ENCODE STRUCTURE{
element USE-SET OPTIONAL-ENCODING integer-optionality-encoding{< pointer >}}
WITH EncodingObjectSet}
concat «CONCATENATION ::= {
ENCODING-SPACE }
D.3.2 Добавление булева типа в качестве детерминанта присутствия
D.3.2.1 Присвоение АСН.1 равно:
Sequence2SEQUENCE {
component BOOLEAN OPTIONAL.
component2 INTEGER,
components VisibleString OPTIONAL }
D.3.2.2 Вместо использования побитового отображения PERдля компонентов, обозначенных «OPTIONAL», при
сутствие факультативного компонента связывается со значением уникального (однозначного) бита присутствия, кото
рый равен 1(компонент отсутствует) или 0 (компонент присутствует). В этом случае бит присутствия инвертируется.
D.3.2.3 Структуры кодирования и объекты кодирования определяются следующим образом.
Класс кодирования «OPTIONAL переименовывается на «Sequence2-optional в разделе «RENAMES»
(см. D.3.7). Поэтому класс ««Sequence2n неявно заменяется на:
«Sequence2 ::= «SEQUENCE {
component «BOOL OPTIONAL-ENCODING #Sequence2-optional,
component2 «INTEGER.
components «VisibleString OPTIONAL-ENCODING «Sequence2-optional},
где:
#Sequence2-optional ::= «OPTIONAL
Затем определяется обьект кодирования класса ««Sequence2-optional»: этот обьект с помощью группы за
мены заменяет определение кодирования компонента (см. 23.11.3.2) на класс «Optional-with-determinant».
sequence2-optional-encoding «Sequence2-optional ::= {
REPLACE STRUCTURE
WITH «Optional-with-determinant
ENCODED BY optional-with-determinant-encoding}
Этот класс, параметризованный исходным компонентом, принадлежит к категории «конкатенация» и имеет
два компонента: детерминант (булева типа) и исходный компонент.
«Optional-with-determinant{< «Element >} ::= «CONCATENATION {
determinant «BOOLEAN.
component «Element OPTIONAL-ENCODING «Presence-determinant},
где:
«Presence-determinant ::= «OPTIONAL
Затем определяется объект кодирования класса ««Optional-with-determinant»; этот объект имеет два фик
тивных параметра: класс компонента и набор объектов кодирования, используемый для кодирования всего, кроме
детерминанта и функциональных возможностей компонента:
optional-with-determinant-encoding {< «Element, «ENCODINGS: Sequence2-combined-encoding-object-set >}
«Optional-with-determinant {< «Element >} ::= {
ENCODE STRUCTURE{
determinant determinant-encoding.
184