diff options
Diffstat (limited to 'gcsdk/steamextra/tier1/tsmultimempool.h')
| -rw-r--r-- | gcsdk/steamextra/tier1/tsmultimempool.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/gcsdk/steamextra/tier1/tsmultimempool.h b/gcsdk/steamextra/tier1/tsmultimempool.h new file mode 100644 index 0000000..860e9df --- /dev/null +++ b/gcsdk/steamextra/tier1/tsmultimempool.h @@ -0,0 +1,97 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// The copyright to the contents herein is the property of Valve, L.L.C. +// The contents may be used and/or copied only with the written permission of +// Valve, L.L.C., or in accordance with the terms and conditions stipulated in +// the agreement/contract under which the contents have been supplied. +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// +//----------------------------------------------------------------------------- +// $Log: $ +// +// $NoKeywords: $ +//============================================================================= + +#ifndef TSMULTIMEMPOOL_H +#define TSMULTIMEMPOOL_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "tier1/utlmap.h" +#include "tier1/mempool.h" +#include "tier1/tsmempool.h" + +//----------------------------------------------------------------------------- +// Purpose: A container of a range of mem pool sizes (for network buffers for example) +// and a raw alloc capability (for sizes greater than any contained mem pool). +//----------------------------------------------------------------------------- +class CThreadSafeMultiMemoryPool +{ +public: + struct MemPoolConfig_t + { + uint32 m_cubBlockSize; + uint32 m_cubDefaultPoolSize; + }; + + CThreadSafeMultiMemoryPool( const MemPoolConfig_t *pnBlock, int cnMemPoolConfig, int nGrowMode = UTLMEMORYPOOL_GROW_FAST ); + ~CThreadSafeMultiMemoryPool(); + + // Allocate a block of at least nAllocSize bytes + void* Alloc( uint32 cubAlloc ); + // Free a previously alloc'd block + void Free(void *pvMem); + // ReAllocate a previously allocated block to a new size + void* ReAlloc( void *pvMem, uint32 cubAlloc ); + + // Frees everything + void Clear(); + + // alloc size for this bit of alloc'd memory + int CubAllocSize( void *pvMem ); + // prints details about our contained memory + void PrintStats(); + + // total number of alloc'd elements + int Count(); + + // Return the total size in MB allocated for this pool + int CMBPoolSize() const; + // Return the amount of memory in use + int CMBPoolSizeInUse() const; + +#ifdef DBGFLAG_VALIDATE + void Validate( CValidator &validator, const char *pchName ); // Validate our internal structures +#endif // DBGFLAG_VALIDATE + +private: + struct MemPoolRecord_t + { + CThreadSafeMemoryPool *m_pMemPool; + uint32 m_nBlockSize; + }; + + CUtlVector<MemPoolRecord_t> m_VecMemPool; // stores our list of mem pools + + uint32 m_nBlockSizeMax; + CUtlVector<MemPoolRecord_t *> m_VecMemPoolLookup; // quick lookup table of mempools + + struct RawAllocation_t + { + void *m_pvMem; + uint32 m_nBlockSize; + }; + CUtlMap<void *,RawAllocation_t,int> m_MapRawAllocation; // stores our list of raw alloc'd mem + CThreadFastMutex m_mutexRawAllocations; + + uint32 m_cubReallocedTotal; +}; + + +#endif // TSMULTIMEMPOOL_H |