
/*** <<< INCLUDES [Test-structure-1] >>> ***/

#include <Test-structure-1.h>
#include <INTEGER.h>
#include <asn_SET_OF.h>
#include <constr_SET_OF.h>
#include <asn_SEQUENCE_OF.h>
#include <constr_SEQUENCE_OF.h>
#include <constr_SEQUENCE.h>

/*** <<< DEPS [Test-structure-1] >>> ***/

extern asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1;

/*** <<< TYPE-DECLS [Test-structure-1] >>> ***/


typedef struct Test_structure_1 {
	struct t_member1 {
		A_SET_OF(struct Test_structure_1) list;
		
		/* Context for parsing across buffer boundaries */
		ber_dec_ctx_t _ber_dec_ctx;
	} t_member1;
	struct t_member2 {
		A_SEQUENCE_OF(struct Test_structure_1) list;
		
		/* Context for parsing across buffer boundaries */
		ber_dec_ctx_t _ber_dec_ctx;
	} t_member2;
	struct Test_structure_1	*t_member3	/* OPTIONAL */;
	INTEGER_t	 t_member4;
	
	/* Context for parsing across buffer boundaries */
	ber_dec_ctx_t _ber_dec_ctx;
} Test_structure_1_t;

/*** <<< STAT-DEFS [Test-structure-1] >>> ***/

static asn1_TYPE_member_t asn1_MBR_t_member1[] = {
	{ ATF_NOFLAGS, 0, 0,
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_Test_structure_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = ""
		},
};
static ber_tlv_tag_t asn1_DEF_t_member1_tags[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_t_member1_specs = {
	sizeof(struct t_member1),
	offsetof(struct t_member1, _ber_dec_ctx),
};
static /* Use -fall-defs-global to expose */
asn1_TYPE_descriptor_t asn1_DEF_t_member1 = {
	"t-member1",
	SET_OF_constraint,
	SET_OF_decode_ber,
	SET_OF_encode_der,
	SET_OF_print,
	SET_OF_free,
	0,	/* Use generic outmost tag fetcher */
	asn1_DEF_t_member1_tags,
	sizeof(asn1_DEF_t_member1_tags)
		/sizeof(asn1_DEF_t_member1_tags[0]), /* 1 */
	asn1_DEF_t_member1_tags,	/* Same as above */
	sizeof(asn1_DEF_t_member1_tags)
		/sizeof(asn1_DEF_t_member1_tags[0]), /* 1 */
	1,	/* Whether CONSTRUCTED */
	asn1_MBR_t_member1,
	1,	/* Single element */
	&asn1_DEF_t_member1_specs	/* Additional specs */
};

static asn1_TYPE_member_t asn1_MBR_t_member2[] = {
	{ ATF_NOFLAGS, 0, 0,
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_Test_structure_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = ""
		},
};
static ber_tlv_tag_t asn1_DEF_t_member2_tags[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_t_member2_specs = {
	sizeof(struct t_member2),
	offsetof(struct t_member2, _ber_dec_ctx),
};
static /* Use -fall-defs-global to expose */
asn1_TYPE_descriptor_t asn1_DEF_t_member2 = {
	"t-member2",
	SEQUENCE_OF_constraint,
	SEQUENCE_OF_decode_ber,
	SEQUENCE_OF_encode_der,
	SEQUENCE_OF_print,
	SEQUENCE_OF_free,
	0,	/* Use generic outmost tag fetcher */
	asn1_DEF_t_member2_tags,
	sizeof(asn1_DEF_t_member2_tags)
		/sizeof(asn1_DEF_t_member2_tags[0]), /* 1 */
	asn1_DEF_t_member2_tags,	/* Same as above */
	sizeof(asn1_DEF_t_member2_tags)
		/sizeof(asn1_DEF_t_member2_tags[0]), /* 1 */
	1,	/* Whether CONSTRUCTED */
	asn1_MBR_t_member2,
	1,	/* Single element */
	&asn1_DEF_t_member2_specs	/* Additional specs */
};

static asn1_TYPE_member_t asn1_MBR_Test_structure_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member1),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_t_member1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "t-member1"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member2),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_t_member2,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "t-member2"
		},
	{ ATF_POINTER, 1, offsetof(struct Test_structure_1, t_member3),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_Test_structure_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "t-member3"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member4),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_INTEGER,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "t-member4"
		},
};
static ber_tlv_tag_t asn1_DEF_Test_structure_1_tags[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_TYPE_tag2member_t asn1_DEF_Test_structure_1_tag2el[] = {
    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, 0, 0 }, /* t-member4 at 19 */
    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* t-member2 at 16 */
    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 }, /* t-member3 at 17 */
    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 }, /* t-member1 at 15 */
};
static asn1_SEQUENCE_specifics_t asn1_DEF_Test_structure_1_specs = {
	sizeof(struct Test_structure_1),
	offsetof(struct Test_structure_1, _ber_dec_ctx),
	asn1_DEF_Test_structure_1_tag2el,
	4,	/* Count of tags in the map */
	-1,	/* Start extensions */
	-1	/* Stop extensions */
};
asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1 = {
	"Test-structure-1",
	SEQUENCE_constraint,
	SEQUENCE_decode_ber,
	SEQUENCE_encode_der,
	SEQUENCE_print,
	SEQUENCE_free,
	0,	/* Use generic outmost tag fetcher */
	asn1_DEF_Test_structure_1_tags,
	sizeof(asn1_DEF_Test_structure_1_tags)
		/sizeof(asn1_DEF_Test_structure_1_tags[0]), /* 1 */
	asn1_DEF_Test_structure_1_tags,	/* Same as above */
	sizeof(asn1_DEF_Test_structure_1_tags)
		/sizeof(asn1_DEF_Test_structure_1_tags[0]), /* 1 */
	1,	/* Whether CONSTRUCTED */
	asn1_MBR_Test_structure_1,
	4,	/* Elements count */
	&asn1_DEF_Test_structure_1_specs	/* Additional specs */
};


/*** <<< INCLUDES [Choice-1] >>> ***/

#include <Choice-1.h>
#include <INTEGER.h>
#include <asn_SET_OF.h>
#include <constr_SET_OF.h>
#include <constr_CHOICE.h>

/*** <<< DEPS [Choice-1] >>> ***/

typedef enum Choice_1_PR {
	Choice_1_PR_NOTHING,	/* No components present */
	Choice_1_PR_and,
	Choice_1_PR_or,
	Choice_1_PR_not,
	Choice_1_PR_other,
} Choice_1_PR;
extern asn1_TYPE_descriptor_t asn1_DEF_Choice_1;

/*** <<< TYPE-DECLS [Choice-1] >>> ***/


typedef struct Choice_1 {
	Choice_1_PR present;
	union {
		struct Choice_1	*and;
		struct or {
			A_SET_OF(struct Choice_1) list;
			
			/* Context for parsing across buffer boundaries */
			ber_dec_ctx_t _ber_dec_ctx;
		} or;
		struct Choice_1	*not;
		INTEGER_t	 other;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	ber_dec_ctx_t _ber_dec_ctx;
} Choice_1_t;

/*** <<< STAT-DEFS [Choice-1] >>> ***/

static asn1_TYPE_member_t asn1_MBR_or[] = {
	{ ATF_NOFLAGS, 0, 0,
		.tag = -1 /* Ambiguous tag (CHOICE?) */,
		.tag_mode = 0,
		.type = (void *)&asn1_DEF_Choice_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = ""
		},
};
static ber_tlv_tag_t asn1_DEF_or_tags[] = {
	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_or_specs = {
	sizeof(struct or),
	offsetof(struct or, _ber_dec_ctx),
};
static /* Use -fall-defs-global to expose */
asn1_TYPE_descriptor_t asn1_DEF_or = {
	"or",
	SET_OF_constraint,
	SET_OF_decode_ber,
	SET_OF_encode_der,
	SET_OF_print,
	SET_OF_free,
	0,	/* Use generic outmost tag fetcher */
	asn1_DEF_or_tags,
	sizeof(asn1_DEF_or_tags)
		/sizeof(asn1_DEF_or_tags[0]) - 1, /* 1 */
	asn1_DEF_or_tags,	/* Same as above */
	sizeof(asn1_DEF_or_tags)
		/sizeof(asn1_DEF_or_tags[0]), /* 2 */
	1,	/* Whether CONSTRUCTED */
	asn1_MBR_or,
	1,	/* Single element */
	&asn1_DEF_or_specs	/* Additional specs */
};

static asn1_TYPE_member_t asn1_MBR_Choice_1[] = {
	{ ATF_POINTER, 0, offsetof(struct Choice_1, choice.and),
		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
		.tag_mode = +1,	/* EXPLICIT tag at current level */
		.type = (void *)&asn1_DEF_Choice_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "and"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.or),
		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = (void *)&asn1_DEF_or,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "or"
		},
	{ ATF_POINTER, 0, offsetof(struct Choice_1, choice.not),
		.tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
		.tag_mode = +1,	/* EXPLICIT tag at current level */
		.type = (void *)&asn1_DEF_Choice_1,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "not"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.other),
		.tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
		.tag_mode = +1,	/* EXPLICIT tag at current level */
		.type = (void *)&asn1_DEF_INTEGER,
		.memb_constraints = 0,	/* Defer to actual type */
		.name = "other"
		},
};
static asn1_TYPE_tag2member_t asn1_DEF_Choice_1_tag2el[] = {
    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* and at 22 */
    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* or at 23 */
    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* not at 24 */
    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 }, /* other at 26 */
};
static asn1_CHOICE_specifics_t asn1_DEF_Choice_1_specs = {
	sizeof(struct Choice_1),
	offsetof(struct Choice_1, _ber_dec_ctx),
	offsetof(struct Choice_1, present),
	sizeof(((struct Choice_1 *)0)->present),
	asn1_DEF_Choice_1_tag2el,
	4,	/* Count of tags in the map */
	0	/* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_Choice_1 = {
	"Choice-1",
	CHOICE_constraint,
	CHOICE_decode_ber,
	CHOICE_encode_der,
	CHOICE_print,
	CHOICE_free,
	CHOICE_outmost_tag,
	0,	/* No effective tags (pointer) */
	0,	/* No effective tags (count) */
	0,	/* No tags (pointer) */
	0,	/* No tags (count) */
	1,	/* Whether CONSTRUCTED */
	asn1_MBR_Choice_1,
	4,	/* Elements count */
	&asn1_DEF_Choice_1_specs	/* Additional specs */
};

