
/*** <<< 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,
		.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 = "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,
		.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 = "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,
		.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 = "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,
		.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 = "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),
	.tag2el = asn_MAP_PDU_tag2el_1,
	.tag2el_count = 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",
	&asn_OP_SEQUENCE,
	SEQUENCE_constraint,
	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,
		.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 = 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),
	.tag2el = asn_MAP_Singleton_tag2el_1,
	.tag2el_count = 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",
	&asn_OP_SEQUENCE,
	SEQUENCE_constraint,
	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,
		.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 = "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,
		.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 = "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,
		.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 = "ext0"
		},
};
static const unsigned 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),
	.tag2el = asn_MAP_PDU_2_tag2el_1,
	.tag2el_count = 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",
	&asn_OP_CHOICE,
	CHOICE_constraint,
	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 */
};

