-
Notifications
You must be signed in to change notification settings - Fork 36
/
dmxserializationdictionary.h
76 lines (56 loc) · 2.17 KB
/
dmxserializationdictionary.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef DMXSERIALIZATIONDICTIONARY_H
#define DMXSERIALIZATIONDICTIONARY_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlrbtree.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class CDmxElement;
//-----------------------------------------------------------------------------
// Element dictionary used in unserialization
//-----------------------------------------------------------------------------
typedef int DmxSerializationHandle_t;
enum
{
DMX_SERIALIZATION_HANDLE_INVALID = (DmxSerializationHandle_t)~0
};
//-----------------------------------------------------------------------------
// Element dictionary used in serialization
//-----------------------------------------------------------------------------
class CDmxSerializationDictionary
{
public:
CDmxSerializationDictionary( int nElementsHint = 0 );
// Creates the list of all things to serialize
void BuildElementList( CDmxElement *pRoot, bool bFlatMode );
// Should I inline the serialization of this element?
bool ShouldInlineElement( CDmxElement *pElement );
// Clears the dictionary
void Clear();
// Iterates over all root elements to serialize
DmxSerializationHandle_t FirstRootElement() const;
DmxSerializationHandle_t NextRootElement( DmxSerializationHandle_t h ) const;
CDmxElement* GetRootElement( DmxSerializationHandle_t h );
// Finds the handle of the element
DmxSerializationHandle_t Find( CDmxElement *pElement );
// How many root elements do we have?
int RootElementCount() const;
private:
struct DmxElementInfo_t
{
CDmxElement* m_pElement;
bool m_bRoot;
};
// Creates the list of all things to serialize
void BuildElementList_R( CDmxElement *pRoot, bool bFlatMode, bool bIsRoot );
static bool LessFunc( const DmxElementInfo_t &lhs, const DmxElementInfo_t &rhs );
CUtlRBTree< DmxElementInfo_t, DmxSerializationHandle_t > m_Dict;
};
#endif // DMXSERIALIZATIONDICTIONARY_H