
/*** <<< INCLUDES [Message] >>> ***/

#include "SpecializedContent.h"
#include <constr_SEQUENCE.h>

/*** <<< TYPE-DECLS [Message] >>> ***/

typedef struct Message {
	SpecializedContent_30P0_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_SpecializedContent_30P0,
		.type_selector = 0,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.oer_constraints = 0,	/* OER is not compiled, use -gen-OER */
		.per_constraints = 0,	/* No PER visible constraints */
		.default_value = 0,
		.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,	/* Start extensions */
	-1	/* Stop extensions */
};
asn_TYPE_descriptor_t asn_DEF_Message = {
	"Message",
	"Message",
	&asn_OP_SEQUENCE,
	SEQUENCE_constraint,
	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,	/* No OER visible constraints */
	0,	/* No PER visible constraints */
	asn_MBR_Message_1,
	1,	/* Elements count */
	&asn_SPC_Message_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [SpecializedContent] >>> ***/

#include <NativeInteger.h>
#include <ANY.h>
#include <asn_ioc.h>
#include <OPEN_TYPE.h>
#include <BOOLEAN.h>
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>

/*** <<< 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 SpecializedContent_30P0 {
	long	 id;
	struct value {
		value_PR present;
		union 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;
} SpecializedContent_30P0_t;

/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_SpecializedContent_30P0;
extern asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_30P0_specs_1;
extern asn_TYPE_member_t asn_MBR_SpecializedContent_30P0_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", ,
	{ "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
	{ "&Type", 
};
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(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->check_constraints(td, sptr, ctfailcb, app_key);
}

static asn_type_selector_result_t
select_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;
	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct SpecializedContent_30P0, 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(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 = row + 1;
	        break;
	    }
	}
	
	return result;
}

static int
memb_value_constraint_1(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->check_constraints(td, sptr, ctfailcb, app_key);
}


/*** <<< CTDEFS [SpecializedContent] >>> ***/

static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	0, 0	/* No PER value map */
};
static asn_per_constraints_t asn_PER_memb_value_constr_3 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	0, 0	/* No PER value map */
};

/*** <<< 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,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.oer_constraints = 0,	/* OER is not compiled, use -gen-OER */
		.per_constraints = 0,	/* No PER visible constraints */
		.default_value = 0,
		.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,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.oer_constraints = 0,	/* OER is not compiled, use -gen-OER */
		.per_constraints = 0,	/* No PER visible constraints */
		.default_value = 0,
		.name = "BOOLEAN"
		},
};
static const unsigned asn_MAP_value_cmap_3[] = { 1, 0 };
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 */
	.canonical_order = asn_MAP_value_cmap_3,	/* Canonically sorted */
	.ext_start = -1	/* Extensions start */
};
static /* Use -fall-defs-global to expose */
asn_TYPE_descriptor_t asn_DEF_value_3 = {
	"value",
	"value",
	&asn_OP_OPEN_TYPE,
	OPEN_TYPE_constraint,
	0,	/* No effective tags (pointer) */
	0,	/* No effective tags (count) */
	0,	/* No tags (pointer) */
	0,	/* No tags (count) */
	0,	/* No OER visible constraints */
	0,	/* No PER visible constraints */
	asn_MBR_value_3,
	2,	/* Elements count */
	&asn_SPC_value_specs_3	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_SpecializedContent_30P0_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct SpecializedContent_30P0, id),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
		.tag_mode = 0,
		.type = &asn_DEF_NativeInteger,
		.type_selector = 0,
		.memb_constraints = memb_id_constraint_1,
		.oer_constraints = 0,	/* OER is not compiled, use -gen-OER */
		.per_constraints = &asn_PER_memb_id_constr_2,
		.default_value = 0,
		.name = "id"
		},
	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct SpecializedContent_30P0, value),
		.tag = -1 /* Ambiguous tag (ANY?) */,
		.tag_mode = 0,
		.type = &asn_DEF_value_3,
		.type_selector = select_value_type,
		.memb_constraints = memb_value_constraint_1,
		.oer_constraints = 0,	/* OER is not compiled, use -gen-OER */
		.per_constraints = &asn_PER_memb_value_constr_3,
		.default_value = 0,
		.name = "value"
		},
};
static const ber_tlv_tag_t asn_DEF_SpecializedContent_30P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_SpecializedContent_30P0_tag2el_1[] = {
    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
};
asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_30P0_specs_1 = {
	sizeof(struct SpecializedContent_30P0),
	offsetof(struct SpecializedContent_30P0, _asn_ctx),
	.tag2el = asn_MAP_SpecializedContent_30P0_tag2el_1,
	.tag2el_count = 1,	/* Count of tags in the map */
	0, 0, 0,	/* Optional elements (not needed) */
	-1,	/* Start extensions */
	-1	/* Stop extensions */
};
asn_TYPE_descriptor_t asn_DEF_SpecializedContent_30P0 = {
	"SpecializedContent",
	"SpecializedContent",
	&asn_OP_SEQUENCE,
	SEQUENCE_constraint,
	asn_DEF_SpecializedContent_30P0_tags_1,
	sizeof(asn_DEF_SpecializedContent_30P0_tags_1)
		/sizeof(asn_DEF_SpecializedContent_30P0_tags_1[0]), /* 1 */
	asn_DEF_SpecializedContent_30P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_SpecializedContent_30P0_tags_1)
		/sizeof(asn_DEF_SpecializedContent_30P0_tags_1[0]), /* 1 */
	0,	/* No OER visible constraints */
	0,	/* No PER visible constraints */
	asn_MBR_SpecializedContent_30P0_1,
	2,	/* Elements count */
	&asn_SPC_SpecializedContent_30P0_specs_1	/* Additional specs */
};

