source-engine/game/shared/saverestore_stringtable.h

66 lines
1.6 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= 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