//========= 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