17 #include <pia/clone/clone_definitions.h> 18 #include <pia/clone/clone_CloneElementBase.h> 30 enum ReliableLargeChunkType;
72 void Trace(u64 flag)
const;
82 return m_ValueSetterStationIndex;
92 return m_ValuePreserverStationIndex;
100 u32 GetDestBitmap(u32 divideIndex)
const 102 return (divideIndex < m_DivideNum) ? m_aDivideInfo[divideIndex].m_ValueDestBitmap : 0;
109 virtual u16 GetType()
const 111 return GetTypeStatic();
114 static u16 GetTypeStatic()
116 return TYPE_RELIABLE_LARGE;
119 static size_t GetDataChunkHeaderSize();
122 bool ReceiveRequest(
StationIndex src, u16 divideIndexOffset, u32 divideIndexFlag);
129 virtual void ClearData();
135 virtual void RequestInitialData();
138 class ReliableLargeSendToken :
public CloneElementBase::ResendableSendToken
146 virtual TokenType GetTokenType()
const = 0;
149 class ReliableLargeRequestToken :
public ReliableLargeSendToken
153 : ReliableLargeSendToken(), m_pElement(pElement), m_DestBitmap(0)
156 virtual Type GetElementType()
const 158 return TYPE_RELIABLE_LARGE;
160 virtual u32 GetDestBitmap()
const 164 virtual TokenType GetTokenType()
const 166 return TOKEN_REQUEST;
168 virtual size_t GetChunkSize()
const;
169 virtual void WriteChunk(
void* pChunkBuffer)
const;
176 void SetDest(u32 destBitmap) {m_DestBitmap = destBitmap;}
181 return m_pElement->GetId();
190 class ReliableLargeDataToken :
public ReliableLargeSendToken
193 explicit ReliableLargeDataToken() : ReliableLargeSendToken() {}
196 m_pElement = pElement;
197 m_DivideIndex = divideIndex;
199 virtual Type GetElementType()
const 201 return TYPE_RELIABLE_LARGE;
203 virtual u32 GetDestBitmap()
const 205 return m_pElement->m_aDivideInfo[m_DivideIndex].m_SerializedDestBitmap;
207 virtual TokenType GetTokenType()
const 211 virtual size_t GetChunkSize()
const;
212 virtual void WriteChunk(
void* pChunkBuffer)
const;
217 virtual bool IsUnicast()
const 223 size_t GetSize()
const 225 return (m_DivideIndex < m_pElement->m_DivideNum - 1) ? m_pElement->m_DivideSize : m_pElement->m_DivideLastSize;
229 return m_pElement->GetId();
233 return m_pElement->m_SerializedClock;
237 return m_pElement->m_SerializedSetterStationIndex;
246 class ReliableLargeInitialToken :
public CloneElementBase::ISendToken
249 explicit ReliableLargeInitialToken() : ISendToken() {}
252 m_pElement = pElement;
253 m_DivideIndex = divideIndex;
255 virtual Type GetElementType()
const 257 return TYPE_RELIABLE_LARGE;
259 virtual u32 GetDestBitmap()
const 263 virtual size_t GetChunkSize()
const;
264 virtual void WriteChunk(
void* pChunkBuffer)
const;
271 size_t GetSize()
const 273 return (m_DivideIndex < m_pElement->m_DivideNum - 1) ? m_pElement->m_DivideSize : m_pElement->m_DivideLastSize;
277 PIA_ASSERT(m_pElement->IsValidValue());
282 return m_pElement->GetId();
286 return m_pElement->m_SerializedClock;
290 return m_pElement->m_SerializedSetterStationIndex;
296 m_DestBitmap |= (0x1 << stationId);
300 m_DestBitmap &= (0x1 << stationId);
317 DivideInfo() : m_ValueDestBitmap(0), m_SerializedDestBitmap(0), m_SerializedIsValid(
false), m_DataToken(), m_InitialToken() {}
319 u32 m_ValueDestBitmap;
320 u32 m_SerializedDestBitmap;
321 bool m_SerializedIsValid;
322 ReliableLargeDataToken m_DataToken;
323 ReliableLargeInitialToken m_InitialToken;
331 virtual size_t GetSize()
const {
return m_DivideSize;}
332 bool IsEqualValueAndSerialized()
const 334 return m_ValueClock == m_SerializedClock && m_ValueSetterStationIndex == m_SerializedSetterStationIndex;
336 void GetRequestDivideIndex(u16* pOffset, u32* pFlag);
339 nn::Result SetValueCore();
341 virtual void Serialize() = 0;
342 virtual void Deserialize() = 0;
343 virtual void ClearValue() = 0;
356 u8* m_SerializedBuffer;
357 DivideInfo* m_aDivideInfo;
359 size_t m_SerializedSize;
361 size_t m_DivideLastSize;
364 ReliableLargeRequestToken m_RequestToken;
371 ReliableRequestToken m_RequestToken;
372 ReliableDataToken m_DataToken;
373 ReliableInitialToken m_InitialToken;
376 static Definition<ReliableLargeCloneElementBase> s_Definition;
379 template <
int TEST_ID,
typename Arg>
This is the base class for managing data that is sent and received. .
Definition: clone_CloneElementBase.h:40
u32 ClockValue
Defines a type that holds a clock value.
Definition: clone_definitions.h:44
StationIndex
Enumerates StationIndex values.
Definition: platformCtr.h:44
ID indicating a station that is not present in the session.
Definition: platformCtr.h:59
virtual ~ReliableLargeCloneElementBase()
Destructor.
void Trace(u64 flag) const
Prints information that is useful for debugging.
bool IsValidValue() const
Gets whether a valid value can be obtained using GetValue.
Definition: clone_ReliableLargeCloneElementBase.h:51
The base class for managing the sending and receiving of reliable large-sized data.
Definition: clone_ReliableLargeCloneElementBase.h:38
ClockValue GetClock() const
Gets the clock for when the value was set.
Definition: clone_ReliableLargeCloneElementBase.h:61
u16 Id
Specifies the type of the ID for identifying clone elements.
Definition: clone_CloneElementBase.h:59
Id GetId() const
Gets the ID.
Definition: clone_CloneElementBase.h:67