#ifndef ITS_ContainerCodec_HH
#define ITS_ContainerCodec_HH

#include "Asn1cEncDec.hh"
#include "ITS_Container.hh"

// ItsPduHeader
struct ItsPduHeader;
void                              titan2asn1c(const ITS__Container::ItsPduHeader&, ItsPduHeader&);
ITS__Container::ItsPduHeader      asn1c2titan(const ItsPduHeader& a);

// ReferencePosition
struct ReferencePosition;
void                              titan2asn1c(const ITS__Container::ReferencePosition&, ReferencePosition& a);
ITS__Container::ReferencePosition asn1c2titan(const ReferencePosition& a);

// VehicleRole
void                              titan2asn1c(const ITS__Container::VehicleRole&, long& a);
//template <>
//ITS__Container::VehicleRole	      asn1c2titan<ITS__Container::VehicleRole>(const long& a);

//PathHistory
struct PathHistory;
void                              titan2asn1c(const ITS__Container::PathHistory&, PathHistory& a);
ITS__Container::PathHistory	      asn1c2titan(const PathHistory& a);

// ProtectedCommunicationZonesRSU
struct ProtectedCommunicationZonesRSU;
void                              titan2asn1c(const ITS__Container::ProtectedCommunicationZonesRSU&, ProtectedCommunicationZonesRSU&);
ITS__Container::ProtectedCommunicationZonesRSU asn1c2titan(const ProtectedCommunicationZonesRSU&);

// Heading
struct Heading;
void                              titan2asn1c(const ITS__Container::Heading&, Heading& a);
ITS__Container::Heading	          asn1c2titan(const Heading& a);

// Speed
struct Speed;
void                              titan2asn1c(const ITS__Container::Speed&, Speed& a);
ITS__Container::Speed	          asn1c2titan(const Speed& a);

// VehicleLength
struct VehicleLength;
void                              titan2asn1c(const ITS__Container::VehicleLength&, VehicleLength& a);
ITS__Container::VehicleLength	  asn1c2titan(const VehicleLength& a);

// LongitudinalAcceleration
struct LongitudinalAcceleration;
void                              titan2asn1c(const ITS__Container::LongitudinalAcceleration&, LongitudinalAcceleration& a);
ITS__Container::LongitudinalAcceleration	  asn1c2titan(const LongitudinalAcceleration& a);

// Curvature
struct Curvature;
void                              titan2asn1c(const ITS__Container::Curvature&, Curvature& a);
ITS__Container::Curvature	      asn1c2titan(const Curvature& a);

// YawRate
struct YawRate;
void                              titan2asn1c(const ITS__Container::YawRate&, YawRate& a);
ITS__Container::YawRate	          asn1c2titan(const YawRate& a);

// SteeringWheelAngle
struct SteeringWheelAngle;
void                               titan2asn1c(const ITS__Container::SteeringWheelAngle&, SteeringWheelAngle& a);
ITS__Container::SteeringWheelAngle asn1c2titan(const SteeringWheelAngle& a);

// LateralAcceleration
struct LateralAcceleration;
void                              titan2asn1c(const ITS__Container::LateralAcceleration&, LateralAcceleration& a);
ITS__Container::LateralAcceleration	 asn1c2titan(const LateralAcceleration& a);

// VerticalAcceleration
struct VerticalAcceleration;
void                              titan2asn1c(const ITS__Container::VerticalAcceleration&, VerticalAcceleration& a);
ITS__Container::VerticalAcceleration asn1c2titan(const VerticalAcceleration& a);

// CenDsrcTollingZone
struct CenDsrcTollingZone;
void                              titan2asn1c(const ITS__Container::CenDsrcTollingZone&, CenDsrcTollingZone& a);
ITS__Container::CenDsrcTollingZone asn1c2titan(const CenDsrcTollingZone& a);

// DriveDirection
void                              titan2asn1c(const ITS__Container::DriveDirection&, long& a);

// CurvatureCalculationMode
void                              titan2asn1c(const ITS__Container::CurvatureCalculationMode&, long&);

// DangerousGoodsBasic
void                              titan2asn1c(const ITS__Container::DangerousGoodsBasic&, long& a);

// CauseCode
struct CauseCode;
void                              titan2asn1c(const ITS__Container::CauseCode&, CauseCode& a);
ITS__Container::CauseCode         asn1c2titan(const CauseCode& a);

// TrafficRule
void                              titan2asn1c(const ITS__Container::TrafficRule&t, long& a);

// PtActivation
struct PtActivation;
void                              titan2asn1c(const ITS__Container::PtActivation&t, PtActivation& a);
ITS__Container::PtActivation      asn1c2titan(const PtActivation& a);

//ClosedLanes
struct ClosedLanes;
void                              titan2asn1c(const ITS__Container::ClosedLanes&t, ClosedLanes& a);
ITS__Container::ClosedLanes       asn1c2titan(const ClosedLanes& a);

// PosConfidenceEllipse
struct PosConfidenceEllipse;
void                              titan2asn1c(const ITS__Container::PosConfidenceEllipse&t, PosConfidenceEllipse& a);
ITS__Container::PosConfidenceEllipse asn1c2titan(const PosConfidenceEllipse& a);

struct Altitude;
void                              titan2asn1c(const ITS__Container::Altitude&t, Altitude& a);
ITS__Container::Altitude asn1c2titan(const Altitude& a);



/*
struct TYPE;
void                              titan2asn1c(const ITS__Container::TYPE&t, TYPE& a);
ITS__Container::TYPE asn1c2titan(const TYPE& a);
*/

#endif
