#ifndef __JDAQFRAME_IO__
#define __JDAQFRAME_IO__

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

#include "JIO/JSerialisable.hh"

#include "JDAQ/JDAQHitIO.hh"

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

  /**
   * Get size of object.
   *
   * \param  object        DAQ frame
   * \return               number of bytes
   */
  inline size_t getSizeof(const JDAQFrame& object)
  {
    return sizeof(JDAQFrame::numberOfHits)  +  object.numberOfHits * sizeof(JDAQHit);
  }


  /**
   * Read DAQ frame from input.
   *
   * \param  in               reader
   * \param  frame            DAQ frame
   * \return                  reader
   */
  inline JReader& operator>>(JReader& in, JDAQFrame& frame)
  {
    frame.clear();

    int number_of_hits;

    in >> number_of_hits; 

    frame.resize(number_of_hits);

    in.read((char*) frame.buffer, frame.numberOfHits * sizeof(JDAQHit));

    return in;
  }


  /**
   * Write DAQ frame to output.
   *
   * \param  out             writer
   * \param  frame           DAQ frame
   * \return                 writer
   */
  inline JWriter& operator<<(JWriter& out, const JDAQFrame& frame)
  {
    out << frame.numberOfHits;

    out.write((char*) frame.buffer, frame.numberOfHits * sizeof(JDAQHit));

    return out;
  }
}

#endif