summaryrefslogtreecommitdiff
path: root/xfa/fgas/crt/fgas_memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fgas/crt/fgas_memory.h')
-rw-r--r--xfa/fgas/crt/fgas_memory.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/xfa/fgas/crt/fgas_memory.h b/xfa/fgas/crt/fgas_memory.h
new file mode 100644
index 0000000000..a9c5cc97e7
--- /dev/null
+++ b/xfa/fgas/crt/fgas_memory.h
@@ -0,0 +1,59 @@
+// 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/include/fxcrt/fx_memory.h"
+#include "core/include/fxcrt/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_