DDNet documentation
Loading...
Searching...
No Matches
snapshot.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_SHARED_SNAPSHOT_H
4#define ENGINE_SHARED_SNAPSHOT_H
5
8
9#include <cstddef>
10#include <cstdint>
11
12// CSnapshot
13
15{
16 friend class CSnapshotBuilder;
17
18 int *Data() { return (int *)(this + 1); }
19
20public:
22
23 const int *Data() const { return (int *)(this + 1); }
24 int InternalType() const { return m_TypeAndId >> 16; }
25 int Id() const { return m_TypeAndId & 0xffff; }
26 int Key() const { return m_TypeAndId; }
27 void Invalidate() { m_TypeAndId = -1; }
28};
29
31{
32 friend class CSnapshotBuilder;
33 int m_DataSize = 0;
34 int m_NumItems = 0;
35
36 int *Offsets() const { return (int *)(this + 1); }
37 char *DataStart() const { return (char *)(Offsets() + m_NumItems); }
38
39 size_t OffsetSize() const { return sizeof(int) * m_NumItems; }
40 size_t TotalSize() const { return sizeof(CSnapshot) + OffsetSize() + m_DataSize; }
41
43
44public:
45 enum
46 {
48 MAX_TYPE = 0x7fff,
49 MAX_ID = 0xffff,
50 MAX_ITEMS = 1024,
53 };
54
55 int NumItems() const { return m_NumItems; }
56 int DataSize() const { return m_DataSize; }
57 const CSnapshotItem *GetItem(int Index) const;
58 int GetItemSize(int Index) const;
59 int GetItemIndex(int Key) const;
60 void InvalidateItem(int Index);
61 int GetItemType(int Index) const;
62 int GetExternalItemType(int InternalType) const;
63 const void *FindItem(int Type, int Id) const;
64
65 unsigned Crc() const;
66 // Prints the raw snapshot data showing item and int boundaries.
67 // See also `CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap)`
68 // For more detailed annotations of the data.
69 void DebugDump() const;
70 bool IsValid(size_t ActualSize) const;
71
72 static const CSnapshot *EmptySnapshot() { return &ms_EmptySnapshot; }
73};
74
75class alignas(int32_t) CSnapshotBuffer
76{
77public:
79
81 const CSnapshot *AsSnapshot() const { return (const CSnapshot *)m_aData; }
82};
83
84// CSnapshotDelta
85
87{
88public:
89 class CData
90 {
91 public:
94 int m_NumTempItems; // needed?
95 int m_aData[1];
96 };
97
98private:
99 enum
100 {
102 };
107
108 static void UndiffItem(const int *pPast, const int *pDiff, int *pOut, int Size, uint64_t *pDataRate);
109
110public:
111 static int DiffItem(const int *pPast, const int *pCurrent, int *pOut, int Size);
113 CSnapshotDelta(const CSnapshotDelta &Old);
114 uint64_t GetDataRate(int Index) const { return m_aSnapshotDataRate[Index]; }
115 uint64_t GetDataUpdates(int Index) const { return m_aSnapshotDataUpdates[Index]; }
116 void SetStaticsize(int ItemType, size_t Size);
117 const CData *EmptyDelta() const;
118 int CreateDelta(const CSnapshot *pFrom, const CSnapshot *pTo, void *pDstData);
119 int UnpackDelta(const CSnapshot *pFrom, CSnapshotBuffer *pTo, const void *pSrcData, int DataSize);
120 int DebugDumpDelta(const void *pSrcData, int DataSize);
121};
122
123// CSnapshotStorage
124
126{
127public:
143
146
149 void Init();
150 void PurgeAll();
151 void PurgeUntil(int Tick);
152 void Add(int Tick, int64_t Tagtime, size_t DataSize, const void *pData, size_t AltDataSize, const void *pAltData);
153 int Get(int Tick, int64_t *pTagtime, const CSnapshot **ppData, const CSnapshot **ppAltData) const;
154};
155
157{
158 enum
159 {
161 };
162
165
168
171
172 bool AddExtendedItemType(int Index);
173 int GetExtendedItemTypeIndex(int TypeId);
174 int GetTypeFromIndex(int Index) const;
175
176 bool m_Building = false;
177 bool m_Sixup = false;
178
179public:
180 void Init(bool Sixup = false);
181 void Init7(const CSnapshot *pSnapshot);
182
183 void *NewItem(int Type, int Id, int Size);
184
185 CSnapshotItem *GetItem(int Index);
186 int *GetItemData(int Key);
187
188 int Finish(CSnapshotBuffer *pBuffer);
189};
190
191#endif // ENGINE_SHARED_SNAPSHOT_H
Definition snapshot.h:76
const CSnapshot * AsSnapshot() const
Definition snapshot.h:81
CSnapshot * AsSnapshot()
Definition snapshot.h:80
unsigned char m_aData[CSnapshot::MAX_SIZE]
Definition snapshot.h:78
Definition snapshot.h:157
int m_NumItems
Definition snapshot.h:167
int m_aExtendedItemTypes[MAX_EXTENDED_ITEM_TYPES]
Definition snapshot.h:169
CSnapshotItem * GetItem(int Index)
Definition snapshot.cpp:728
bool m_Sixup
Definition snapshot.h:177
void Init(bool Sixup=false)
Definition snapshot.cpp:713
char m_aData[CSnapshot::MAX_SIZE]
Definition snapshot.h:163
bool m_Building
Definition snapshot.h:176
int m_aOffsets[CSnapshot::MAX_ITEMS]
Definition snapshot.h:166
int m_NumExtendedItemTypes
Definition snapshot.h:170
void * NewItem(int Type, int Id, int Size)
Definition snapshot.cpp:809
int GetExtendedItemTypeIndex(int TypeId)
Definition snapshot.cpp:788
int * GetItemData(int Key)
Definition snapshot.cpp:733
@ MAX_EXTENDED_ITEM_TYPES
Definition snapshot.h:160
int Finish(CSnapshotBuffer *pBuffer)
Definition snapshot.cpp:746
int GetTypeFromIndex(int Index) const
Definition snapshot.cpp:763
void Init7(const CSnapshot *pSnapshot)
Definition sixup_translate_snapshot.cpp:6
int m_DataSize
Definition snapshot.h:164
bool AddExtendedItemType(int Index)
Definition snapshot.cpp:768
Definition snapshot.h:90
int m_NumUpdateItems
Definition snapshot.h:93
int m_aData[1]
Definition snapshot.h:95
int m_NumTempItems
Definition snapshot.h:94
int m_NumDeletedItems
Definition snapshot.h:92
CData m_Empty
Definition snapshot.h:106
uint64_t GetDataUpdates(int Index) const
Definition snapshot.h:115
@ MAX_NETOBJSIZES
Definition snapshot.h:101
uint64_t m_aSnapshotDataRate[CSnapshot::MAX_TYPE+1]
Definition snapshot.h:104
uint64_t GetDataRate(int Index) const
Definition snapshot.h:114
uint64_t m_aSnapshotDataUpdates[CSnapshot::MAX_TYPE+1]
Definition snapshot.h:105
CSnapshotDelta()
Definition snapshot.cpp:260
short m_aItemSizes[MAX_NETOBJSIZES]
Definition snapshot.h:103
Definition snapshot.h:15
void Invalidate()
Definition snapshot.h:27
int Id() const
Definition snapshot.h:25
int m_TypeAndId
Definition snapshot.h:21
const int * Data() const
Definition snapshot.h:23
int InternalType() const
Definition snapshot.h:24
int Key() const
Definition snapshot.h:26
friend class CSnapshotBuilder
Definition snapshot.h:16
int * Data()
Definition snapshot.h:18
Definition snapshot.h:129
int m_Tick
Definition snapshot.h:135
int m_SnapSize
Definition snapshot.h:137
int m_AltSnapSize
Definition snapshot.h:138
CHolder * m_pPrev
Definition snapshot.h:131
CHolder * m_pNext
Definition snapshot.h:132
CSnapshot * m_pAltSnap
Definition snapshot.h:141
int64_t m_Tagtime
Definition snapshot.h:134
CSnapshot * m_pSnap
Definition snapshot.h:140
~CSnapshotStorage()
Definition snapshot.h:148
CSnapshotStorage()
Definition snapshot.h:147
void PurgeAll()
Definition snapshot.cpp:614
void Init()
Definition snapshot.cpp:608
CHolder * m_pLast
Definition snapshot.h:145
CHolder * m_pFirst
Definition snapshot.h:144
Definition snapshot.h:31
int GetExternalItemType(int InternalType) const
Definition snapshot.cpp:42
static const CSnapshot * EmptySnapshot()
Definition snapshot.h:72
int * Offsets() const
Definition snapshot.h:36
const CSnapshotItem * GetItem(int Index) const
Definition snapshot.cpp:22
size_t TotalSize() const
Definition snapshot.h:40
char * DataStart() const
Definition snapshot.h:37
int m_NumItems
Definition snapshot.h:34
const void * FindItem(int Type, int Id) const
Definition snapshot.cpp:78
int GetItemIndex(int Key) const
Definition snapshot.cpp:62
@ MAX_ID
Definition snapshot.h:49
@ MAX_ITEMS
Definition snapshot.h:50
@ MAX_SIZE
Definition snapshot.h:52
@ MAX_TYPE
Definition snapshot.h:48
@ MAX_PARTS
Definition snapshot.h:51
@ OFFSET_UUID_TYPE
Definition snapshot.h:47
int DataSize() const
Definition snapshot.h:56
int GetItemType(int Index) const
Definition snapshot.cpp:36
void InvalidateItem(int Index)
Definition snapshot.cpp:73
void DebugDump() const
Definition snapshot.cpp:126
unsigned Crc() const
Definition snapshot.cpp:111
size_t OffsetSize() const
Definition snapshot.h:39
bool IsValid(size_t ActualSize) const
Definition snapshot.cpp:139
friend class CSnapshotBuilder
Definition snapshot.h:32
int m_DataSize
Definition snapshot.h:33
int NumItems() const
Definition snapshot.h:55
static const CSnapshot ms_EmptySnapshot
Definition snapshot.h:42
int GetItemSize(int Index) const
Definition snapshot.cpp:29
static void UndiffItem(const uint32_t *pPast, const uint32_t *pDiff, uint32_t *pOut, size_t Size)
Definition ghost.cpp:433
static void DiffItem(const uint32_t *pPast, const uint32_t *pCurrent, uint32_t *pOut, size_t Size)
Definition ghost.cpp:88