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 /gcsdk/steamextra/misc.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'gcsdk/steamextra/misc.h')
| -rw-r--r-- | gcsdk/steamextra/misc.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/gcsdk/steamextra/misc.h b/gcsdk/steamextra/misc.h new file mode 100644 index 0000000..d1ced65 --- /dev/null +++ b/gcsdk/steamextra/misc.h @@ -0,0 +1,121 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Miscellaneous platform-specific code +// +//============================================================================= + + +#ifndef MISC_H +#define MISC_H + +// Random number utilities +uint32 UNRandFast(); +char CHRandFast(); +void SetRandSeed( uint64 ulRandSeed ); +uint64 GetRandSeed(); +void RandMem(void *dest, int count); + +bool IsVTTAccountName( const char *szAccountName ); + +float SafeCalcPct( uint64 ulNumerator, uint64 ulDenominator ); + +bool BRejectDueToBacklog( int nBacklogCur, int nBacklogThreshold, int nBacklogLimit, int iItem ); + +#define SAFE_CLOSE_HANDLE( x ) if ( INVALID_HANDLE_VALUE != ( x ) ) { CloseHandle( x ); ( x ) = INVALID_HANDLE_VALUE; } +#define SAFE_DELETE( x ) if ( NULL != ( x ) ) { delete ( x ); ( x ) = NULL; } +#define SAFE_CLOSE_HCONNECTION( x ) if ( 0 != ( x ) ) { CNet::BClose( ( x ) ); ( x ) = 0; } +#define SAFE_RELEASE( x ) if ( NULL != ( x ) ) { ( x )->Release(); x = NULL; } + +#define DECLARE_STEAM_CLASS_SIMPLE( className, baseClassName ) \ + typedef baseClassName BaseClass; \ + typedef className ThisClass; \ + +#define DECLARE_STEAM_CLASS_NOBASE( className ) \ + typedef className ThisClass; \ + +// Type for our memory output debugging. +class IDisplayMemPoolStats +{ +public: + virtual void Display( const char *pszClassName, uint64 ulClassSize, uint32 unPoolInstanceCount, uint64 ulPoolMemoryUsage, uint32 unPoolPeakInstanceCount, uint64 ulPoolPeakMemoryUsage ) = 0; +}; + +// A class for registering functions that will print memory usage information +typedef void (*DumpMemFn_t)( IDisplayMemPoolStats * ); +class CDumpMemFnReg +{ +public: + static CDumpMemFnReg *sm_Head; + + CDumpMemFnReg( DumpMemFn_t fn ) + : m_fn( fn ), + m_pNext( sm_Head ) + { + sm_Head = this; + } + + DumpMemFn_t m_fn; + CDumpMemFnReg *m_pNext; +}; + +// Helper macros for creating and using CClassMemoryPool on our frequently allocated objects +#define DECLARE_CLASS_MEMPOOL( className ) \ +private: \ + static CUtlMemoryPool sm_classMemPool; \ +public: \ + static void* operator new ( size_t nSize ); \ + static void* operator new ( size_t nSize, int nBlockUse, const char *pFileName, int nLine ); \ + static void operator delete ( void *pMem ); \ + static void DumpMemStats( IDisplayMemPoolStats *pDisplayer ); \ + + +#define IMPLEMENT_CLASS_MEMPOOL( className, initSize, growMode ) \ +CUtlMemoryPool className::sm_classMemPool( sizeof( className ), ( initSize ), ( growMode ), MEM_ALLOC_CLASSNAME( className ) ); \ + \ +void* className::operator new ( size_t nSize ) \ +{ \ + if ( nSize != sizeof( className ) ) \ + { \ + EmitError( SPEW_CONSOLE, #className"::operator new() called on wrong size! Expected %llu, Got %llu\n", (uint64)sizeof( className ), (uint64)nSize ); \ + return NULL; \ + } \ + \ + return sm_classMemPool.Alloc(); \ +} \ + \ +void* className::operator new ( size_t nSize, int nBlockUse, const char *pFileName, int nLine ) \ +{ \ + if ( nSize != sizeof( className ) ) \ + { \ + EmitError( SPEW_CONSOLE, #className"::operator new() called on wrong size! Expected %llu, Got %llu\n", (uint64)sizeof( className ), (uint64)nSize ); \ + return NULL; \ + } \ + \ + return sm_classMemPool.Alloc(); \ +} \ + \ +void className::operator delete ( void *pMem ) \ +{ \ + sm_classMemPool.Free( (className *)pMem ); \ +} \ + \ +void className::DumpMemStats( IDisplayMemPoolStats *pDisplayer ) \ +{ \ + Assert( pDisplayer ); \ + pDisplayer->Display \ + ( \ + #className, \ + sizeof( className ), \ + sm_classMemPool.Count(), \ + sm_classMemPool.Count() * sizeof( className ), \ + ( ( sm_classMemPool.PeakCount() + ( initSize ) ) / ( initSize ) ) * ( initSize ) , \ + ( ( sm_classMemPool.PeakCount() + ( initSize ) ) / ( initSize ) ) * ( initSize ) * sizeof( className ) \ + ); \ +} \ + \ +static CDumpMemFnReg s_##className##RegDumpMemory( &className::DumpMemStats ); + +// useful macro for rendering an IP +#define iptod(x) ((x)>>24&0xff), ((x)>>16&0xff), ((x)>>8&0xff), ((x)&0xff) + +#endif // MISC_H |