#ifndef SSEMCODEC_H
#define SSEMCODEC_H

#include "Codec.hh"
#include "CodecPer.hh"
#include "loggers.hh" // TODO To be removed
#include "Params.hh"

#include "LibItsSremSsem_TestSystem.hh"

class SsemPDUCodec : public PERCodec <SSEM__PDU__Descriptions::SSEM>
{
public:
  SsemPDUCodec() { loggers::get_instance().log("SsemPDUCodec::SsemPDUCodec(D)"); };
  virtual int encode (const SSEM__PDU__Descriptions::SSEM& ssem, BITSTRING& data);
  virtual int decode (const BITSTRING& data, SSEM__PDU__Descriptions::SSEM&);
};

class SsemCodec : public Codec<SSEM__PDU__Descriptions::SSEM, SSEM__PDU__Descriptions::SSEM>
{
  SsemPDUCodec asnCodec;

public:
  SsemCodec() : Codec<SSEM__PDU__Descriptions::SSEM, SSEM__PDU__Descriptions::SSEM>(), asnCodec() { loggers::get_instance().log("SsemCodec::SsemCodec(D)"); };
  virtual ~SsemCodec() { loggers::get_instance().log("SsemCodec::~SsemCodec"); };

  virtual int encode (const SSEM__PDU__Descriptions::SSEM& ssem, OCTETSTRING& data);
  virtual int decode (const OCTETSTRING& data, SSEM__PDU__Descriptions::SSEM&, Params* params = NULL);
};

#endif
