16 #include <nn/pia/reckoning/reckoning_Definitions.h>
17 #include <nn/pia/clone/clone_CloneElementBase.h>
18 #include <nn/pia/common/common_OffsetList.h>
65 void Trace(uint64_t flag)
const;
73 return GetTypeStatic();
75 virtual bool IsCloneSupported(
int cloneType)
const;
77 static Type GetTypeStatic()
81 static bool Receive(CloneElementBase* pElement, clone::IDataPacker* pAckPacker,
const void* cpChunk, uint16_t chunkSize,
Id elementId,
StationIndex src,
StationIndex myStationIndex, uint32_t dispatchCount);
82 static uint32_t GetDataChunkHeaderSize();
90 virtual void ClearData();
96 virtual void RequestInitialData();
99 class ReckoningSendToken :
public ConversibleResendableSendToken
103 : ConversibleResendableSendToken()
108 m_pElement = pElement;
111 virtual Type GetElementType()
const
115 virtual uint32_t GetDestBitmap()
const
119 virtual uint32_t GetChunkSize()
const;
120 virtual void WriteChunk(
void* pChunkBuffer)
const;
121 virtual CloneElementBase* GetElement()
128 return m_pElement->GetId();
130 uint32_t GetSize()
const
132 return m_pElement->GetSize();
138 void Serialize(
void* pBuffer)
const
140 m_pElement->Serialize(pBuffer,
this);
145 return m_SetterStationIndex;
148 void SetDestBitmap(uint32_t destBmp)
158 m_SetterStationIndex = stationId;
163 m_pElement->AddSendData(
this);
165 void CancelSendData()
167 m_pElement->CancelSendData(
this);
178 template <
typename Sample>
179 class SampleReckoningSendToken :
public ReckoningSendToken
182 SampleReckoningSendToken()
183 : ReckoningSendToken()
186 Sample* GetSamplePtr()
190 const Sample& GetSample()
const
204 Result SetValueCore(
bool* pIsSend);
205 ReckoningSendToken* AssignTokenForSend(
int* pIdx,
bool isResendable);
207 virtual void Serialize(
void* pBuffer,
const ReckoningSendToken* cpToken) = 0;
208 virtual void ClearValue() = 0;
211 virtual void Deserialize(ReckoningSendToken* pToken,
const void* cpData) = 0;
212 virtual void OnUpdateSample(
int idx) = 0;
218 SampleBuffer(ReckoningSendToken** apBuffer,
int size);
221 ReckoningSendToken* Get(
int idx);
222 const ReckoningSendToken* Get(
int idx)
const;
223 bool IsHead(ReckoningSendToken* pToken)
const
225 return (pToken == m_apBuffer[m_HeadIdx]);
234 void AddDest(
StationIndex stationId,
bool IsResponsible);
239 ReckoningSendToken** m_apBuffer;
245 const SampleBuffer& GetSampleBuffer()
const
247 return m_SampleBuffer;
257 template <
typename Sample>
274 return m_cBuffer.GetNum();
285 PIA_ASSERT(index >= 0 && index <
GetNum());
286 return m_cBuffer.Get(index)->GetClock();
297 PIA_ASSERT(index >= 0 && index <
GetNum());
298 return static_cast<const SampleReckoningSendToken<Sample>*
>(m_cBuffer.Get(index))->
GetSample();
302 const SampleBuffer& m_cBuffer;
309 SampleBuffer m_SampleBuffer;
314 static Definition<ReckoningCloneElementBase> s_Definition;
318 void Test(
const CloneProtocol* cpProtocol);
322 template <
int TEST_ID,
typename Arg>