diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/tier1/utlbufferutil.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/tier1/utlbufferutil.h')
| -rw-r--r-- | public/tier1/utlbufferutil.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/public/tier1/utlbufferutil.h b/public/tier1/utlbufferutil.h new file mode 100644 index 0000000..a52a528 --- /dev/null +++ b/public/tier1/utlbufferutil.h @@ -0,0 +1,192 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +// Utilities for serialization/unserialization buffer +//=============================================================================// + +#ifndef UTLBUFFERUTIL_H +#define UTLBUFFERUTIL_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "tier1/utlvector.h" +#include "tier1/utlbuffer.h" + + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +class Vector2D; +class Vector; +class Vector4D; +class QAngle; +class Quaternion; +class VMatrix; +class Color; +class CUtlBinaryBlock; +class CUtlString; +class CUtlCharConversion; + + +//----------------------------------------------------------------------------- +// For string serialization, set the delimiter rules +//----------------------------------------------------------------------------- +void SetSerializationDelimiter( CUtlCharConversion *pConv ); +void SetSerializationArrayDelimiter( const char *pDelimiter ); + + +//----------------------------------------------------------------------------- +// Standard serialization methods for basic types +//----------------------------------------------------------------------------- +bool Serialize( CUtlBuffer &buf, const bool &src ); +bool Unserialize( CUtlBuffer &buf, bool &dest ); + +bool Serialize( CUtlBuffer &buf, const int &src ); +bool Unserialize( CUtlBuffer &buf, int &dest ); + +bool Serialize( CUtlBuffer &buf, const float &src ); +bool Unserialize( CUtlBuffer &buf, float &dest ); + +bool Serialize( CUtlBuffer &buf, const Vector2D &src ); +bool Unserialize( CUtlBuffer &buf, Vector2D &dest ); + +bool Serialize( CUtlBuffer &buf, const Vector &src ); +bool Unserialize( CUtlBuffer &buf, Vector &dest ); + +bool Serialize( CUtlBuffer &buf, const Vector4D &src ); +bool Unserialize( CUtlBuffer &buf, Vector4D &dest ); + +bool Serialize( CUtlBuffer &buf, const QAngle &src ); +bool Unserialize( CUtlBuffer &buf, QAngle &dest ); + +bool Serialize( CUtlBuffer &buf, const Quaternion &src ); +bool Unserialize( CUtlBuffer &buf, Quaternion &dest ); + +bool Serialize( CUtlBuffer &buf, const VMatrix &src ); +bool Unserialize( CUtlBuffer &buf, VMatrix &dest ); + +bool Serialize( CUtlBuffer &buf, const Color &src ); +bool Unserialize( CUtlBuffer &buf, Color &dest ); + +bool Serialize( CUtlBuffer &buf, const CUtlBinaryBlock &src ); +bool Unserialize( CUtlBuffer &buf, CUtlBinaryBlock &dest ); + +bool Serialize( CUtlBuffer &buf, const CUtlString &src ); +bool Unserialize( CUtlBuffer &buf, CUtlString &dest ); + + +//----------------------------------------------------------------------------- +// You can use this to check if a type serializes on multiple lines +//----------------------------------------------------------------------------- +template< class T > +inline bool SerializesOnMultipleLines() +{ + return false; +} + +template< > +inline bool SerializesOnMultipleLines<VMatrix>() +{ + return true; +} + +template< > +inline bool SerializesOnMultipleLines<CUtlBinaryBlock>() +{ + return true; +} + + +//----------------------------------------------------------------------------- +// Vector serialization +//----------------------------------------------------------------------------- +template< class T > +bool Serialize( CUtlBuffer &buf, const CUtlVector<T> &src ) +{ + extern const char *s_pUtlBufferUtilArrayDelim; + + int nCount = src.Count(); + + if ( !buf.IsText() ) + { + buf.PutInt( nCount ); + for ( int i = 0; i < nCount; ++i ) + { + ::Serialize( buf, src[i] ); + } + return buf.IsValid(); + } + + if ( !SerializesOnMultipleLines<T>() ) + { + buf.PutChar('\n'); + for ( int i = 0; i < nCount; ++i ) + { + ::Serialize( buf, src[i] ); + if ( s_pUtlBufferUtilArrayDelim && (i != nCount-1) ) + { + buf.PutString( s_pUtlBufferUtilArrayDelim ); + } + buf.PutChar('\n'); + } + } + else + { + for ( int i = 0; i < nCount; ++i ) + { + ::Serialize( buf, src[i] ); + if ( s_pUtlBufferUtilArrayDelim && (i != nCount-1) ) + { + buf.PutString( s_pUtlBufferUtilArrayDelim ); + } + buf.PutChar(' '); + } + } + + return buf.IsValid(); +} + +template< class T > +bool Unserialize( CUtlBuffer &buf, CUtlVector<T> &dest ) +{ + dest.RemoveAll(); + + MEM_ALLOC_CREDIT_FUNCTION(); + + if ( !buf.IsText() ) + { + int nCount = buf.GetInt(); + if ( nCount ) + { + dest.EnsureCapacity( nCount ); + for ( int i = 0; i < nCount; ++i ) + { + VerifyEquals( dest.AddToTail(), i ); + if ( !::Unserialize( buf, dest[i] ) ) + return false; + } + } + return buf.IsValid(); + } + + while ( true ) + { + buf.EatWhiteSpace(); + if ( !buf.IsValid() ) + break; + + int i = dest.AddToTail( ); + if ( ! ::Unserialize( buf, dest[i] ) ) + return false; + } + return true; +} + + +#endif // UTLBUFFERUTIL_H + |