blob: 3e2ba82161574a7b63d3699c7c5ccba5b50e1bc3 (
plain) (
blame)
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
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef SAVERESTORE_STRINGTABLE_H
#define SAVERESTORE_STRINGTABLE_H
#if defined( _WIN32 )
#pragma once
#endif
#include "isaverestore.h"
#include "networkstringtabledefs.h"
//-------------------------------------
class CStringTableSaveRestoreOps : public CDefSaveRestoreOps
{
public:
void Init( INetworkStringTable* pNetworkStringTable )
{
m_pStringTable = pNetworkStringTable;
}
// save data type interface
virtual void Save( const SaveRestoreFieldInfo_t &fieldInfo, ISave *pSave )
{
int *pStringIndex = (int *)fieldInfo.pField;
const char *pString = m_pStringTable->GetString( *pStringIndex );
int nLen = Q_strlen( pString ) + 1;
pSave->WriteInt( &nLen );
pSave->WriteString( pString );
}
virtual void Restore( const SaveRestoreFieldInfo_t &fieldInfo, IRestore *pRestore )
{
int *pStringIndex = (int *)fieldInfo.pField;
int nLen = pRestore->ReadInt();
char *pTemp = (char *)stackalloc( nLen );
pRestore->ReadString( pTemp, nLen, nLen );
*pStringIndex = m_pStringTable->AddString( CBaseEntity::IsServer(), pTemp );
}
virtual void MakeEmpty( const SaveRestoreFieldInfo_t &fieldInfo )
{
int *pStringIndex = (int *)fieldInfo.pField;
*pStringIndex = INVALID_STRING_INDEX;
}
virtual bool IsEmpty( const SaveRestoreFieldInfo_t &fieldInfo )
{
int *pStringIndex = (int *)fieldInfo.pField;
return *pStringIndex == INVALID_STRING_INDEX;
}
private:
INetworkStringTable *m_pStringTable;
};
#endif // SAVERESTORE_STRINGTABLE_H
|