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

#include <INTEGER.h>
#include <constr_CHOICE.h>

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

typedef enum Choice_PR {
	Choice_PR_NOTHING,	/* No components present */
	Choice_PR_a,
	/* Extensions may appear below */
	Choice_PR_b,
	Choice_PR_c,
} Choice_PR;

/*** <<< FWD-DECLS [Choice] >>> ***/

struct Choice;

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

typedef struct Choice {
	Choice_PR present;
	union Choice_u {
		INTEGER_t	 a;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
		INTEGER_t	 b;
		struct Choice	*c;
	} 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;

/*** <<< POST-INCLUDE [Choice] >>> ***/

#include <Choice.h>

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

static asn_TYPE_member_t asn_MBR_Choice_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct Choice, choice.a),
		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_INTEGER,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.name = "a"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct Choice, choice.b),
		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_INTEGER,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.name = "b"
		},
	{ ATF_POINTER, 0, offsetof(struct Choice, choice.c),
		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_Choice,
		.memb_constraints = 0,	/* Defer constraints checking to the member type */
		.name = "c"
		},
};
static ber_tlv_tag_t asn_DEF_Choice_1_tags[] = {
	(ASN_TAG_CLASS_CONTEXT | (123 << 2))
};
static asn_TYPE_tag2member_t asn_MAP_Choice_1_tag2el[] = {
    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a at 15 */
    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b at 17 */
    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c at 19 */
};
static asn_CHOICE_specifics_t asn_SPC_Choice_1_specs = {
	sizeof(struct Choice),
	offsetof(struct Choice, _asn_ctx),
	offsetof(struct Choice, present),
	sizeof(((struct Choice *)0)->present),
	asn_MAP_Choice_1_tag2el,
	3,	/* Count of tags in the map */
	1	/* Whether extensible */
};
asn_TYPE_descriptor_t asn_DEF_Choice = {
	"Choice",
	"Choice",
	CHOICE_free,
	CHOICE_print,
	CHOICE_constraint,
	CHOICE_decode_ber,
	CHOICE_encode_der,
	CHOICE_decode_xer,
	CHOICE_encode_xer,
	CHOICE_outmost_tag,
	asn_DEF_Choice_1_tags,
	sizeof(asn_DEF_Choice_1_tags)
		/sizeof(asn_DEF_Choice_1_tags[0]), /* 1 */
	asn_DEF_Choice_1_tags,	/* Same as above */
	sizeof(asn_DEF_Choice_1_tags)
		/sizeof(asn_DEF_Choice_1_tags[0]), /* 1 */
	asn_MBR_Choice_1,
	3,	/* Elements count */
	&asn_SPC_Choice_1_specs	/* Additional specs */
};

