summaryrefslogtreecommitdiff
path: root/gcsdk/steamextra/misc.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /gcsdk/steamextra/misc.h
downloadarchived-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.h121
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