-- EDM module extracted from ITU-T X.692 (11/2008)
Example3-EDM {joint-iso-itu-t(2) asn1(1) ecn(4) examples(5) edm-module3(10)}
ENCODING-DEFINITIONS ::=
BEGIN
EXPORTS Example3Encodings-1, Example3Encodings-2;
RENAMES
#OPTIONAL AS #Sequence2-optional
IN #Sequence2
#OCTET-STRING AS #Octets3
IN ALL
#OPTIONAL AS #Sequence3-optional
IN #Sequence3
#TAG AS #TAG-4-bits
IN #Sequence3
FROM Example3-ASN1-Module
{ joint-iso-itu-t(2) asn1(1) ecn(4) examples(5) asn1-module3(9)};
Example3Encodings-1 #ENCODINGS ::= {
sequence1-encoding }
Example3Encodings-2 #ENCODINGS ::= {
concat |
sequence2-optional-encoding |
octets3-encoding |
sequenceOf-encoding |
sequence3-encoding |
outer-encoding
}
sequence1-encoding #SEQUENCE ::= {
REPLACE OPTIONALS
WITH #Integer-with-pointer-concat
ENCODED BY integer-with-pointer-concat-encoding
INSERT AT HEAD #Pointer
ENCODING-SPACE
SIZE variable-with-determinant
DETERMINED BY container
USING OUTER }
#Pointer ::= #INTEGER
#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, #ENCODINGS:EncodingObjectSet >}
#Integer-with-pointer-concat{< #Element >} ::= {
ENCODE STRUCTURE {
element USE-SET OPTIONAL-ENCODING
integer-optionality-encoding{< pointer >}
STRUCTURED WITH concat}
WITH EncodingObjectSet}
concat #CONCATENATION ::= {
ENCODING-SPACE }
#Sequence2-optional ::= #OPTIONAL
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-encoding
{< #Element, #ENCODINGS: Sequence2-combined-encoding-object-set >}
#Optional-with-determinant {< #Element >} ::= {
ENCODE STRUCTURE {
determinant determinant-encoding,
component USE-SET
OPTIONAL-ENCODING if-component-present-encoding{< determinant >} }
WITH Sequence2-combined-encoding-object-set }
if-component-present-encoding {<REFERENCE:presence-bit>}
#Presence-determinant ::= {
PRESENCE
DETERMINED BY field-to-be-set
USING presence-bit}
determinant-encoding #BOOLEAN ::= {
ENCODING-SPACE
SIZE 1
MULTIPLE OF bit
TRUE-PATTERN bits:'0'B
FALSE-PATTERN bits:'1'B}
#Octets3 ::= #OCTET-STRING
octets3-encoding #Octets3 ::= {
REPETITION-ENCODING {
REPLACE STRUCTURE
WITH #Octets-with-length
ENCODED BY octets-with-length-encoding}
}
#Octets-with-length{< #Element >} ::= #CONCATENATION {
length #INT(0..2047),
octets #Element}
octets-with-length-encoding{< #Element >}
#Octets-with-length{< #Element >} ::= {
ENCODE STRUCTURE {
octets octets-encoding{< length >}}
WITH PER-BASIC-UNALIGNED}
octets-encoding{< REFERENCE:length >} #Octet3 ::= {
REPETITION-ENCODING {
REPETITION-SPACE
SIZE variable-with-determinant
MULTIPLE OF octet
DETERMINED BY field-to-be-set
USING length}
CONTENTS-ENCODING {sequence3-encoding}}
sequence3-encoding #Sequence3 ::= {
ENCODE STRUCTURE {
STRUCTURED WITH sequence3Structure-encoding
}
WITH Sequence3-encodings
COMPLETED BY PER-BASIC-UNALIGNED
}
Sequence3-encodings #ENCODINGS ::= {
sequence3-optional-encoding |
tag-4-bits-encoding
}
sequence3Structure-encoding #CONCATENATION ::= {
ENCODING-SPACE
MULTIPLE OF octet
VALUE-PADDING
JUSTIFIED left:0
POST-PADDING zero
UNUSED BITS
DETERMINED BY not-needed
}
#Sequence3-optional ::= #OPTIONAL
sequence3-optional-encoding #Sequence3-optional ::= {
PRESENCE
DETERMINED BY container
USING OUTER}
#TAG-4-bits ::= #TAG
tag-4-bits-encoding #TAG-4-bits ::= {
ENCODING-SPACE
SIZE 4}
#SequenceOf ::= #REPETITION
sequenceOf-encoding #SequenceOf ::= {
REPETITION-ENCODING {
REPLACE STRUCTURE
WITH #SequenceOf-with-count
ENCODED BY sequenceOf-with-count-encoding}}
#SequenceOf-with-count{< #Element >} ::= #CONCATENATION {
count #INT(0..63),
elements #Element }
sequenceOf-with-count-encoding{< #Element >}
#SequenceOf-with-count{< #Element >} ::= {
ENCODE STRUCTURE {
elements {
ENCODE STRUCTURE {
STRUCTURED WITH elements-encoding{< count >}}
WITH PER-BASIC-UNALIGNED}}
WITH PER-BASIC-UNALIGNED}
elements-encoding{< REFERENCE:count >} #REPETITION ::= {
REPETITION-ENCODING {
REPETITION-SPACE
SIZE variable-with-determinant
MULTIPLE OF repetitions
DETERMINED BY field-to-be-set
USING count}}
outer-encoding #OUTER ::= {
ADDED BITS DECODING silently-ignore
}
END