DDNet documentation
Loading...
Searching...
No Matches
uuid_manager.h
Go to the documentation of this file.
1#ifndef ENGINE_SHARED_UUID_MANAGER_H
2#define ENGINE_SHARED_UUID_MANAGER_H
3
4#include <vector>
5
6class CUuid
7{
8public:
9 unsigned char m_aData[16];
10
11 bool operator==(const CUuid &Other) const;
12 bool operator!=(const CUuid &Other) const;
13 bool operator<(const CUuid &Other) const;
14};
15
16enum
17{
18 UUID_MAXSTRSIZE = 37, // 12345678-0123-5678-0123-567890123456
19
22
23 UUID_INT_SIZE = sizeof(CUuid) / sizeof(int32_t),
24 OFFSET_UUID = 1 << 16,
25};
26
27extern const CUuid UUID_ZEROED;
28
30CUuid CalculateUuid(const char *pName);
31// The buffer length should be at least UUID_MAXSTRSIZE.
32void FormatUuid(CUuid Uuid, char *pBuffer, unsigned BufferLength);
33// Returns nonzero on failure.
34int ParseUuid(CUuid *pUuid, const char *pBuffer);
35// Converts a UUID into an array of UUID_INT_SIZE big-endian 32-bit ints.
36void UuidToInts(const CUuid &Uuid, int *pInts);
37
38template<int N>
39void UuidToInts(const CUuid &Uuid, int (&aInts)[N])
40{
41 static_assert(N == UUID_INT_SIZE, "Array has wrong size");
42 UuidToInts(Uuid, static_cast<int *>(aInts));
43}
44
45// Converts an array of UUID_INT_SIZE integers, each holding one big-endian 32-bit int, into a UUID.
46CUuid UuidFromInts(const int *pInts);
47
48template<int N>
49CUuid UuidFromInts(const int (&aInts)[N])
50{
51 static_assert(N == UUID_INT_SIZE, "Array has wrong size");
52 return UuidFromInts(static_cast<const int *>(aInts));
53}
54
55class CName
56{
57public:
59 const char *m_pName;
60};
61
63{
64public:
66 int m_Id;
67
68 bool operator<(const CNameIndexed &Other) const { return m_Uuid < Other.m_Uuid; }
69 bool operator==(const CNameIndexed &Other) const { return m_Uuid == Other.m_Uuid; }
70};
71
72class CPacker;
73class CUnpacker;
74
76{
77 std::vector<CName> m_vNames;
78 std::vector<CNameIndexed> m_vNamesSorted;
79
80public:
81 void RegisterName(int Id, const char *pName);
82 CUuid GetUuid(int Id) const;
83 const char *GetName(int Id) const;
84 int LookupUuid(CUuid Uuid) const;
85 int NumUuids() const;
86
87 int UnpackUuid(CUnpacker *pUnpacker) const;
88 int UnpackUuid(CUnpacker *pUnpacker, CUuid *pOut) const;
89 void PackUuid(int Id, CPacker *pPacker) const;
90
91 void DebugDump() const;
92};
93
95
96#endif // ENGINE_SHARED_UUID_MANAGER_H
Definition uuid_manager.h:63
int m_Id
Definition uuid_manager.h:66
bool operator==(const CNameIndexed &Other) const
Definition uuid_manager.h:69
CUuid m_Uuid
Definition uuid_manager.h:65
bool operator<(const CNameIndexed &Other) const
Definition uuid_manager.h:68
Definition uuid_manager.h:56
CUuid m_Uuid
Definition uuid_manager.h:58
const char * m_pName
Definition uuid_manager.h:59
Definition packer.h:38
Definition packer.h:54
Definition uuid_manager.h:76
const char * GetName(int Id) const
Definition uuid_manager.cpp:163
std::vector< CName > m_vNames
Definition uuid_manager.h:77
void PackUuid(int Id, CPacker *pPacker) const
Definition uuid_manager.cpp:203
int UnpackUuid(CUnpacker *pUnpacker) const
Definition uuid_manager.cpp:186
int NumUuids() const
Definition uuid_manager.cpp:181
int LookupUuid(CUuid Uuid) const
Definition uuid_manager.cpp:168
std::vector< CNameIndexed > m_vNamesSorted
Definition uuid_manager.h:78
CUuid GetUuid(int Id) const
Definition uuid_manager.cpp:158
void DebugDump() const
Definition uuid_manager.cpp:209
void RegisterName(int Id, const char *pName)
Definition uuid_manager.cpp:142
Definition uuid_manager.h:7
bool operator<(const CUuid &Other) const
Definition uuid_manager.cpp:127
bool operator!=(const CUuid &Other) const
Definition uuid_manager.cpp:122
bool operator==(const CUuid &Other) const
Definition uuid_manager.cpp:117
unsigned char m_aData[16]
Definition uuid_manager.h:9
CUuidManager g_UuidManager
Definition global_uuid_manager.cpp:16
void FormatUuid(CUuid Uuid, char *pBuffer, unsigned BufferLength)
Definition uuid_manager.cpp:65
int ParseUuid(CUuid *pUuid, const char *pBuffer)
Definition uuid_manager.cpp:74
CUuid RandomUuid()
Definition uuid_manager.cpp:23
void UuidToInts(const CUuid &Uuid, int *pInts)
Definition uuid_manager.cpp:99
CUuid CalculateUuid(const char *pName)
Definition uuid_manager.cpp:39
CUuid UuidFromInts(const int *pInts)
Definition uuid_manager.cpp:107
const CUuid UUID_ZEROED
Definition uuid_manager.cpp:19
@ OFFSET_UUID
Definition uuid_manager.h:24
@ UUID_MAXSTRSIZE
Definition uuid_manager.h:18
@ UUID_INVALID
Definition uuid_manager.h:20
@ UUID_UNKNOWN
Definition uuid_manager.h:21
@ UUID_INT_SIZE
Definition uuid_manager.h:23