// 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 XFA_FGAS_CRT_FGAS_MEMORY_H_ #define XFA_FGAS_CRT_FGAS_MEMORY_H_ #include "core/fxcrt/include/fx_memory.h" #include "core/fxcrt/include/fx_system.h" 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 ~IFX_MEMAllocator() {} 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: virtual ~CFX_Target() {} 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_NewWith(__allocator__) new (__allocator__) #define FXTARGET_DeleteWith(__class__, __allocator__, pointer) \ { \ (pointer)->~__class__(); \ (pointer)->operator delete((pointer), (__allocator__)); \ } #endif // XFA_FGAS_CRT_FGAS_MEMORY_H_