Program Listing for File UDPPacketMerger.h

Return to documentation for file (/tmp/ws/src/sick_safetyscanners_base/include/sick_safetyscanners_base/data_processing/UDPPacketMerger.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_UDPPACKETMERGER_H
#define SICK_SAFETYSCANNERS_BASE_DATA_PROCESSING_UDPPACKETMERGER_H

#include "sick_safetyscanners_base/datastructure/PacketBuffer.h"
#include "sick_safetyscanners_base/datastructure/ParsedPacketBuffer.h"

#include "sick_safetyscanners_base/data_processing/ParseDatagramHeader.h"

#include <algorithm>
#include <mutex>

namespace sick {
namespace data_processing {

class UDPPacketMerger
{
public:
  UDPPacketMerger();

  bool isComplete() const;

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

  sick::datastructure::PacketBuffer getDeployedPacketBuffer();

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

  std::map<uint32_t, sick::datastructure::ParsedPacketBuffer::ParsedPacketBufferVector>
    m_parsed_packet_buffer_map;
  std::mutex m_buffer_mutex;

  bool addToMap(const sick::datastructure::PacketBuffer& buffer,
                const sick::datastructure::DatagramHeader& header);
  bool deployPacketIfComplete(datastructure::DatagramHeader& header);
  bool checkIfComplete(sick::datastructure::DatagramHeader& header);
  uint32_t calcualteCurrentLengthOfParsedPacketBuffer(
    const sick::datastructure::ParsedPacketBuffer::ParsedPacketBufferVector& vec);
  sick::datastructure::ParsedPacketBuffer::ParsedPacketBufferVector
  getSortedParsedPacketBufferForIdentification(const sick::datastructure::DatagramHeader& header);
  std::vector<uint8_t> removeHeaderFromParsedPacketBuffer(
    const sick::datastructure::ParsedPacketBuffer::ParsedPacketBufferVector& vec);
};

} // namespace data_processing
} // namespace sick

#endif // SICK_SAFETYSCANNERS_BASE_DATA_PROCESSING_UDPPACKETMERGER_H