/*
 * 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	_SubbandCQIItem_H_
#define	_SubbandCQIItem_H_


#include "asn_application.h"

/* Including external dependencies */
#include "SubbandCQI.h"
#include "NativeInteger.h"
#include "constr_SEQUENCE.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct ProtocolExtensionContainer;

/* SubbandCQIItem */
typedef struct SubbandCQIItem {
	SubbandCQI_t	 subbandCQI;
	long	 subbandIndex;
	struct ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} SubbandCQIItem_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SubbandCQIItem;
extern asn_SEQUENCE_specifics_t asn_SPC_SubbandCQIItem_specs_1;
extern asn_TYPE_member_t asn_MBR_SubbandCQIItem_1[3];

#ifdef __cplusplus
}
#endif

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