This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/shared/saverestore_stringtable.h
2020-08-04 13:13:01 -04:00

60 lines
1.8 KiB
C++

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