// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef _FX_MEMORY #define _FX_MEMORY class IFX_MEMAllocator; class CFX_Target; enum FX_ALLOCTYPE { FX_ALLOCTYPE_Default = 0, FX_ALLOCTYPE_Static , FX_ALLOCTYPE_Fixed , FX_ALLOCTYPE_Dynamic , }; class IFX_MEMAllocator { public: virtual void Release() = 0; virtual void* Alloc(size_t size) = 0; virtual void Free(void *pBlock) = 0; virtual size_t GetBlockSize() const = 0; virtual size_t GetDefChunkSize() const = 0; virtual size_t SetDefChunkSize(size_t size) = 0; virtual size_t GetCurrentDataSize() const = 0; }; IFX_MEMAllocator* FX_CreateAllocator(FX_ALLOCTYPE eType, size_t chunkSize, size_t blockSize); class CFX_Target { public: void* operator new(size_t size) { return FX_Alloc(uint8_t, size); } void operator delete(void *p) { FX_Free(p); } void* operator new(size_t size, IFX_MEMAllocator *pAllocator) { return pAllocator->Alloc(size); } void operator delete(void *p, IFX_MEMAllocator *pAllocator) { pAllocator->Free(p); } void* operator new(size_t size, void *place) { return place; } void operator delete(void *p, void *place) {} }; #define FXTARGET_New new #define FXTARGET_NewWith(__allocator__) new(__allocator__) #define FXTARGET_Delete delete #define FXTARGET_DeleteWith(__class__, __allocator__, pointer) {(pointer)->~__class__(); (pointer)->operator delete((pointer), (__allocator__));} #endif