31#ifndef DW_FRAMEWORK_SYNCPORTHELPER_HPP_
32#define DW_FRAMEWORK_SYNCPORTHELPER_HPP_
34#include <dwshared/dwfoundation/dw/core/container/HashContainer.hpp>
35#include <dwshared/dwfoundation/dw/core/safety/Safety.hpp>
82 MetadataPayload* metadataPacket{genericData.template getData<MetadataPayload>()};
86 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: packet type mismatch");
89 T* packet{metadataPacket->data.template getData<T>()};
92 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput extractInternalPacket: failed to extract underlying data");
95 m_metadataPayloadBuf[packet] = metadataPacket;
104 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperOutput getmetadataPacket: sync packet not found in packet buffer");
107 return metadataPacket;
113 m_metadataPayloadBuf = HeapHashMap<T*, MetadataPayload*>(params.
getPoolCapacity());
117 HeapHashMap<T*, MetadataPayload*> m_metadataPayloadBuf;
129 , m_dataBuffered(false)
150 MetadataPayload* packet{m_bufferedPacket.template getData<MetadataPayload>()};
154 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput isValidPacketBuffered: packet type mistmatch");
156 return validatePacket(*packet);
161 m_dataBuffered =
false;
162 return m_bufferedPacket;
167 MetadataPayload* metadataPacket{genericData.template getData<MetadataPayload>()};
171 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput extractSyncPacket: packet type mistmatch");
174 if (validatePacket(*metadataPacket))
176 T* packet{metadataPacket->data.template getData<T>()};
177 m_metadataPayloadBuf[packet] = metadataPacket;
182 m_bufferedPacket = genericData;
183 m_dataBuffered =
true;
190 MetadataPayload* metadataPacket{genericData.template getData<MetadataPayload>()};
194 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput extractInternalPacket: packet type mistmatch");
197 T* packet{metadataPacket->data.template getData<T>()};
198 m_metadataPayloadBuf[packet] = metadataPacket;
207 throw ExceptionWithStatus(DW_INTERNAL_ERROR,
"SyncPortHelperInput getmetadataPacket: sync packet not found in packet buffer");
210 return metadataPacket;
216 m_metadataPayloadBuf = HeapHashMap<T*, MetadataPayload*>(params.
getPoolCapacity());
241 HeapHashMap<T*, MetadataPayload*> m_metadataPayloadBuf;
242 GenericData m_bufferedPacket;
size_t getPoolCapacity() const
T * extractInternalPacket(GenericData genericData)
void parseDataSynced(const ChannelParams ¶ms) override
MetadataPayload * getMetadataPacket(T *frame)
uint32_t ChannelPacketTypeID
uint32_t iterationCount
Producer iteration count.
ChannelPacketTypeID getNewPacketID(ChannelPacketTypeID packetTypeID)
void setSyncCount(uint32_t index)
virtual void parseDataSynced(const ChannelParams ¶ms)
void stampSyncCount(uint32_t &syncCountOut) const