/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-IEs"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#ifndef	_SubframeAssignment_H_
#define	_SubframeAssignment_H_


#include "asn_application.h"

/* Including external dependencies */
#include "NativeEnumerated.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum SubframeAssignment {
	SubframeAssignment_sa0	= 0,
	SubframeAssignment_sa1	= 1,
	SubframeAssignment_sa2	= 2,
	SubframeAssignment_sa3	= 3,
	SubframeAssignment_sa4	= 4,
	SubframeAssignment_sa5	= 5,
	SubframeAssignment_sa6	= 6
	/*
	 * Enumeration is extensible
	 */
} e_SubframeAssignment;

/* SubframeAssignment */
typedef long	 SubframeAssignment_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_SubframeAssignment_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SubframeAssignment;
extern const asn_INTEGER_specifics_t asn_SPC_SubframeAssignment_specs_1;
asn_struct_free_f SubframeAssignment_free;
asn_struct_print_f SubframeAssignment_print;
asn_constr_check_f SubframeAssignment_constraint;
ber_type_decoder_f SubframeAssignment_decode_ber;
der_type_encoder_f SubframeAssignment_encode_der;
xer_type_decoder_f SubframeAssignment_decode_xer;
xer_type_encoder_f SubframeAssignment_encode_xer;
per_type_decoder_f SubframeAssignment_decode_uper;
per_type_encoder_f SubframeAssignment_encode_uper;
per_type_decoder_f SubframeAssignment_decode_aper;
per_type_encoder_f SubframeAssignment_encode_aper;

#ifdef __cplusplus
}
#endif

#endif	/* _SubframeAssignment_H_ */
#include "asn_internal.h"
