Team Fortress 2 Source Code as on 22/4/2020
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 Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// These classes let you write your own allocators to be used with new and delete.
// If you have an allocator: VAllocator *pAlloc, you can call new and delete like this:
//
// ptr = VNew(pAlloc) ClassName;
// VDelete(pAlloc, ptr);
//
// Note: allocating and freeing arrays of objects will not work using VAllocators.
#ifndef VALLOCATOR_H
#define VALLOCATOR_H
class VAllocator { public: virtual void* Alloc(unsigned long size)=0; virtual void Free(void *ptr)=0; };
// This allocator just uses malloc and free.
class VStdAllocator : public VAllocator { public: virtual void* Alloc(unsigned long size); virtual void Free(void *ptr); }; extern VStdAllocator g_StdAllocator;
// Use these to allocate classes through VAllocator.
// Allocating arrays of classes is not supported.
#define VNew(pAlloc) new
#define VDelete(pAlloc, ptr) delete ptr
// Used internally.. just makes sure we call the right operator new.
class DummyAllocatorHelper { public: int x; };
inline void* operator new(size_t size, void *ptr, DummyAllocatorHelper *asdf) { (void)asdf; // Suppress unused-variable compiler warnings.
(void)size; return ptr; }
inline void operator delete(void *ptrToDelete, void *ptr, DummyAllocatorHelper *asdf) { (void)asdf; // Suppress unused-variable compiler warnings.
(void)ptr; (void)ptrToDelete; }
// Use these to manually construct and destruct lists of objects.
template<class T> inline void VAllocator_CallConstructors(T *pObjects, int count=1) { for(int i=0; i < count; i++) new(&pObjects[i], (DummyAllocatorHelper*)0) T; }
template<class T> inline void VAllocator_CallDestructors(T *pObjects, int count) { for(int i=0; i < count; i++) pObjects[i].~T(); }
#endif
|