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 "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 <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
27 int GetExternalItemType(int InternalType, CUuid *pUuid);
28 int GetInternalItemType(int ExternalType);
29
30public:
33
34 [[nodiscard]] bool Open(const char *pFullName, IStorage *pStorage, const char *pPath, int StorageType);
35 [[nodiscard]] bool Open(IStorage *pStorage, const char *pPath, int StorageType);
36 void Close();
37 bool IsOpen() const;
38 IOHANDLE File() const;
39
40 int GetDataSize(int Index) const;
41 void *GetData(int Index);
42 void *GetDataSwapped(int Index); // makes sure that the data is 32bit LE ints when saved
43 const char *GetDataString(int Index);
44 void ReplaceData(int Index, char *pData, size_t Size); // memory for data must have been allocated with malloc
45 void UnloadData(int Index);
46 int NumData() const;
47
48 int GetItemSize(int Index) const;
49 void *GetItem(int Index, int *pType = nullptr, int *pId = nullptr, CUuid *pUuid = nullptr);
50 void GetType(int Type, int *pStart, int *pNum);
51 int FindItemIndex(int Type, int Id);
52 void *FindItem(int Type, int Id);
53 int NumItems() const;
54
55 const char *FullName() const;
56 const char *BaseName() const;
57 const char *Path() const;
58 SHA256_DIGEST Sha256() const;
59 unsigned Crc() const;
60 int Size() const;
61};
62
63// write access
65{
66public:
72
73private:
83
85 {
86 public:
87 int m_Type;
88 int m_Id;
89 int m_Size;
90 int m_Next;
91 int m_Prev;
92 void *m_pData;
93 };
94
96 {
97 public:
98 int m_Num = 0;
99 int m_First = -1;
100 int m_Last = -1;
101 };
102
104 {
105 public:
108 };
109
111 std::map<uint16_t, CItemTypeInfo, std::less<>> m_ItemTypes; // item types must be sorted in ascending order
112 std::vector<CItemInfo> m_vItems;
113 std::vector<CDataInfo> m_vDatas;
114 std::vector<CExtendedItemType> m_vExtendedItemTypes;
115
116 int GetTypeFromIndex(int Index) const;
117 int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid);
118
119public:
122 {
123 m_File = Other.m_File;
124 Other.m_File = nullptr;
125 m_ItemTypes = std::move(Other.m_ItemTypes);
126 m_vItems = std::move(Other.m_vItems);
127 m_vDatas = std::move(Other.m_vDatas);
128 m_vExtendedItemTypes = std::move(Other.m_vExtendedItemTypes);
129 }
131
132 [[nodiscard]] bool Open(class IStorage *pStorage, const char *pFilename, int StorageType = IStorage::TYPE_SAVE);
133 int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid = nullptr);
134 int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel = COMPRESSION_DEFAULT);
135 int AddDataSwapped(size_t Size, const void *pData);
136 int AddDataString(const char *pStr);
137 void Finish();
138};
139
140#endif
Definition datafile.h:24
int GetItemSize(int Index) const
Definition datafile.cpp:782
void * GetItem(int Index, int *pType=nullptr, int *pId=nullptr, CUuid *pUuid=nullptr)
Definition datafile.cpp:845
void GetType(int Type, int *pStart, int *pNum)
Definition datafile.cpp:862
int FindItemIndex(int Type, int Id)
Definition datafile.cpp:882
const char * FullName() const
Definition datafile.cpp:916
int GetInternalItemType(int ExternalType)
Definition datafile.cpp:820
void UnloadData(int Index)
Definition datafile.cpp:763
const char * Path() const
Definition datafile.cpp:930
IOHANDLE File() const
Definition datafile.cpp:702
int GetDataSize(int Index) const
Definition datafile.cpp:709
bool IsOpen() const
Definition datafile.cpp:697
void ReplaceData(int Index, char *pData, size_t Size)
Definition datafile.cpp:753
SHA256_DIGEST Sha256() const
Definition datafile.cpp:937
unsigned Crc() const
Definition datafile.cpp:944
void * FindItem(int Type, int Id)
Definition datafile.cpp:899
int NumData() const
Definition datafile.cpp:775
void * GetData(int Index)
Definition datafile.cpp:716
int GetExternalItemType(int InternalType, CUuid *pUuid)
Definition datafile.cpp:789
bool Open(const char *pFullName, IStorage *pStorage, const char *pPath, int StorageType)
Definition datafile.cpp:454
class CDatafile * m_pDataFile
Definition datafile.h:25
int NumItems() const
Definition datafile.cpp:909
int Size() const
Definition datafile.cpp:951
~CDataFileReader()
Definition datafile.cpp:442
void Close()
Definition datafile.cpp:680
void * GetDataSwapped(int Index)
Definition datafile.cpp:723
const char * GetDataString(int Index)
Definition datafile.cpp:730
CDataFileReader & operator=(CDataFileReader &&Other)
Definition datafile.cpp:447
const char * BaseName() const
Definition datafile.cpp:923
Definition datafile.h:75
int m_CompressedSize
Definition datafile.h:80
int m_UncompressedSize
Definition datafile.h:78
void * m_pCompressedData
Definition datafile.h:79
void * m_pUncompressedData
Definition datafile.h:77
ECompressionLevel m_CompressionLevel
Definition datafile.h:81
Definition datafile.h:104
int m_Type
Definition datafile.h:106
CUuid m_Uuid
Definition datafile.h:107
Definition datafile.h:85
int m_Prev
Definition datafile.h:91
int m_Next
Definition datafile.h:90
int m_Id
Definition datafile.h:88
int m_Size
Definition datafile.h:89
void * m_pData
Definition datafile.h:92
int m_Type
Definition datafile.h:87
Definition datafile.h:96
int m_Last
Definition datafile.h:100
int m_Num
Definition datafile.h:98
int m_First
Definition datafile.h:99
~CDataFileWriter()
Definition datafile.cpp:963
ECompressionLevel
Definition datafile.h:68
@ COMPRESSION_DEFAULT
Definition datafile.h:69
@ COMPRESSION_BEST
Definition datafile.h:70
CDataFileWriter()
Definition datafile.cpp:958
std::vector< CDataInfo > m_vDatas
Definition datafile.h:113
void Finish()
Definition datafile.cpp:1147
int AddDataSwapped(size_t Size, const void *pData)
Definition datafile.cpp:1104
int GetTypeFromIndex(int Index) const
Definition datafile.cpp:990
std::map< uint16_t, CItemTypeInfo, std::less<> > m_ItemTypes
Definition datafile.h:111
CDataFileWriter(CDataFileWriter &&Other)
Definition datafile.h:121
bool Open(class IStorage *pStorage, const char *pFilename, int StorageType=IStorage::TYPE_SAVE)
Definition datafile.cpp:983
int AddDataString(const char *pStr)
Definition datafile.cpp:1123
int GetExtendedItemTypeIndex(int Type, const CUuid *pUuid)
Definition datafile.cpp:995
int AddData(size_t Size, const void *pData, ECompressionLevel CompressionLevel=COMPRESSION_DEFAULT)
Definition datafile.cpp:1086
std::vector< CItemInfo > m_vItems
Definition datafile.h:112
int AddItem(int Type, int Id, size_t Size, const void *pData, const CUuid *pUuid=nullptr)
Definition datafile.cpp:1034
IOHANDLE m_File
Definition datafile.h:110
std::vector< CExtendedItemType > m_vExtendedItemTypes
Definition datafile.h:114
Definition datafile.cpp:134
Definition storage.h:21
@ TYPE_SAVE
Definition storage.h:26
@ ITEMTYPE_EX
Definition datafile.h:19
void * IOHANDLE
Definition logger.h:12
Definition uuid_manager.h:17
Definition hash.h:15