16 #include <nn/pia/clone/clone_Definitions.h>
17 #include <nn/pia/clone/clone_CloneElementBase.h>
18 #include <nn/pia/clone/clone_ReliableLargeChunkType.h>
68 void Trace(uint64_t flag)
const;
78 return m_ValueSetterStationIndex;
88 return m_ValuePreserverStationIndex;
96 uint32_t GetDestBitmap(uint32_t divideIndex)
const
98 return (divideIndex < m_DivideNum) ? m_aDivideInfo[divideIndex].m_ValueDestBitmap : 0;
107 return GetTypeStatic();
110 static Type GetTypeStatic()
114 static bool Receive(CloneElementBase* pElement, IDataPacker* pAckPacker,
const void* cpChunk, uint16_t chunkSize,
Id elementId,
StationIndex src,
StationIndex localStationIndex, uint32_t dispatchCount);
115 static uint32_t GetDataChunkHeaderSize();
118 bool ReceiveRequest(
StationIndex src, uint16_t divideIndexOffset, uint32_t divideIndexFlag);
119 ReliableLargeChunkType ReceiveData(
const void* cpData, uint32_t size,
StationIndex src,
StationIndex setter,
ClockValue clock, uint16_t divideIndex, uint32_t destBitmap);
125 virtual void ClearData();
131 virtual void RequestInitialData();
134 class ReliableLargeSendToken :
public CloneElementBase::ResendableSendToken
142 virtual TokenType GetTokenType()
const = 0;
145 class ReliableLargeRequestToken :
public ReliableLargeSendToken
148 explicit ReliableLargeRequestToken(ReliableLargeCloneElementBase* pElement)
149 : ReliableLargeSendToken(), m_pElement(pElement), m_DestBitmap(0)
152 virtual Type GetElementType()
const
156 virtual uint32_t GetDestBitmap()
const
160 virtual TokenType GetTokenType()
const
162 return TokenType_Request;
164 virtual uint32_t GetChunkSize()
const;
165 virtual void WriteChunk(
void* pChunkBuffer)
const;
166 virtual CloneElementBase* GetElement()
170 virtual void TraceTokenType()
176 void SetDest(uint32_t destBitmap)
178 m_DestBitmap = destBitmap;
184 return m_pElement->GetId();
188 ReliableLargeCloneElementBase* m_pElement;
189 uint32_t m_DestBitmap;
193 class ReliableLargeDataToken :
public ReliableLargeSendToken
196 explicit ReliableLargeDataToken()
197 : ReliableLargeSendToken()
200 void Init(ReliableLargeCloneElementBase* pElement, uint32_t divideIndex)
202 m_pElement = pElement;
203 m_DivideIndex = divideIndex;
205 virtual Type GetElementType()
const
209 virtual uint32_t GetDestBitmap()
const
211 return m_pElement->m_aDivideInfo[m_DivideIndex].m_SerializedDestBitmap;
213 virtual TokenType GetTokenType()
const
215 return TokenType_Data;
217 virtual uint32_t GetChunkSize()
const;
218 virtual void WriteChunk(
void* pChunkBuffer)
const;
219 virtual CloneElementBase* GetElement()
223 virtual bool IsUnicast()
const
225 #if NN_PIA_ENABLE_CLONE_BROADCAST_RESEND
231 virtual void TraceTokenType()
237 uint32_t GetSize()
const
239 return (m_DivideIndex < m_pElement->m_DivideNum - 1) ? m_pElement->m_DivideSize : m_pElement->m_DivideLastSize;
243 return m_pElement->GetId();
247 return m_pElement->m_SerializedClock;
251 return m_pElement->m_SerializedSetterStationIndex;
255 ReliableLargeCloneElementBase* m_pElement;
256 uint32_t m_DivideIndex;
260 class ReliableLargeInitialToken :
public CloneElementBase::ISendToken
263 explicit ReliableLargeInitialToken()
267 void Init(ReliableLargeCloneElementBase* pElement, uint32_t divideIndex)
269 m_pElement = pElement;
270 m_DivideIndex = divideIndex;
272 virtual Type GetElementType()
const
276 virtual uint32_t GetDestBitmap()
const
280 virtual uint32_t GetChunkSize()
const;
281 virtual void WriteChunk(
void* pChunkBuffer)
const;
282 virtual CloneElementBase* GetElement()
286 virtual void TraceTokenType()
292 uint32_t GetSize()
const
294 return (m_DivideIndex < m_pElement->m_DivideNum - 1) ? m_pElement->m_DivideSize : m_pElement->m_DivideLastSize;
298 PIA_ASSERT(m_pElement->IsValidValue());
303 return m_pElement->GetId();
307 return m_pElement->m_SerializedClock;
311 return m_pElement->m_SerializedSetterStationIndex;
317 m_DestBitmap |= (0x1 << stationIndex);
321 m_DestBitmap &= (0x1 << stationIndex);
329 ReliableLargeCloneElementBase* m_pElement;
330 uint32_t m_DivideIndex;
331 uint32_t m_DestBitmap;
339 : m_ValueDestBitmap(0), m_SerializedDestBitmap(0), m_IsSerializedValid(false), m_DataToken(), m_InitialToken()
343 uint32_t m_ValueDestBitmap;
344 uint32_t m_SerializedDestBitmap;
345 bool m_IsSerializedValid;
346 ReliableLargeDataToken m_DataToken;
347 ReliableLargeInitialToken m_InitialToken;
352 ReliableLargeCloneElementBase(uint8_t* pBuffer, DivideInfo* aDivideInfo, uint32_t serializedSize, uint32_t divideSize, uint32_t divideNum);
354 virtual uint32_t GetSize()
const
358 bool IsEqualValueAndSerialized()
const
360 return m_ValueClock == m_SerializedClock && m_ValueSetterStationIndex == m_SerializedSetterStationIndex;
362 void GetRequestDivideIndex(uint16_t* pOffset, uint32_t* pFlag);
365 Result SetValueCore();
367 virtual void Serialize() = 0;
368 virtual void Deserialize() = 0;
369 virtual void ClearValue() = 0;
381 uint8_t* m_SerializedBuffer;
382 DivideInfo* m_aDivideInfo;
384 uint32_t m_SerializedSize;
385 uint32_t m_DivideSize;
386 uint32_t m_DivideLastSize;
387 uint32_t m_DivideNum;
389 ReliableLargeRequestToken m_RequestToken;
395 uint32_t m_DestBitmap;
396 ReliableRequestToken m_RequestToken;
397 ReliableDataToken m_DataToken;
398 ReliableInitialToken m_InitialToken;
401 static Definition<ReliableLargeCloneElementBase> s_Definition;
404 template <
int TEST_ID,
typename Arg>
405 static void Test(
const ReliableLargeCloneElementBase& obj, Arg* pArg = NULL);
407 NN_PIA_DISALLOW_COPY(ReliableLargeCloneElementBase);