From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- sp/src/public/stdstring.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 sp/src/public/stdstring.h (limited to 'sp/src/public/stdstring.h') diff --git a/sp/src/public/stdstring.h b/sp/src/public/stdstring.h new file mode 100644 index 00000000..7ec2dd14 --- /dev/null +++ b/sp/src/public/stdstring.h @@ -0,0 +1,88 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "isaverestore.h" + +#ifndef STDSTRING_H +#define STDSTRING_H + +#if defined( _WIN32 ) +#pragma once +#endif + +#ifdef _WIN32 +#pragma warning(push) +#include // warnings get enabled in yvals.h +#pragma warning(disable:4663) +#pragma warning(disable:4530) +#pragma warning(disable:4245) +#pragma warning(disable:4018) +#pragma warning(disable:4511) +#endif + +#include "tier0/valve_minmax_off.h" // GCC 4.2.2 headers screw up our min/max defs. +#include +#include "tier0/valve_minmax_on.h" // GCC 4.2.2 headers screw up our min/max defs. + +#ifdef _WIN32 +#pragma warning(pop) +#endif + +class CStdStringSaveRestoreOps : public CDefSaveRestoreOps +{ +public: + enum + { + MAX_SAVE_LEN = 4096, + }; + + // save data type interface + virtual void Save( const SaveRestoreFieldInfo_t &fieldInfo, ISave *pSave ) + { + std::string *pString = (std::string *)fieldInfo.pField; + Assert( pString->length() < MAX_SAVE_LEN - 1 ); + if ( pString->length() < MAX_SAVE_LEN - 1 ) + pSave->WriteString( pString->c_str() ); + else + pSave->WriteString( "<>" ); + } + + virtual void Restore( const SaveRestoreFieldInfo_t &fieldInfo, IRestore *pRestore ) + { + std::string *pString = (std::string *)fieldInfo.pField; + char szString[MAX_SAVE_LEN]; + pRestore->ReadString( szString, sizeof(szString), 0 ); + szString[MAX_SAVE_LEN - 1] = 0; + pString->assign( szString ); + } + + virtual void MakeEmpty( const SaveRestoreFieldInfo_t &fieldInfo ) + { + std::string *pString = (std::string *)fieldInfo.pField; + pString->erase(); + } + + virtual bool IsEmpty( const SaveRestoreFieldInfo_t &fieldInfo ) + { + std::string *pString = (std::string *)fieldInfo.pField; + return pString->empty(); + } +}; + +//------------------------------------- + +inline ISaveRestoreOps *GetStdStringDataOps() +{ + static CStdStringSaveRestoreOps ops; + return &ops; +} + +//------------------------------------- + +#define DEFINE_STDSTRING(name) \ + { FIELD_CUSTOM, #name, { offsetof(classNameTypedef,name), 0 }, 1, FTYPEDESC_SAVE, NULL, GetStdStringDataOps(), NULL } + +#endif // STDSTRING_H -- cgit v1.2.3