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

#ifndef	_RANAP_VelocityEstimate_H_
#define	_RANAP_VelocityEstimate_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/ranap/RANAP_HorizontalVelocity.h>
#include <osmocom/ranap/RANAP_HorizontalWithVerticalVelocity.h>
#include <osmocom/ranap/RANAP_HorizontalVelocityWithUncertainty.h>
#include <osmocom/ranap/RANAP_HorizontalWithVerticalVelocityAndUncertainty.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_VelocityEstimate_PR {
	RANAP_VelocityEstimate_PR_NOTHING,	/* No components present */
	RANAP_VelocityEstimate_PR_horizontalVelocity,
	RANAP_VelocityEstimate_PR_horizontalWithVerticalVelocity,
	RANAP_VelocityEstimate_PR_horizontalVelocityWithUncertainty,
	RANAP_VelocityEstimate_PR_horizontalWithVeritcalVelocityAndUncertainty,
	/* Extensions may appear below */
	
} RANAP_VelocityEstimate_PR;

/* RANAP_VelocityEstimate */
typedef struct RANAP_VelocityEstimate {
	RANAP_VelocityEstimate_PR present;
	union RANAP_VelocityEstimate_u {
		RANAP_HorizontalVelocity_t	 horizontalVelocity;
		RANAP_HorizontalWithVerticalVelocity_t	 horizontalWithVerticalVelocity;
		RANAP_HorizontalVelocityWithUncertainty_t	 horizontalVelocityWithUncertainty;
		RANAP_HorizontalWithVerticalVelocityAndUncertainty_t	 horizontalWithVeritcalVelocityAndUncertainty;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_VelocityEstimate_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_VelocityEstimate;

#ifdef __cplusplus
}
#endif

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