Program Listing for File TCPPacketMerger.h

Return to documentation for file (/tmp/ws/src/sick_safetyscanners_base/include/sick_safetyscanners_base/data_processing/TCPPacketMerger.h)

// this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-

// -- BEGIN LICENSE BLOCK ----------------------------------------------

// -- END LICENSE BLOCK ------------------------------------------------

//----------------------------------------------------------------------
//----------------------------------------------------------------------

#ifndef SICK_SAFETYSCANNERS_BASE_DATA_PROCESSING_TCPPACKETMERGER_H
#define SICK_SAFETYSCANNERS_BASE_DATA_PROCESSING_TCPPACKETMERGER_H

#include "sick_safetyscanners_base/datastructure/PacketBuffer.h"

#include "sick_safetyscanners_base/data_processing/ParseDatagramHeader.h"

#include <mutex>
#include <vector>

namespace sick {
namespace data_processing {

class TCPPacketMerger
{
public:
  TCPPacketMerger() = delete;
  TCPPacketMerger(std::size_t target_size);
  TCPPacketMerger(const TCPPacketMerger&) = delete;
  TCPPacketMerger& operator=(const TCPPacketMerger&) = delete;

  bool isComplete() const;

  bool isEmpty() const;

  bool addTCPPacket(const sick::datastructure::PacketBuffer& buffer);

  sick::datastructure::PacketBuffer getDeployedPacketBuffer();

  std::size_t getTargetSize() const;

  void setTargetSize(std::size_t target_size);

  // void reset();

private:
  bool m_is_complete;
  sick::datastructure::PacketBuffer m_deployed_packet_buffer;

  std::vector<sick::datastructure::PacketBuffer> m_buffer_vector;
  std::mutex m_buffer_mutex;
  std::size_t m_target_size;

  bool addToMap(const sick::datastructure::PacketBuffer& new_packet);
  bool deployPacketIfComplete();

  std::size_t getCurrentSize();
  bool deployPacket();
};

} // namespace data_processing
} // namespace sick

#endif // SICK_SAFETYSCANNERS_BASE_DATA_PROCESSING_TCPPACKETMERGER_H