#ifndef CAMCODEC_H
#define CAMCODEC_H

#include "Codec.hh"
#include "PERCodec.hh"
#include "Params.hh"

class BITSTRING;
class OCTETSTRING;
namespace CAM__PDU__Descriptions {
  class CAM;
}

class CAMPDUCodec : public PERCodec <CAM__PDU__Descriptions::CAM>
{
public:
  CAMPDUCodec() { };
  virtual int encode (const CAM__PDU__Descriptions::CAM& cam, BITSTRING& data);
  virtual int decode (const BITSTRING& data, CAM__PDU__Descriptions::CAM&);
};

class CAMCodec : public Codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM>
{
  CAMPDUCodec asnCodec;

public:
  CAMCodec() : Codec<CAM__PDU__Descriptions::CAM, CAM__PDU__Descriptions::CAM>(), asnCodec() { };
  virtual ~CAMCodec() { };

  virtual int encode (const CAM__PDU__Descriptions::CAM& cam, OCTETSTRING& data);
  virtual int decode (const OCTETSTRING& data, CAM__PDU__Descriptions::CAM&, Params* params = NULL);
};

#endif
