/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-CommonDataTypes"
 * 	found in "../../asn1/ranap/RANAP-CommonDataTypes.asn"
 */

#ifndef	_RANAP_Presence_H_
#define	_RANAP_Presence_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_Presence {
	RANAP_Presence_optional	= 0,
	RANAP_Presence_conditional	= 1,
	RANAP_Presence_mandatory	= 2
} e_RANAP_Presence;

/* RANAP_Presence */
typedef long	 RANAP_Presence_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_Presence;
asn_struct_free_f RANAP_Presence_free;
asn_struct_print_f RANAP_Presence_print;
asn_constr_check_f RANAP_Presence_constraint;
ber_type_decoder_f RANAP_Presence_decode_ber;
der_type_encoder_f RANAP_Presence_encode_der;
xer_type_decoder_f RANAP_Presence_decode_xer;
xer_type_encoder_f RANAP_Presence_encode_xer;
per_type_decoder_f RANAP_Presence_decode_uper;
per_type_encoder_f RANAP_Presence_encode_uper;
per_type_decoder_f RANAP_Presence_decode_aper;
per_type_encoder_f RANAP_Presence_encode_aper;

#ifdef __cplusplus
}
#endif

#endif	/* _RANAP_Presence_H_ */
#include <asn_internal.h>
