X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=tests%2Ftests-asn1c-compiler%2F144-ios-parameterization-OK.asn1.-P;fp=tests%2Ftests-asn1c-compiler%2F144-ios-parameterization-OK.asn1.-P;h=539d9d816028c8c9dd17d45b37c11a943966f4ca;hb=70ee6fc793ec8e828067a3569849b6c216054497;hp=0000000000000000000000000000000000000000;hpb=59f84608ec15c016958a6e0e0ddd813f376c0925;p=com%2Fasn1c.git diff --git a/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P new file mode 100644 index 0000000..539d9d8 --- /dev/null +++ b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P @@ -0,0 +1,289 @@ + +/*** <<< INCLUDES [Message] >>> ***/ + +#include "SpecializedContent.h" +#include + +/*** <<< TYPE-DECLS [Message] >>> ***/ + +typedef struct Message { + RegionalExtension_t content; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Message_t; + +/*** <<< FUNC-DECLS [Message] >>> ***/ + +extern asn_TYPE_descriptor_t asn_DEF_Message; + +/*** <<< STAT-DEFS [Message] >>> ***/ + +static asn_TYPE_member_t asn_MBR_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Message, content), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + .tag_mode = 0, + .type = &asn_DEF_RegionalExtension, + .type_selector = 0, + { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 }, + 0, 0, /* No default value */ + .name = "content" + }, +}; +static const ber_tlv_tag_t asn_DEF_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* content */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Message_specs_1 = { + sizeof(struct Message), + offsetof(struct Message, _asn_ctx), + .tag2el = asn_MAP_Message_tag2el_1, + .tag2el_count = 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Message = { + "Message", + "Message", + &asn_OP_SEQUENCE, + asn_DEF_Message_tags_1, + sizeof(asn_DEF_Message_tags_1) + /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */ + asn_DEF_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_Message_tags_1) + /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Message_1, + 1, /* Elements count */ + &asn_SPC_Message_specs_1 /* Additional specs */ +}; + + +/*** <<< INCLUDES [SpecializedContent] >>> ***/ + +#include +#include +#include +#include +#include +#include +#include + +/*** <<< DEPS [SpecializedContent] >>> ***/ + +typedef enum value_PR { + value_PR_NOTHING, /* No components present */ + value_PR_INTEGER, + value_PR_BOOLEAN +} value_PR; + +/*** <<< TYPE-DECLS [SpecializedContent] >>> ***/ + +typedef struct RegionalExtension { + long id; + struct value { + value_PR present; + union RegionalExtension__value_u { + long INTEGER; + BOOLEAN_t BOOLEAN; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } value; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RegionalExtension_t; + +/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/ + +extern asn_TYPE_descriptor_t asn_DEF_RegionalExtension; +extern asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1; +extern asn_TYPE_member_t asn_MBR_RegionalExtension_1[2]; + +/*** <<< IOC-TABLES [SpecializedContent] >>> ***/ + +static const long asn_VAL_1_1 = 1; +static const long asn_VAL_2_2 = 2; +static const asn_ioc_cell_t asn_IOS_RegionalExtension_1_rows[] = { + { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_1 }, + { "&Type", aioc__type, &asn_DEF_NativeInteger }, + { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 }, + { "&Type", aioc__type, &asn_DEF_BOOLEAN } +}; +static const asn_ioc_set_t asn_IOS_RegionalExtension_1[] = { + { 2, 2, asn_IOS_RegionalExtension_1_rows } +}; + +/*** <<< CODE [SpecializedContent] >>> ***/ + +static int +memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_type_selector_result_t +select_RegionalExtension_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) { + asn_type_selector_result_t result = {0, 0}; + const asn_ioc_set_t *itable = asn_IOS_RegionalExtension_1; + size_t constraining_column = 0; /* &id */ + size_t for_column = 1; /* &Type */ + size_t row, presence_index = 0; + const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RegionalExtension, id)); + + for(row=0; row < itable->rows_count; row++) { + const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column]; + const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column]; + + if(type_cell->cell_kind == aioc__undefined) + continue; + + presence_index++; + if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) { + result.type_descriptor = type_cell->type_descriptor; + result.presence_index = presence_index; + break; + } + } + + return result; +} + +static int +memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); +} + + +/*** <<< STAT-DEFS [SpecializedContent] >>> ***/ + +static asn_TYPE_member_t asn_MBR_value_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct value, choice.INTEGER), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + .tag_mode = 0, + .type = &asn_DEF_NativeInteger, + .type_selector = 0, + { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 }, + 0, 0, /* No default value */ + .name = "INTEGER" + }, + { ATF_NOFLAGS, 0, offsetof(struct value, choice.BOOLEAN), + .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 = "BOOLEAN" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 1, 0, 0 }, /* BOOLEAN */ + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* INTEGER */ +}; +static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = { + sizeof(struct value), + offsetof(struct value, _asn_ctx), + offsetof(struct value, present), + sizeof(((struct value *)0)->present), + .tag2el = asn_MAP_value_tag2el_3, + .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_value_3 = { + "value", + "value", + &asn_OP_OPEN_TYPE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, 0, OPEN_TYPE_constraint }, + asn_MBR_value_3, + 2, /* Elements count */ + &asn_SPC_value_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_RegionalExtension_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, id), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + .tag_mode = 0, + .type = &asn_DEF_NativeInteger, + .type_selector = 0, + { .oer_constraints = 0, .per_constraints = 0, .general_constraints = memb_id_constraint_1 }, + 0, 0, /* No default value */ + .name = "id" + }, + { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, value), + .tag = -1 /* Ambiguous tag (ANY?) */, + .tag_mode = 0, + .type = &asn_DEF_value_3, + .type_selector = select_RegionalExtension_value_type, + { .oer_constraints = 0, .per_constraints = 0, .general_constraints = memb_value_constraint_1 }, + 0, 0, /* No default value */ + .name = "value" + }, +}; +static const ber_tlv_tag_t asn_DEF_RegionalExtension_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RegionalExtension_tag2el_1[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1 = { + sizeof(struct RegionalExtension), + offsetof(struct RegionalExtension, _asn_ctx), + .tag2el = asn_MAP_RegionalExtension_tag2el_1, + .tag2el_count = 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RegionalExtension = { + "RegionalExtension", + "RegionalExtension", + &asn_OP_SEQUENCE, + asn_DEF_RegionalExtension_tags_1, + sizeof(asn_DEF_RegionalExtension_tags_1) + /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */ + asn_DEF_RegionalExtension_tags_1, /* Same as above */ + sizeof(asn_DEF_RegionalExtension_tags_1) + /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RegionalExtension_1, + 2, /* Elements count */ + &asn_SPC_RegionalExtension_specs_1 /* Additional specs */ +}; +