You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.6 KiB
93 lines
2.6 KiB
//=========== (C) Copyright 2000 Valve, L.L.C. 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 = CUtlMemoryPool::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;
|
|
|
|
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
|