Counter Strike : Global Offensive Source Code
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.
|
|
//====== Copyright � 1996-2010, Valve Corporation, All rights reserved. =======
//
// Purpose:
// The CUtlAllocation class:
// A single allocation in the style of CUtlMemory/CUtlString/CUtlBuffer
// as compact as possible, no virtuals or extraneous data
// to be used primarily to replace CUtlBuffer
//=============================================================================
#ifndef UTLALLOCATION_H
#define UTLALLOCATION_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlmemory.h"
class CUtlAllocation { public:
// constructor, destructor
CUtlAllocation() { m_pMemory = NULL; }
CUtlAllocation( const void *pMemory, int cub ) { m_pMemory = NULL; Copy( pMemory, cub ); }
CUtlAllocation( CUtlAllocation const &src ) { m_pMemory = NULL; Copy( src ); }
~CUtlAllocation() { Purge(); }
CUtlAllocation &operator=( CUtlAllocation const &src ) { Copy( src ); return *this; }
bool operator==( CUtlAllocation const &src ) { if ( Count() != src.Count() ) return false; return Q_memcmp( Base(), src.Base(), Count() ) == 0; }
void Copy( const void *pMemory, int cub ) { if ( cub == 0 || pMemory == NULL ) { Purge(); return; } if ( cub != Count() ) { Purge(); m_pMemory = (ActualMemory_t *)malloc( cub + sizeof( int ) ); m_pMemory->cub = cub; } Q_memcpy( Base(), pMemory, cub ); }
// Gets the base address
uint8* Base() { if ( m_pMemory == NULL ) return NULL; return m_pMemory->rgub; }
const uint8* Base() const { if ( m_pMemory == NULL ) return NULL; return m_pMemory->rgub; }
// Size
int Count() const { if ( m_pMemory == NULL ) return 0; return m_pMemory->cub; }
// Memory deallocation
void Purge() { if ( m_pMemory ) free(m_pMemory); m_pMemory = NULL; }
void Copy( const CUtlAllocation &alloc ) { Copy( alloc.Base(), alloc.Count() ); }
void Swap( CUtlAllocation &alloc ) { ActualMemory_t *pTemp = m_pMemory; m_pMemory = alloc.m_pMemory; alloc.m_pMemory = pTemp; }
void Alloc( int cub ) { Purge(); m_pMemory = (ActualMemory_t *)malloc( cub + sizeof( int ) ); m_pMemory->cub = cub; }
private: struct ActualMemory_t { int cub; uint8 rgub[4]; // i'd prefer to make this 0 but the compiler whines when i do
};
ActualMemory_t *m_pMemory; };
#endif // UTLALLOCATION_H
|