DDraceNetwork Documentation
Loading...
Searching...
No Matches
datafile.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_DATAFILE_H
4#define ENGINE_SHARED_DATAFILE_H
5
6#include <engine/storage.h>
7
8#include <base/hash.h>
9#include <base/types.h>
10
11#include "uuid_manager.h"
12
13#include <cstdint>
14#include <map>
15#include <vector>
16
17enum
18{
19 ITEMTYPE_EX = 0xFFFF,
20};
21
22// raw datafile access
24{
25 class CDatafile *m_pDataFile = nullptr;
26
29
30public:
33
34 [[nodiscard]] bool Open(class IStorage *pStorage, const char *pFilename, int StorageType);
35 void Close();
36 bool IsOpen() const;
37 IOHANDLE File() const;
38
39 int GetDataSize(int Index) const;
40 void *GetData(int Index);
41 void *GetDataSwapped(int Index); // makes sure that the data is 32bit LE ints when saved
42 const char *GetDataString(int Index);
43 void ReplaceData(int Index, char *pData, size_t Size); // memory for data must have been allocated with malloc
44 void UnloadData(int Index);
45 int NumData() const;
46
47 int GetItemSize(int Index) const;
48 void *GetItem(int Index, int *pType = nullptr, int *pId = nullptr, CUuid *pUuid = nullptr);
49 void GetType(int Type, int *pStart, int *pNum);
50 int FindItemIndex(int Type, int Id);
51 void *FindItem(int Type, int Id);
52 int NumItems() const;
53
54 SHA256_DIGEST Sha256() const;
55 unsigned Crc() const;
56 int MapSize() const;
57};
58
59// write access
61{
62public:
68
69private:
79
81 {
82 public:
83 int m_Type;
84 int m_Id;
85 int m_Size;
86 int m_Next;
87 int m_Prev;
88 void *m_pData;
89 };
90
92 {
93 public:
94 int m_Num = 0;
95 int m_First = -1;
96 int m_Last = -1;
97 };
98
100 {
101 public:
104 };
105
107 std::map<uint16_t, CItemTypeInfo, std::less<>> m_ItemTypes; // item types must be sorted in ascending order
108 std::vector<CItemInfo> m_vItems;
109 std::vector<CDataInfo> m_vDatas;
110 std::vector<CExtendedItemType> m_vExtendedItemTypes;
111
112 int GetTypeFromIndex(int Index) const;
113 int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid);
114
115public:
118 {
119 m_File = Other.m_File;
120 Other.m_File = nullptr;
121 m_ItemTypes = std::move(Other.m_ItemTypes);
122 m_vItems = std::move(Other.m_vItems);
123 m_vDatas = std::move(Other.m_vDatas);
124 m_vExtendedItemTypes = std::move(Other.m_vExtendedItemTypes);
125 }
127
128 [[nodiscard]] bool Open(class IStorage *pStorage, const char *pFilename, int StorageType = IStorage::TYPE_SAVE);
129 int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid = nullptr);
130 int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel = COMPRESSION_DEFAULT);
131 int AddDataSwapped(size_t Size, const void *pData);
132 int AddDataString(const char *pStr);
133 void Finish();
134};
135
136#endif
Definition datafile.h:24
int GetItemSize(int Index) const
Definition datafile.cpp:763
void * GetItem(int Index, int *pType=nullptr, int *pId=nullptr, CUuid *pUuid=nullptr)
Definition datafile.cpp:826
bool Open(class IStorage *pStorage, const char *pFilename, int StorageType)
Definition datafile.cpp:445
void GetType(int Type, int *pStart, int *pNum)
Definition datafile.cpp:843
int FindItemIndex(int Type, int Id)
Definition datafile.cpp:863
int GetInternalItemType(int ExternalType)
Definition datafile.cpp:801
void UnloadData(int Index)
Definition datafile.cpp:744
IOHANDLE File() const
Definition datafile.cpp:683
int GetDataSize(int Index) const
Definition datafile.cpp:690
bool IsOpen() const
Definition datafile.cpp:678
void ReplaceData(int Index, char *pData, size_t Size)
Definition datafile.cpp:734
SHA256_DIGEST Sha256() const
Definition datafile.cpp:897
unsigned Crc() const
Definition datafile.cpp:904
void * FindItem(int Type, int Id)
Definition datafile.cpp:880
int NumData() const
Definition datafile.cpp:756
void * GetData(int Index)
Definition datafile.cpp:697
int GetExternalItemType(int InternalType, CUuid *pUuid)
Definition datafile.cpp:770
int MapSize() const
Definition datafile.cpp:911
class CDatafile * m_pDataFile
Definition datafile.h:25
int NumItems() const
Definition datafile.cpp:890
~CDataFileReader()
Definition datafile.cpp:433
void Close()
Definition datafile.cpp:661
void * GetDataSwapped(int Index)
Definition datafile.cpp:704
const char * GetDataString(int Index)
Definition datafile.cpp:711
CDataFileReader & operator=(CDataFileReader &&Other)
Definition datafile.cpp:438
Definition datafile.h:71
int m_CompressedSize
Definition datafile.h:76
int m_UncompressedSize
Definition datafile.h:74
void * m_pCompressedData
Definition datafile.h:75
void * m_pUncompressedData
Definition datafile.h:73
ECompressionLevel m_CompressionLevel
Definition datafile.h:77
Definition datafile.h:100
int m_Type
Definition datafile.h:102
CUuid m_Uuid
Definition datafile.h:103
Definition datafile.h:81
int m_Prev
Definition datafile.h:87
int m_Next
Definition datafile.h:86
int m_Id
Definition datafile.h:84
int m_Size
Definition datafile.h:85
void * m_pData
Definition datafile.h:88
int m_Type
Definition datafile.h:83
Definition datafile.h:92
int m_Last
Definition datafile.h:96
int m_Num
Definition datafile.h:94
int m_First
Definition datafile.h:95
Definition datafile.h:61
~CDataFileWriter()
Definition datafile.cpp:923
ECompressionLevel
Definition datafile.h:64
@ COMPRESSION_DEFAULT
Definition datafile.h:65
@ COMPRESSION_BEST
Definition datafile.h:66
CDataFileWriter()
Definition datafile.cpp:918
std::vector< CDataInfo > m_vDatas
Definition datafile.h:109
void Finish()
Definition datafile.cpp:1108
int AddDataSwapped(size_t Size, const void *pData)
Definition datafile.cpp:1064
int GetTypeFromIndex(int Index) const
Definition datafile.cpp:950
std::map< uint16_t, CItemTypeInfo, std::less<> > m_ItemTypes
Definition datafile.h:107
CDataFileWriter(CDataFileWriter &&Other)
Definition datafile.h:117
bool Open(class IStorage *pStorage, const char *pFilename, int StorageType=IStorage::TYPE_SAVE)
Definition datafile.cpp:943
int AddDataString(const char *pStr)
Definition datafile.cpp:1083
int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid)
Definition datafile.cpp:955
int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel=COMPRESSION_DEFAULT)
Definition datafile.cpp:1046
std::vector< CItemInfo > m_vItems
Definition datafile.h:108
int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid=nullptr)
Definition datafile.cpp:994
IOHANDLE m_File
Definition datafile.h:106
std::vector< CExtendedItemType > m_vExtendedItemTypes
Definition datafile.h:110
Definition datafile.cpp:129
Definition storage.h:21
@ TYPE_SAVE
Definition storage.h:26
Definition vmath.h:15
@ ITEMTYPE_EX
Definition datafile.h:19
Definition uuid_manager.h:17
Definition hash.h:15