
/*** <<< INCLUDES [PDU] >>> ***/

#include <IA5String.h>
#include "Singleton.h"
#include <constr_SEQUENCE.h>

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

struct PDU_2;
struct Singleton;

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

typedef struct PDU {
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	IA5String_t	*str_o	/* OPTIONAL */;
	IA5String_t	*str_m;
	struct Singleton	*singl;
	struct PDU_2	*pdu_2	/* OPTIONAL */;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} PDU_t;

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

extern asn_TYPE_descriptor_t asn_DEF_PDU;

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

#include "PDU-2.h"

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

static asn_TYPE_member_t asn_MBR_PDU_1[] = {
	{ ATF_POINTER, 4, offsetof(struct PDU, str_o),
		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_IA5String,
		.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 = "str-o"
		},
	{ ATF_POINTER, 3, offsetof(struct PDU, str_m),
		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_IA5String,
		.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 = "str-m"
		},
	{ ATF_POINTER, 2, offsetof(struct PDU, singl),
		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_Singleton,
		.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 = "singl"
		},
	{ ATF_POINTER, 1, offsetof(struct PDU, pdu_2),
		.tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
		.tag_mode = +1,	/* EXPLICIT tag at current level */
		.type = &asn_DEF_PDU_2,
		.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 = "pdu-2"
		},
};
static const int asn_MAP_PDU_oms_1[] = { 0, 1, 2, 3 };
static const ber_tlv_tag_t asn_DEF_PDU_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = {
    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* str-o */
    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* str-m */
    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* singl */
    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pdu-2 */
};
static asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1 = {
	sizeof(struct PDU),
	offsetof(struct PDU, _asn_ctx),
	asn_MAP_PDU_tag2el_1,
	4,	/* Count of tags in the map */
	asn_MAP_PDU_oms_1,	/* Optional members */
	0, 4,	/* Root/Additions */
	-1,	/* Start extensions */
	5	/* Stop extensions */
};
asn_TYPE_descriptor_t asn_DEF_PDU = {
	"PDU",
	"PDU",
	SEQUENCE_free,
	SEQUENCE_print,
	SEQUENCE_constraint,
	SEQUENCE_decode_ber,
	SEQUENCE_encode_der,
	SEQUENCE_decode_xer,
	SEQUENCE_encode_xer,
	0, 0,	/* No OER support, use "-gen-OER" to enable */
	SEQUENCE_decode_uper,
	SEQUENCE_encode_uper,
	0,	/* Use generic outmost tag fetcher */
	asn_DEF_PDU_tags_1,
	sizeof(asn_DEF_PDU_tags_1)
		/sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
	asn_DEF_PDU_tags_1,	/* Same as above */
	sizeof(asn_DEF_PDU_tags_1)
		/sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
	0,	/* No OER visible constraints */
	0,	/* No PER visible constraints */
	asn_MBR_PDU_1,
	4,	/* Elements count */
	&asn_SPC_PDU_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [Singleton] >>> ***/

#include <IA5String.h>
#include <constr_SEQUENCE.h>

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

typedef struct Singleton {
	IA5String_t	*opt_z	/* DEFAULT z */;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} Singleton_t;

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

extern asn_TYPE_descriptor_t asn_DEF_Singleton;
extern asn_SEQUENCE_specifics_t asn_SPC_Singleton_specs_1;
extern asn_TYPE_member_t asn_MBR_Singleton_1[1];

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

static int asn_DFL_2_set(int set_value, void **sptr) {
	static uint8_t defv[] = "z";
	IA5String_t *st = *sptr;
	
	if(!st) {
		if(!set_value) return -1;	/* Not a default value */
		st = (*sptr = CALLOC(1, sizeof(*st)));
		if(!st) return -1;
	}
	
	if(set_value) {
		uint8_t *ptr = MALLOC(sizeof(defv));
		if(!ptr) return -1;
		memcpy(ptr, &defv, sizeof(defv));
		FREEMEM(st->buf);
		st->buf = ptr;
		st->size = sizeof(defv) - 1;
		return 0;
	} else {
		if(st->size != (sizeof(defv) - 1)
		|| memcmp(st->buf, &defv, sizeof(defv) - 1))
			return 0;
		return 1;
	}
	
}
asn_TYPE_member_t asn_MBR_Singleton_1[] = {
	{ ATF_POINTER, 1, offsetof(struct Singleton, opt_z),
		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_IA5String,
		.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 = asn_DFL_2_set,	/* DEFAULT "z" */
		.name = "opt-z"
		},
};
static const int asn_MAP_Singleton_oms_1[] = { 0 };
static const ber_tlv_tag_t asn_DEF_Singleton_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_Singleton_tag2el_1[] = {
    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* opt-z */
};
asn_SEQUENCE_specifics_t asn_SPC_Singleton_specs_1 = {
	sizeof(struct Singleton),
	offsetof(struct Singleton, _asn_ctx),
	asn_MAP_Singleton_tag2el_1,
	1,	/* Count of tags in the map */
	asn_MAP_Singleton_oms_1,	/* Optional members */
	1, 0,	/* Root/Additions */
	-1,	/* Start extensions */
	-1	/* Stop extensions */
};
asn_TYPE_descriptor_t asn_DEF_Singleton = {
	"Singleton",
	"Singleton",
	SEQUENCE_free,
	SEQUENCE_print,
	SEQUENCE_constraint,
	SEQUENCE_decode_ber,
	SEQUENCE_encode_der,
	SEQUENCE_decode_xer,
	SEQUENCE_encode_xer,
	0, 0,	/* No OER support, use "-gen-OER" to enable */
	SEQUENCE_decode_uper,
	SEQUENCE_encode_uper,
	0,	/* Use generic outmost tag fetcher */
	asn_DEF_Singleton_tags_1,
	sizeof(asn_DEF_Singleton_tags_1)
		/sizeof(asn_DEF_Singleton_tags_1[0]), /* 1 */
	asn_DEF_Singleton_tags_1,	/* Same as above */
	sizeof(asn_DEF_Singleton_tags_1)
		/sizeof(asn_DEF_Singleton_tags_1[0]), /* 1 */
	0,	/* No OER visible constraints */
	0,	/* No PER visible constraints */
	asn_MBR_Singleton_1,
	1,	/* Elements count */
	&asn_SPC_Singleton_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [PDU-2] >>> ***/

#include <NativeInteger.h>
#include <constr_CHOICE.h>

/*** <<< DEPS [PDU-2] >>> ***/

typedef enum PDU_2_PR {
	PDU_2_PR_NOTHING,	/* No components present */
	PDU_2_PR_main,
	/* Extensions may appear below */
	PDU_2_PR_ext1,
	PDU_2_PR_ext0
} PDU_2_PR;

/*** <<< TYPE-DECLS [PDU-2] >>> ***/

typedef struct PDU_2 {
	PDU_2_PR present;
	union PDU_2_u {
		long	 main;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
		long	 ext1;
		long	 ext0;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} PDU_2_t;

/*** <<< FUNC-DECLS [PDU-2] >>> ***/

extern asn_TYPE_descriptor_t asn_DEF_PDU_2;
extern asn_CHOICE_specifics_t asn_SPC_PDU_2_specs_1;
extern asn_TYPE_member_t asn_MBR_PDU_2_1[3];
extern asn_per_constraints_t asn_PER_type_PDU_2_constr_1;

/*** <<< CTDEFS [PDU-2] >>> ***/

asn_per_constraints_t asn_PER_type_PDU_2_constr_1 GCC_NOTUSED = {
	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	0, 0	/* No PER value map */
};

/*** <<< STAT-DEFS [PDU-2] >>> ***/

asn_TYPE_member_t asn_MBR_PDU_2_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.main),
		.tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_NativeInteger,
		.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 = "main"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.ext1),
		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_NativeInteger,
		.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 = "ext1"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.ext0),
		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
		.tag_mode = -1,	/* IMPLICIT tag at current level */
		.type = &asn_DEF_NativeInteger,
		.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 = "ext0"
		},
};
static const int asn_MAP_PDU_2_cmap_1[] = { 0, 2, 1 };
static const asn_TYPE_tag2member_t asn_MAP_PDU_2_tag2el_1[] = {
    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ext0 */
    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ext1 */
    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* main */
};
asn_CHOICE_specifics_t asn_SPC_PDU_2_specs_1 = {
	sizeof(struct PDU_2),
	offsetof(struct PDU_2, _asn_ctx),
	offsetof(struct PDU_2, present),
	sizeof(((struct PDU_2 *)0)->present),
	asn_MAP_PDU_2_tag2el_1,
	3,	/* Count of tags in the map */
	.canonical_order = asn_MAP_PDU_2_cmap_1,	/* Canonically sorted */
	.ext_start = 1	/* Extensions start */
};
asn_TYPE_descriptor_t asn_DEF_PDU_2 = {
	"PDU-2",
	"PDU-2",
	CHOICE_free,
	CHOICE_print,
	CHOICE_constraint,
	CHOICE_decode_ber,
	CHOICE_encode_der,
	CHOICE_decode_xer,
	CHOICE_encode_xer,
	0, 0,	/* No OER support, use "-gen-OER" to enable */
	CHOICE_decode_uper,
	CHOICE_encode_uper,
	CHOICE_outmost_tag,
	0,	/* No effective tags (pointer) */
	0,	/* No effective tags (count) */
	0,	/* No tags (pointer) */
	0,	/* No tags (count) */
	0,	/* No OER visible constraints */
	&asn_PER_type_PDU_2_constr_1,
	asn_MBR_PDU_2_1,
	3,	/* Elements count */
	&asn_SPC_PDU_2_specs_1	/* Additional specs */
};

