#ifndef __JDAQSUPERFRAMEHEADER_IO__
#define __JDAQSUPERFRAMEHEADER_IO__

#include "km3net-dataformat/online/JDAQSuperFrameHeader.hh"

#include "JIO/JSerialisable.hh"

#include "JDAQ/JDAQHeaderIO.hh"
#include "JDAQ/JDAQModuleIdentifierIO.hh"
#include "JDAQ/JDAQFrameStatusIO.hh"

/**
 * \author mdejong
 */
namespace KM3NETDAQ {


  /**
   * Get size of type.
   *
   * \return               number of bytes
   */
  template<>
  size_t getSizeof<JDAQSuperFrameHeader>()
  {
    return (getSizeof<JDAQHeader>()            +
	    getSizeof<JDAQModuleIdentifier>()  +
	    getSizeof<JDAQFrameStatus>());
  }


  /**
   * Read DAQ super frame header from input.
   *
   * \param  in             reader
   * \param  header         DAQ super frame header
   * \return                reader
   */
  inline JReader& operator>>(JReader& in, JDAQSuperFrameHeader& header)
  {
    in >> static_cast<JDAQHeader&>          (header);
    in >> static_cast<JDAQModuleIdentifier&>(header);
    in >> static_cast<JDAQFrameStatus&>     (header);

    return in;
  }


  /**
   * Write DAQ super frame header to output.
   *
   * \param  out            writer
   * \param  header         DAQ supe frame header
   * \return                writer
   */
  inline JWriter& operator<<(JWriter& out, const JDAQSuperFrameHeader& header)
  {
    out << static_cast<const JDAQHeader&>          (header);
    out << static_cast<const JDAQModuleIdentifier&>(header);
    out << static_cast<const JDAQFrameStatus&>     (header);

    return out;
  }
}

#endif