//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#ifndef SAVERESTORE_UTLSYMBOL_H
#define SAVERESTORE_UTLSYMBOL_H
#ifdef _WIN32
#pragma once
#endif

#include "utlsymbol.h"

class CUtlSymbolDataOps : public CDefSaveRestoreOps
{
public:
	CUtlSymbolDataOps( CUtlSymbolTable &masterTable ) : m_symbolTable(masterTable) {}

	virtual void Save( const SaveRestoreFieldInfo_t &fieldInfo, ISave *pSave )
	{
		CUtlSymbol *sym = ((CUtlSymbol *)fieldInfo.pField);
		
		pSave->WriteString( m_symbolTable.String( *sym ) );
	}
	
	virtual void Restore( const SaveRestoreFieldInfo_t &fieldInfo, IRestore *pRestore )
	{
		CUtlSymbol *sym = ((CUtlSymbol *)fieldInfo.pField);

		char tmp[1024];
		pRestore->ReadString( tmp, sizeof(tmp), 0 );
		*sym = m_symbolTable.AddString( tmp );
	}
	
	virtual void MakeEmpty( const SaveRestoreFieldInfo_t &fieldInfo )
	{
		CUtlSymbol *sym = ((CUtlSymbol *)fieldInfo.pField);
		*sym = UTL_INVAL_SYMBOL;
	}

	virtual bool IsEmpty( const SaveRestoreFieldInfo_t &fieldInfo )
	{
		CUtlSymbol *sym = ((CUtlSymbol *)fieldInfo.pField);
		return (*sym).IsValid() ? false : true;
	}

private:
	CUtlSymbolTable &m_symbolTable;
	
};

#endif // SAVERESTORE_UTLSYMBOL_H