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
6#include <base/cxx.h>
7
8#include <cstddef>
9#include <cstdint>
10#include <memory>
11
12// CSnapshot
13
15{
16 int *Data() { return (int *)(this + 1); }
17
18public:
20
21 const int *Data() const { return (int *)(this + 1); }
22 int InternalType() const { return m_TypeAndId >> 16; }
23 int Id() const { return m_TypeAndId & 0xffff; }
24 int Key() const { return m_TypeAndId; }
25 void Invalidate() { m_TypeAndId = -1; }
26};
27
29{
30 int m_DataSize = 0;
31 int m_NumItems = 0;
32
33 int *Offsets() const { return (int *)(this + 1); }
34 char *DataStart() const { return (char *)(Offsets() + m_NumItems); }
35
36 size_t OffsetSize() const { return sizeof(int) * m_NumItems; }
37 size_t TotalSize() const { return sizeof(CSnapshot) + OffsetSize() + m_DataSize; }
38
40
41public:
42 enum
43 {
45 MAX_TYPE = 0x7fff,
46 MAX_ID = 0xffff,
47 MAX_ITEMS = 1024,
50 };
51
52 int NumItems() const { return m_NumItems; }
53 int DataSize() const { return m_DataSize; }
54 const CSnapshotItem *GetItem(int Index) const;
55 int GetItemSize(int Index) const;
56 int GetItemIndex(int Key) const;
57 void InvalidateItem(int Index);
58 int GetItemType(int Index) const;
59 int GetExternalItemType(int InternalType) const;
60 const void *FindItem(int Type, int Id) const;
61
62 rust::Slice<const int32_t> AsSlice() const;
63
64 unsigned Crc() const;
65 // Prints the raw snapshot data showing item and int boundaries.
66 // See also `CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap)`
67 // For more detailed annotations of the data.
68 void DebugDump() const;
69 bool IsValid(size_t ActualSize) const;
70
71 static const CSnapshot *EmptySnapshot() { return &ms_EmptySnapshot; }
72};
73
74class alignas(int32_t) CSnapshotBuffer
75{
76public:
78
80 const CSnapshot *AsSnapshot() const { return (const CSnapshot *)m_aData; }
81 rust::Slice<int32_t> AsMutSlice() { return rust::Slice((int32_t *)m_aData, sizeof(m_aData) / sizeof(int32_t)); }
82};
83
84std::unique_ptr<CSnapshotBuffer> CSnapshotBuffer_New();
85
86// CSnapshotStorage
87
89{
90public:
106
109
112 void Init();
113 void PurgeAll();
114 void PurgeUntil(int Tick);
115 void Add(int Tick, int64_t Tagtime, size_t DataSize, const void *pData, size_t AltDataSize, const void *pAltData);
116 int Get(int Tick, int64_t *pTagtime, const CSnapshot **ppData, const CSnapshot **ppAltData) const;
117};
118
119#include <engine/shared/snapshot/builder.h> // NOLINT(misc-header-include-cycle)
120#include <engine/shared/snapshot/delta.h> // NOLINT(misc-header-include-cycle)
121
122#endif // ENGINE_SHARED_SNAPSHOT_H
Definition snapshot.h:75
rust::Slice< int32_t > AsMutSlice()
Definition snapshot.h:81
const CSnapshot * AsSnapshot() const
Definition snapshot.h:80
CSnapshot * AsSnapshot()
Definition snapshot.h:79
unsigned char m_aData[CSnapshot::MAX_SIZE]
Definition snapshot.h:77
Definition snapshot.h:15
void Invalidate()
Definition snapshot.h:25
int Id() const
Definition snapshot.h:23
int m_TypeAndId
Definition snapshot.h:19
const int * Data() const
Definition snapshot.h:21
int InternalType() const
Definition snapshot.h:22
int Key() const
Definition snapshot.h:24
int * Data()
Definition snapshot.h:16
Definition snapshot.h:92
int m_Tick
Definition snapshot.h:98
int m_SnapSize
Definition snapshot.h:100
int m_AltSnapSize
Definition snapshot.h:101
CHolder * m_pPrev
Definition snapshot.h:94
CHolder * m_pNext
Definition snapshot.h:95
CSnapshot * m_pAltSnap
Definition snapshot.h:104
int64_t m_Tagtime
Definition snapshot.h:97
CSnapshot * m_pSnap
Definition snapshot.h:103
~CSnapshotStorage()
Definition snapshot.h:111
CSnapshotStorage()
Definition snapshot.h:110
void PurgeAll()
Definition snapshot.cpp:186
void Init()
Definition snapshot.cpp:180
CHolder * m_pLast
Definition snapshot.h:108
CHolder * m_pFirst
Definition snapshot.h:107
Definition snapshot.h:29
int GetExternalItemType(int InternalType) const
Definition snapshot.cpp:42
static const CSnapshot * EmptySnapshot()
Definition snapshot.h:71
int * Offsets() const
Definition snapshot.h:33
const CSnapshotItem * GetItem(int Index) const
Definition snapshot.cpp:22
size_t TotalSize() const
Definition snapshot.h:37
char * DataStart() const
Definition snapshot.h:34
int m_NumItems
Definition snapshot.h:31
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:46
@ MAX_ITEMS
Definition snapshot.h:47
@ MAX_SIZE
Definition snapshot.h:49
@ MAX_TYPE
Definition snapshot.h:45
@ MAX_PARTS
Definition snapshot.h:48
@ OFFSET_UUID_TYPE
Definition snapshot.h:44
int DataSize() const
Definition snapshot.h:53
rust::Slice< const int32_t > AsSlice() const
Definition snapshot.cpp:111
int GetItemType(int Index) const
Definition snapshot.cpp:36
void InvalidateItem(int Index)
Definition snapshot.cpp:73
void DebugDump() const
Definition snapshot.cpp:131
unsigned Crc() const
Definition snapshot.cpp:116
size_t OffsetSize() const
Definition snapshot.h:36
bool IsValid(size_t ActualSize) const
Definition snapshot.cpp:144
int m_DataSize
Definition snapshot.h:30
int NumItems() const
Definition snapshot.h:52
static const CSnapshot ms_EmptySnapshot
Definition snapshot.h:39
int GetItemSize(int Index) const
Definition snapshot.cpp:29
std::unique_ptr< CSnapshotBuffer > CSnapshotBuffer_New()
Definition snapshot.cpp:173