Initial version of asn1c
[com/asn1c.git] / tests / tests-asn1c-compiler / 95-choice-per-order-OK.asn1.-Pfwide-types
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..c5682cd
--- /dev/null
@@ -0,0 +1,260 @@
+
+/*** <<< INCLUDES [Choice] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <BIT_STRING.h>
+#include <BOOLEAN.h>
+#include <NULL.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice] >>> ***/
+
+typedef enum Choice_PR {
+       Choice_PR_NOTHING,      /* No components present */
+       Choice_PR_roid,
+       Choice_PR_bitstr,
+       Choice_PR_ch,
+       /* Extensions may appear below */
+       Choice_PR_bool
+} Choice_PR;
+typedef enum ch_PR {
+       ch_PR_NOTHING,  /* No components present */
+       ch_PR_null,
+       ch_PR_int
+} ch_PR;
+
+/*** <<< TYPE-DECLS [Choice] >>> ***/
+
+typedef struct Choice {
+       Choice_PR present;
+       union Choice_u {
+               RELATIVE_OID_t   roid;
+               BIT_STRING_t     bitstr;
+               struct ch {
+                       ch_PR present;
+                       union Choice__ch_u {
+                               NULL_t   null;
+                               INTEGER_t        Int;
+                       } choice;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } ch;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               BOOLEAN_t        Bool;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_t;
+
+/*** <<< FUNC-DECLS [Choice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice;
+
+/*** <<< STAT-DEFS [Choice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_ch_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.null),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "null"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.Int),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_ch_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 0, 0, 0 } /* null */
+};
+static asn_CHOICE_specifics_t asn_SPC_ch_specs_4 = {
+       sizeof(struct ch),
+       offsetof(struct ch, _asn_ctx),
+       offsetof(struct ch, present),
+       sizeof(((struct ch *)0)->present),
+       .tag2el = asn_MAP_ch_tag2el_4,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ch_4 = {
+       "ch",
+       "ch",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_ch_4,
+       2,      /* Elements count */
+       &asn_SPC_ch_specs_4     /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Choice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.roid),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.ch),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ch_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.Bool),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bool"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, 0, 0 }, /* bool */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 1, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 2, 0, 0 }, /* null */
+    { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice_specs_1 = {
+       sizeof(struct Choice),
+       offsetof(struct Choice, _asn_ctx),
+       offsetof(struct Choice, present),
+       sizeof(((struct Choice *)0)->present),
+       .tag2el = asn_MAP_Choice_tag2el_1,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 3    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice = {
+       "Choice",
+       "Choice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include <BIT_STRING.h>
+#include <RELATIVE-OID.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_bitstr,
+       Choice2_PR_roid
+} Choice2_PR;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               BIT_STRING_t     bitstr;
+               RELATIVE_OID_t   roid;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.roid),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+