DDNet 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 "uuid_manager.h"
7
8#include <base/hash.h>
9#include <base/types.h>
10
11#include <engine/storage.h>
12
13#include <cstdint>
14#include <functional>
15#include <map>
16#include <vector>
17
18enum
19{
20 ITEMTYPE_EX = 0xFFFF,
21};
22
30typedef std::function<std::pair<void *, size_t>(void *pData, size_t Size)> FDataProcessor;
31
32// raw datafile access
34{
35 class CDatafile *m_pDataFile = nullptr;
36
37 int GetExternalItemType(int InternalType, CUuid *pUuid);
38 int GetInternalItemType(int ExternalType);
39
40public:
43
44 [[nodiscard]] bool Open(const char *pFullName, IStorage *pStorage, const char *pPath, int StorageType);
45 [[nodiscard]] bool Open(IStorage *pStorage, const char *pPath, int StorageType);
46 void Close();
47 bool IsOpen() const;
48 IOHANDLE File() const;
49
50 int GetDataSize(int Index) const;
51 void *GetData(int Index);
52 void *GetDataSwapped(int Index); // makes sure that the data is 32bit LE ints when saved
53 const char *GetDataString(int Index);
54 void AddDataProcessor(int Index, FDataProcessor DataProcessor);
55 void UnloadData(int Index);
56 int NumData() const;
57
58 int GetItemSize(int Index) const;
59 void *GetItem(int Index, int *pType = nullptr, int *pId = nullptr, CUuid *pUuid = nullptr);
60 void GetType(int Type, int *pStart, int *pNum);
61 int FindItemIndex(int Type, int Id);
62 void *FindItem(int Type, int Id);
63 bool OverrideItemData(int Index, const void *pData, size_t Size);
64 int NumItems() const;
65
66 const char *FullName() const;
67 const char *BaseName() const;
68 const char *Path() const;
69 SHA256_DIGEST Sha256() const;
70 unsigned Crc() const;
71 int Size() const;
72};
73
74// write access
76{
77public:
83
84private:
94
96 {
97 public:
98 int m_Type;
99 int m_Id;
103 void *m_pData;
104 };
105
107 {
108 public:
109 int m_Num = 0;
110 int m_First = -1;
111 int m_Last = -1;
112 };
113
115 {
116 public:
119 };
120
122 std::map<uint16_t, CItemTypeInfo, std::less<>> m_ItemTypes; // item types must be sorted in ascending order
123 std::vector<CItemInfo> m_vItems;
124 std::vector<CDataInfo> m_vDatas;
125 std::vector<CExtendedItemType> m_vExtendedItemTypes;
126
127 int GetTypeFromIndex(int Index) const;
128 int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid);
129
130public:
133 {
134 m_File = Other.m_File;
135 Other.m_File = nullptr;
136 m_ItemTypes = std::move(Other.m_ItemTypes);
137 m_vItems = std::move(Other.m_vItems);
138 m_vDatas = std::move(Other.m_vDatas);
139 m_vExtendedItemTypes = std::move(Other.m_vExtendedItemTypes);
140 }
142
143 [[nodiscard]] bool Open(class IStorage *pStorage, const char *pFilename, int StorageType = IStorage::TYPE_SAVE);
144 int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid = nullptr);
145 int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel = COMPRESSION_DEFAULT);
146 int AddDataSwapped(size_t Size, const void *pData);
147 int AddDataString(const char *pStr);
148 void Finish();
149};
150
151#endif
Definition datafile.h:34
int GetItemSize(int Index) const
Definition datafile.cpp:858
void * GetItem(int Index, int *pType=nullptr, int *pId=nullptr, CUuid *pUuid=nullptr)
Definition datafile.cpp:921
void GetType(int Type, int *pStart, int *pNum)
Definition datafile.cpp:938
int FindItemIndex(int Type, int Id)
Definition datafile.cpp:958
const char * FullName() const
Definition datafile.cpp:999
int GetInternalItemType(int ExternalType)
Definition datafile.cpp:896
void UnloadData(int Index)
Definition datafile.cpp:835
const char * Path() const
Definition datafile.cpp:1013
IOHANDLE File() const
Definition datafile.cpp:777
int GetDataSize(int Index) const
Definition datafile.cpp:784
bool IsOpen() const
Definition datafile.cpp:772
SHA256_DIGEST Sha256() const
Definition datafile.cpp:1020
unsigned Crc() const
Definition datafile.cpp:1027
void * FindItem(int Type, int Id)
Definition datafile.cpp:975
bool OverrideItemData(int Index, const void *pData, size_t Size)
Definition datafile.cpp:985
int NumData() const
Definition datafile.cpp:851
void * GetData(int Index)
Definition datafile.cpp:791
int GetExternalItemType(int InternalType, CUuid *pUuid)
Definition datafile.cpp:865
bool Open(const char *pFullName, IStorage *pStorage, const char *pPath, int StorageType)
Definition datafile.cpp:517
class CDatafile * m_pDataFile
Definition datafile.h:35
int NumItems() const
Definition datafile.cpp:992
int Size() const
Definition datafile.cpp:1034
void Close()
Definition datafile.cpp:749
void * GetDataSwapped(int Index)
Definition datafile.cpp:798
const char * GetDataString(int Index)
Definition datafile.cpp:805
void AddDataProcessor(int Index, FDataProcessor DataProcessor)
Definition datafile.cpp:828
CDataFileReader & operator=(CDataFileReader &&Other)
Definition datafile.cpp:510
const char * BaseName() const
Definition datafile.cpp:1006
Definition datafile.h:86
int m_CompressedSize
Definition datafile.h:91
int m_UncompressedSize
Definition datafile.h:89
void * m_pCompressedData
Definition datafile.h:90
void * m_pUncompressedData
Definition datafile.h:88
ECompressionLevel m_CompressionLevel
Definition datafile.h:92
Definition datafile.h:115
int m_Type
Definition datafile.h:117
CUuid m_Uuid
Definition datafile.h:118
Definition datafile.h:96
int m_Prev
Definition datafile.h:102
int m_Next
Definition datafile.h:101
int m_Id
Definition datafile.h:99
int m_Size
Definition datafile.h:100
void * m_pData
Definition datafile.h:103
int m_Type
Definition datafile.h:98
Definition datafile.h:107
int m_Last
Definition datafile.h:111
int m_Num
Definition datafile.h:109
int m_First
Definition datafile.h:110
Definition datafile.h:76
ECompressionLevel
Definition datafile.h:79
@ COMPRESSION_DEFAULT
Definition datafile.h:80
@ COMPRESSION_BEST
Definition datafile.h:81
CDataFileWriter()
Definition datafile.cpp:1041
std::vector< CDataInfo > m_vDatas
Definition datafile.h:124
void Finish()
Definition datafile.cpp:1230
int AddDataSwapped(size_t Size, const void *pData)
Definition datafile.cpp:1187
int GetTypeFromIndex(int Index) const
Definition datafile.cpp:1073
std::map< uint16_t, CItemTypeInfo, std::less<> > m_ItemTypes
Definition datafile.h:122
CDataFileWriter(CDataFileWriter &&Other)
Definition datafile.h:132
bool Open(class IStorage *pStorage, const char *pFilename, int StorageType=IStorage::TYPE_SAVE)
Definition datafile.cpp:1066
int AddDataString(const char *pStr)
Definition datafile.cpp:1206
int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid)
Definition datafile.cpp:1078
int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel=COMPRESSION_DEFAULT)
Definition datafile.cpp:1169
std::vector< CItemInfo > m_vItems
Definition datafile.h:123
int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid=nullptr)
Definition datafile.cpp:1117
IOHANDLE m_File
Definition datafile.h:121
std::vector< CExtendedItemType > m_vExtendedItemTypes
Definition datafile.h:125
Definition datafile.cpp:140
Definition storage.h:21
@ TYPE_SAVE
Definition storage.h:26
std::function< std::pair< void *, size_t >(void *pData, size_t Size)> FDataProcessor
Definition datafile.h:30
@ ITEMTYPE_EX
Definition datafile.h:20
void * IOHANDLE
Definition logger.h:12
Definition uuid_manager.h:17
Definition hash.h:12