16 #include <nn/pia/clone/clone_Definitions.h>
17 #include <nn/pia/clone/clone_CloneElementBase.h>
73 void Trace(uint64_t flag)
const;
83 return m_SetterStationIndex;
93 return m_PreserverStationIndex;
101 uint32_t GetDestBitmap()
const
112 return GetTypeStatic();
115 static Type GetTypeStatic()
119 static bool Receive(CloneElementBase* pElement, IDataPacker* pAckPacker,
const void* cpChunk, uint16_t chunkSize,
Id elementId,
StationIndex src,
StationIndex localStationIndex, uint32_t dispatchCount);
120 static uint32_t GetDataChunkHeaderSize();
130 virtual void ClearData();
136 virtual void RequestInitialData();
139 class ReliableSendToken :
public CloneElementBase::ResendableSendToken
147 virtual TokenType GetTokenType()
const = 0;
151 class ReliableRequestToken :
public ReliableSendToken
154 explicit ReliableRequestToken(ReliableCloneElementBase* pElement)
155 : ReliableSendToken(), m_pElement(pElement)
158 virtual Type GetElementType()
const
162 virtual uint32_t GetDestBitmap()
const
164 return m_pElement->m_DestBitmap;
166 virtual TokenType GetTokenType()
const
168 return TokenType_Request;
170 virtual uint32_t GetChunkSize()
const;
171 virtual void WriteChunk(
void* pChunkBuffer)
const;
172 virtual CloneElementBase* GetElement()
176 virtual void TraceTokenType()
184 return m_pElement->GetId();
188 ReliableCloneElementBase* m_pElement;
192 class ReliableDataToken :
public ReliableSendToken
195 explicit ReliableDataToken(ReliableCloneElementBase* pElement)
196 : ReliableSendToken(), m_pElement(pElement)
199 virtual Type GetElementType()
const
203 virtual uint32_t GetDestBitmap()
const
205 return m_pElement->m_DestBitmap;
207 virtual TokenType GetTokenType()
const
209 return TokenType_Data;
211 virtual uint32_t GetChunkSize()
const;
212 virtual void WriteChunk(
void* pChunkBuffer)
const;
213 virtual CloneElementBase* GetElement()
217 virtual bool IsUnicast()
const
219 #if NN_PIA_ENABLE_CLONE_BROADCAST_RESEND
225 virtual void TraceTokenType()
231 uint32_t GetSize()
const
233 return m_pElement->GetSize();
237 return m_pElement->GetId();
241 return m_pElement->m_Clock;
245 return m_pElement->m_SetterStationIndex;
247 void Serialize(
void* pBuffer)
const
249 m_pElement->Serialize(pBuffer);
253 ReliableCloneElementBase* m_pElement;
257 class ReliableInitialToken :
public CloneElementBase::ISendToken
260 explicit ReliableInitialToken(ReliableCloneElementBase* pElement)
261 : ISendToken(), m_pElement(pElement)
264 virtual Type GetElementType()
const
268 virtual uint32_t GetDestBitmap()
const
272 virtual uint32_t GetChunkSize()
const;
273 virtual void WriteChunk(
void* pChunkBuffer)
const;
274 virtual CloneElementBase* GetElement()
278 virtual void TraceTokenType()
284 uint32_t GetSize()
const
286 return m_pElement->GetSize();
290 PIA_ASSERT(m_pElement->IsValidValue());
295 return m_pElement->GetId();
299 return m_pElement->m_Clock;
303 return m_pElement->m_SetterStationIndex;
305 void Serialize(
void* pBuffer)
const
307 m_pElement->Serialize(pBuffer);
313 m_DestBitmap |= (0x1 << stationIndex);
317 m_DestBitmap &= (0x1 << stationIndex);
325 ReliableCloneElementBase* m_pElement;
326 uint32_t m_DestBitmap;
331 Result SetValueCore();
333 virtual void Serialize(
void* pBuffer)
const = 0;
334 virtual void Deserialize(
const void* cpData) = 0;
335 virtual void ClearValue() = 0;
341 uint32_t m_DestBitmap;
342 ReliableRequestToken m_RequestToken;
343 ReliableDataToken m_DataToken;
344 ReliableInitialToken m_InitialToken;
346 static Definition<ReliableCloneElementBase> s_Definition;
349 template <
int TEST_ID,
typename Arg>
350 static void Test(
const ReliableCloneElementBase& obj, Arg* pArg = NULL);
352 NN_PIA_DISALLOW_COPY(ReliableCloneElementBase);