
/*** <<< INCLUDES [Flag] >>> ***/

#include <NativeInteger.h>
#include <constr_SEQUENCE.h>
#include <NativeEnumerated.h>

/*** <<< DEPS [Flag] >>> ***/

typedef enum Flag_15P0__field {
	Flag_15P0__field_red	= 0,
	Flag_15P0__field_green	= 1,
	Flag_15P0__field_blue	= 5
} e_Flag_15P0__field;
typedef enum Flag_15P1__field {
	Flag_15P1__field_red	= 3,
	Flag_15P1__field_green	= 4,
	Flag_15P1__field_blue	= 5
} e_Flag_15P1__field;

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

typedef struct Flag_15P0 {
	long	*field	/* DEFAULT 5 */;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} Flag_15P0_t;
typedef struct Flag_15P1 {
	long	*field	/* DEFAULT 5 */;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} Flag_15P1_t;

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

extern asn_TYPE_descriptor_t asn_DEF_Flag_15P0;
extern asn_SEQUENCE_specifics_t asn_SPC_Flag_15P0_specs_1;
extern asn_TYPE_member_t asn_MBR_Flag_15P0_1[1];
/* extern asn_TYPE_descriptor_t asn_DEF_field_7;	// (Use -fall-defs-global to expose) */
extern asn_TYPE_descriptor_t asn_DEF_Flag_15P1;
extern asn_SEQUENCE_specifics_t asn_SPC_Flag_15P1_specs_6;
extern asn_TYPE_member_t asn_MBR_Flag_15P1_6[1];

/*** <<< CODE [Flag] >>> ***/

/*
 * This type is implemented using NativeEnumerated,
 * so here we adjust the DEF accordingly.
 */

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

static int asn_DFL_2_cmp_5(const void *sptr) {
	const long *st = sptr;
	
	if(!st) {
		return -1; /* No value is not a default value */
	}
	
	/* Test default value 5 */
	return (*st != 5);
}
static int asn_DFL_2_set_5(void **sptr) {
	long *st = *sptr;
	
	if(!st) {
		st = (*sptr = CALLOC(1, sizeof(*st)));
		if(!st) return -1;
	}
	
	/* Install default value 5 */
	*st = 5;
	return 0;
}
asn_TYPE_member_t asn_MBR_Flag_15P0_1[] = {
	{ ATF_POINTER, 1, offsetof(struct Flag_15P0, field),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
		.tag_mode = 0,
		.type = &asn_DEF_NativeInteger,
		.type_selector = 0,
		{ .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
		.default_value_cmp = &asn_DFL_2_cmp_5,	/* Compare DEFAULT 5 */
		.default_value_set = &asn_DFL_2_set_5,	/* Set DEFAULT 5 */
		.name = "field"
		},
};
static const ber_tlv_tag_t asn_DEF_Flag_15P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_Flag_15P0_tag2el_1[] = {
    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* field */
};
asn_SEQUENCE_specifics_t asn_SPC_Flag_15P0_specs_1 = {
	sizeof(struct Flag_15P0),
	offsetof(struct Flag_15P0, _asn_ctx),
	.tag2el = asn_MAP_Flag_15P0_tag2el_1,
	.tag2el_count = 1,	/* Count of tags in the map */
	0, 0, 0,	/* Optional elements (not needed) */
	-1,	/* First extension addition */
};
asn_TYPE_descriptor_t asn_DEF_Flag_15P0 = {
	"Flag",
	"Flag",
	&asn_OP_SEQUENCE,
	asn_DEF_Flag_15P0_tags_1,
	sizeof(asn_DEF_Flag_15P0_tags_1)
		/sizeof(asn_DEF_Flag_15P0_tags_1[0]), /* 1 */
	asn_DEF_Flag_15P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_Flag_15P0_tags_1)
		/sizeof(asn_DEF_Flag_15P0_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_Flag_15P0_1,
	1,	/* Elements count */
	&asn_SPC_Flag_15P0_specs_1	/* Additional specs */
};

static int asn_DFL_7_cmp_5(const void *sptr) {
	const long *st = sptr;
	
	if(!st) {
		return -1; /* No value is not a default value */
	}
	
	/* Test default value 5 */
	return (*st != 5);
}
static int asn_DFL_7_set_5(void **sptr) {
	long *st = *sptr;
	
	if(!st) {
		st = (*sptr = CALLOC(1, sizeof(*st)));
		if(!st) return -1;
	}
	
	/* Install default value 5 */
	*st = 5;
	return 0;
}
static const asn_INTEGER_enum_map_t asn_MAP_field_value2enum_7[] = {
	{ 3,	3,	"red" },
	{ 4,	5,	"green" },
	{ 5,	4,	"blue" }
};
static const unsigned int asn_MAP_field_enum2value_7[] = {
	2,	/* blue(5) */
	1,	/* green(4) */
	0	/* red(3) */
};
static const asn_INTEGER_specifics_t asn_SPC_field_specs_7 = {
	asn_MAP_field_value2enum_7,	/* "tag" => N; sorted by tag */
	asn_MAP_field_enum2value_7,	/* N => "tag"; sorted by N */
	3,	/* Number of elements in the maps */
	0,	/* Enumeration is not extensible */
	1,	/* Strict enumeration */
	0,	/* Native long size */
	0
};
static const ber_tlv_tag_t asn_DEF_field_tags_7[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
static /* Use -fall-defs-global to expose */
asn_TYPE_descriptor_t asn_DEF_field_7 = {
	"field",
	"field",
	&asn_OP_NativeEnumerated,
	asn_DEF_field_tags_7,
	sizeof(asn_DEF_field_tags_7)
		/sizeof(asn_DEF_field_tags_7[0]), /* 1 */
	asn_DEF_field_tags_7,	/* Same as above */
	sizeof(asn_DEF_field_tags_7)
		/sizeof(asn_DEF_field_tags_7[0]), /* 1 */
	{ 0, 0, NativeEnumerated_constraint },
	0, 0,	/* Defined elsewhere */
	&asn_SPC_field_specs_7	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_Flag_15P1_6[] = {
	{ ATF_POINTER, 1, offsetof(struct Flag_15P1, field),
		.tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
		.tag_mode = 0,
		.type = &asn_DEF_field_7,
		.type_selector = 0,
		{ .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
		.default_value_cmp = &asn_DFL_7_cmp_5,	/* Compare DEFAULT 5 */
		.default_value_set = &asn_DFL_7_set_5,	/* Set DEFAULT 5 */
		.name = "field"
		},
};
static const ber_tlv_tag_t asn_DEF_Flag_15P1_tags_6[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_Flag_15P1_tag2el_6[] = {
    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* field */
};
asn_SEQUENCE_specifics_t asn_SPC_Flag_15P1_specs_6 = {
	sizeof(struct Flag_15P1),
	offsetof(struct Flag_15P1, _asn_ctx),
	.tag2el = asn_MAP_Flag_15P1_tag2el_6,
	.tag2el_count = 1,	/* Count of tags in the map */
	0, 0, 0,	/* Optional elements (not needed) */
	-1,	/* First extension addition */
};
asn_TYPE_descriptor_t asn_DEF_Flag_15P1 = {
	"Flag",
	"Flag",
	&asn_OP_SEQUENCE,
	asn_DEF_Flag_15P1_tags_6,
	sizeof(asn_DEF_Flag_15P1_tags_6)
		/sizeof(asn_DEF_Flag_15P1_tags_6[0]), /* 1 */
	asn_DEF_Flag_15P1_tags_6,	/* Same as above */
	sizeof(asn_DEF_Flag_15P1_tags_6)
		/sizeof(asn_DEF_Flag_15P1_tags_6[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_Flag_15P1_6,
	1,	/* Elements count */
	&asn_SPC_Flag_15P1_specs_6	/* Additional specs */
};


/*** <<< INCLUDES [IntegerColorFlag] >>> ***/

#include "Flag.h"

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

typedef Flag_15P0_t	 IntegerColorFlag_t;

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

extern asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag;
asn_struct_free_f IntegerColorFlag_free;
asn_struct_print_f IntegerColorFlag_print;
asn_constr_check_f IntegerColorFlag_constraint;
ber_type_decoder_f IntegerColorFlag_decode_ber;
der_type_encoder_f IntegerColorFlag_encode_der;
xer_type_decoder_f IntegerColorFlag_decode_xer;
xer_type_encoder_f IntegerColorFlag_encode_xer;

/*** <<< CODE [IntegerColorFlag] >>> ***/

/*
 * This type is implemented using Flag_15P0,
 * so here we adjust the DEF accordingly.
 */

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

static const ber_tlv_tag_t asn_DEF_IntegerColorFlag_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag = {
	"IntegerColorFlag",
	"IntegerColorFlag",
	&asn_OP_SEQUENCE,
	asn_DEF_IntegerColorFlag_tags_1,
	sizeof(asn_DEF_IntegerColorFlag_tags_1)
		/sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
	asn_DEF_IntegerColorFlag_tags_1,	/* Same as above */
	sizeof(asn_DEF_IntegerColorFlag_tags_1)
		/sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_Flag_15P0_1,
	1,	/* Elements count */
	&asn_SPC_Flag_15P0_specs_1	/* Additional specs */
};


/*** <<< INCLUDES [EnumeratedColorFlag] >>> ***/

#include "Flag.h"

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

typedef Flag_15P1_t	 EnumeratedColorFlag_t;

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

extern asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag;
asn_struct_free_f EnumeratedColorFlag_free;
asn_struct_print_f EnumeratedColorFlag_print;
asn_constr_check_f EnumeratedColorFlag_constraint;
ber_type_decoder_f EnumeratedColorFlag_decode_ber;
der_type_encoder_f EnumeratedColorFlag_encode_der;
xer_type_decoder_f EnumeratedColorFlag_decode_xer;
xer_type_encoder_f EnumeratedColorFlag_encode_xer;

/*** <<< CODE [EnumeratedColorFlag] >>> ***/

/*
 * This type is implemented using Flag_15P1,
 * so here we adjust the DEF accordingly.
 */

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

static const ber_tlv_tag_t asn_DEF_EnumeratedColorFlag_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag = {
	"EnumeratedColorFlag",
	"EnumeratedColorFlag",
	&asn_OP_SEQUENCE,
	asn_DEF_EnumeratedColorFlag_tags_1,
	sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
		/sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
	asn_DEF_EnumeratedColorFlag_tags_1,	/* Same as above */
	sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
		/sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_Flag_15P1_6,
	1,	/* Elements count */
	&asn_SPC_Flag_15P1_specs_6	/* Additional specs */
};

