Merge to XFA: Fix IWYU in fxcrt headers.
[pdfium.git] / core / include / fxcrt / fx_memory.h
index b0c94c4..15dc7da 100644 (file)
-// Copyright 2014 PDFium Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style license that can be\r
-// found in the LICENSE file.\r
\r
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
-\r
-#ifndef _FX_MEMORY_H_\r
-#define _FX_MEMORY_H_\r
-#ifndef _FX_SYSTEM_H_\r
-#include "fx_system.h"\r
-#endif\r
-#define FXMEM_NONLEAVE                 1\r
-#define FXMEM_MOVABLE                  2\r
-#define FXMEM_DISCARDABLE              4\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-typedef struct _FXMEM_SystemMgr {\r
-\r
-    void* (*Alloc)(struct _FXMEM_SystemMgr* pMgr, size_t size, int flags);\r
-\r
-    void* (*AllocDebug)(struct _FXMEM_SystemMgr* pMgr, size_t size, int flags, FX_LPCSTR file, int line);\r
-\r
-    void* (*Realloc)(struct _FXMEM_SystemMgr* pMgr, void* pointer, size_t size, int flags);\r
-\r
-    void* (*ReallocDebug)(struct _FXMEM_SystemMgr* pMgr, void* pointer, size_t size, int flags, FX_LPCSTR file, int line);\r
-\r
-    void* (*Lock)(struct _FXMEM_SystemMgr* pMgr, void* handle);\r
-\r
-    void  (*Unlock)(struct _FXMEM_SystemMgr* pMgr, void* handle);\r
-\r
-    void  (*Free)(struct _FXMEM_SystemMgr* pMgr, void* pointer, int flags);\r
-\r
-    void  (*Purge)(struct _FXMEM_SystemMgr* pMgr);\r
-\r
-    void  (*CollectAll)(struct _FXMEM_SystemMgr* pMgr);\r
-\r
-\r
-    void* user;\r
-} FXMEM_SystemMgr;\r
-FX_DEFINEHANDLE(FXMEM_FoxitMgr)\r
-typedef struct _FXMEM_SystemMgr2 {\r
-\r
-    FX_BOOL    (*More)(struct _FXMEM_SystemMgr2* pMgr, size_t alloc_size, void** new_memory, size_t* new_size);\r
-\r
-    void       (*Free)(struct _FXMEM_SystemMgr2* pMgr, void* memory);\r
-} FXMEM_SystemMgr2;\r
-FXMEM_FoxitMgr* FXMEM_CreateMemoryMgr(size_t size, FX_BOOL extensible);\r
-void   FXMEM_DestroyFoxitMgr(FXMEM_FoxitMgr* pFoxitMgr);\r
-void*  FXMEM_DefaultAlloc(size_t byte_size, int flags);\r
-void*  FXMEM_DefaultAlloc2(size_t units, size_t unit_size, int flags);\r
-void*  FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);\r
-void*  FXMEM_DefaultRealloc2(void* pointer, size_t units, size_t unit_size, int flags);\r
-void   FXMEM_DefaultFree(void* pointer, int flags);\r
-#define FX_Alloc(type, size)                   (type*)FXMEM_DefaultAlloc2(size, sizeof(type), 0)\r
-#define FX_Realloc(type, ptr, size)            (type*)FXMEM_DefaultRealloc2(ptr, size, sizeof(type), 0)\r
-#define FX_AllocNL(type, size)                 (type*)FXMEM_DefaultAlloc2(size, sizeof(type), FXMEM_NONLEAVE)\r
-#define FX_ReallocNL(type, ptr, size)  (type*)FXMEM_DefaultRealloc2(ptr, size, sizeof(type), FXMEM_NONLEAVE)\r
-#define FX_Free(pointer) FXMEM_DefaultFree(pointer, 0)\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#ifdef __cplusplus\r
-#if defined(_DEBUG)\r
-#define FX_NEW new(__FILE__, __LINE__)\r
-#else\r
-\r
-#define FX_NEW new\r
-#endif\r
-class CFX_Object\r
-{\r
-public:\r
-\r
-    void*                      operator new (size_t size, FX_LPCSTR file, int line);\r
-\r
-    void                       operator delete (void* p, FX_LPCSTR file, int line);\r
-\r
-    void*                      operator new (size_t size);\r
-\r
-    void                       operator delete (void* p);\r
-\r
-    void*                      operator new[] (size_t size, FX_LPCSTR file, int line);\r
-\r
-    void                       operator delete[] (void* p, FX_LPCSTR file, int line);\r
-\r
-    void*                      operator new[] (size_t size);\r
-\r
-    void                       operator delete[] (void* p);\r
-\r
-    void*                      operator new (size_t, void* buf)\r
-    {\r
-        return buf;\r
-    }\r
-\r
-    void                       operator delete (void*, void*) {}\r
-};\r
-#define FX_NEW_VECTOR(Pointer, Class, Count) \\r
-    { \\r
-        Pointer = FX_Alloc(Class, Count); \\r
-        if (Pointer) { \\r
-            for (int i = 0; i < (Count); i ++) new (Pointer + i) Class; \\r
-        } \\r
-    }\r
-#define FX_DELETE_VECTOR(Pointer, Class, Count) \\r
-    { \\r
-        for (int i = 0; i < (Count); i ++) Pointer[i].~Class(); \\r
-        FX_Free(Pointer); \\r
-    }\r
-class CFX_DestructObject : public CFX_Object\r
-{\r
-public:\r
-\r
-    virtual ~CFX_DestructObject() {}\r
-};\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-typedef struct _IFX_Allocator {\r
-\r
-    void*      (*m_AllocDebug)(struct _IFX_Allocator* pAllocator, size_t size, FX_LPCSTR file, int line);\r
-\r
-    void*      (*m_Alloc)(struct _IFX_Allocator* pAllocator, size_t size);\r
-\r
-    void*      (*m_ReallocDebug)(struct _IFX_Allocator* pAllocator, void* p, size_t size, FX_LPCSTR file, int line);\r
-\r
-    void*      (*m_Realloc)(struct _IFX_Allocator* pAllocator, void* p, size_t size);\r
-\r
-    void       (*m_Free)(struct _IFX_Allocator* pAllocator, void* p);\r
-} IFX_Allocator;\r
-IFX_Allocator* FXMEM_GetDefAllocator();\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#ifdef _DEBUG\r
-\r
-#define FX_Allocator_Alloc(fxAllocator, type, size) \\r
-    ((fxAllocator) ? (type*)(fxAllocator)->m_AllocDebug((fxAllocator), (size) * sizeof(type), __FILE__, __LINE__) : (FX_Alloc(type, size)))\r
-\r
-#define FX_Allocator_Realloc(fxAllocator, type, ptr, new_size) \\r
-    ((fxAllocator) ? (type*)(fxAllocator)->m_ReallocDebug((fxAllocator), (ptr), (new_size) * sizeof(type), __FILE__, __LINE__) : (FX_Realloc(type, ptr, new_size)))\r
-#else\r
-\r
-#define FX_Allocator_Alloc(fxAllocator, type, size) \\r
-    ((fxAllocator) ? (type*)(fxAllocator)->m_Alloc((fxAllocator), (size) * sizeof(type)) : (FX_Alloc(type, size)))\r
-\r
-#define FX_Allocator_Realloc(fxAllocator, type, ptr, new_size) \\r
-    ((fxAllocator) ? (type*)(fxAllocator)->m_Realloc((fxAllocator), (ptr), (new_size) * sizeof(type)) : (FX_Realloc(type, ptr, new_size)))\r
-#endif\r
-#define FX_Allocator_Free(fxAllocator, ptr) \\r
-    ((fxAllocator) ? (fxAllocator)->m_Free((fxAllocator), (ptr)) : (FX_Free(ptr)))\r
-inline void* operator new(size_t size, IFX_Allocator* fxAllocator)\r
-{\r
-    return (void*)FX_Allocator_Alloc(fxAllocator, FX_BYTE, size);\r
-}\r
-inline void operator delete(void* ptr, IFX_Allocator* fxAllocator)\r
-{\r
-}\r
-#define FX_NewAtAllocator(fxAllocator) \\r
-    ::new(fxAllocator)\r
-#define FX_DeleteAtAllocator(pointer, fxAllocator, __class__) \\r
-    (pointer)->~__class__(); \\r
-    FX_Allocator_Free(fxAllocator, pointer)\r
-class CFX_AllocObject\r
-{\r
-public:\r
-\r
-    void*                      operator new (size_t size, IFX_Allocator* pAllocator, FX_LPCSTR file, int line);\r
-#ifndef _FX_NO_EXCEPTION_\r
-\r
-    void                       operator delete (void* p, IFX_Allocator* pAllocator, FX_LPCSTR file, int line);\r
-#endif\r
-\r
-    void*                      operator new (size_t size, IFX_Allocator* pAllocator);\r
-\r
-    void                       operator delete (void* p);\r
-#ifndef _FX_NO_EXCEPTION_\r
-\r
-    void                       operator delete (void* p, IFX_Allocator* pAllocator);\r
-#endif\r
-\r
-    void*                      operator new (size_t, void* buf)\r
-    {\r
-        return buf;\r
-    }\r
-#ifndef _FX_NO_EXCEPTION_\r
-\r
-    void                       operator delete (void*, void*) {}\r
-#endif\r
-\r
-    IFX_Allocator*     GetAllocator() const\r
-    {\r
-        return m_pAllocator;\r
-    }\r
-private:\r
-\r
-    void*                      operator new[] (size_t size, IFX_Allocator* pAllocator, FX_LPCSTR file, int line)\r
-    {\r
-        return operator new(size, pAllocator, file, line);\r
-    }\r
-#ifndef _FX_NO_EXCEPTION_\r
-\r
-    void                       operator delete[] (void* p, IFX_Allocator* pAllocator, FX_LPCSTR file, int line) {}\r
-#endif\r
-\r
-    void*                      operator new[] (size_t size, IFX_Allocator* pAllocator)\r
-    {\r
-        return operator new(size, pAllocator);\r
-    }\r
-\r
-    void                       operator delete[] (void* p) {}\r
-#ifndef _FX_NO_EXCEPTION_\r
-\r
-    void                       operator delete[] (void* p, IFX_Allocator* pAllocator) {}\r
-#endif\r
-protected:\r
-\r
-    IFX_Allocator*     m_pAllocator;\r
-};\r
-#if defined(_DEBUG)\r
-#define FX_NEWAT(pAllocator) new(pAllocator, __FILE__, __LINE__)\r
-#else\r
-\r
-#define FX_NEWAT(pAllocator) new(pAllocator)\r
-#endif\r
-class CFX_GrowOnlyPool : public IFX_Allocator, public CFX_Object\r
-{\r
-public:\r
-\r
-    CFX_GrowOnlyPool(IFX_Allocator* pAllocator = NULL, size_t trunk_size = 16384);\r
-\r
-    ~CFX_GrowOnlyPool();\r
-\r
-    void       SetAllocator(IFX_Allocator* pAllocator);\r
-\r
-    void       SetTrunkSize(size_t trunk_size)\r
-    {\r
-        m_TrunkSize = trunk_size;\r
-    }\r
-\r
-    void*      AllocDebug(size_t size, FX_LPCSTR file, int line)\r
-    {\r
-        return Alloc(size);\r
-    }\r
-\r
-    void*      Alloc(size_t size);\r
-\r
-    void*      ReallocDebug(void* p, size_t new_size, FX_LPCSTR file, int line)\r
-    {\r
-        return NULL;\r
-    }\r
-\r
-    void*      Realloc(void* p, size_t new_size)\r
-    {\r
-        return NULL;\r
-    }\r
-\r
-    void       Free(void*) {}\r
-\r
-    void       FreeAll();\r
-private:\r
-\r
-    size_t     m_TrunkSize;\r
-\r
-    void*      m_pFirstTrunk;\r
-\r
-    IFX_Allocator*     m_pAllocator;\r
-};\r
-#endif\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-#define FX_FIXEDMEM_PAGESIZE           (4096 * 16)\r
-#define FX_FIXEDMEM_MIDBLOCKSIZE       (4096)\r
-typedef struct _FX_MEMCONFIG {\r
-\r
-    size_t     nPageNum_Init8;\r
-\r
-    size_t     nPageNum_Init16;\r
-\r
-    size_t     nPageNum_Init32;\r
-\r
-    size_t     nPageNum_More16;\r
-\r
-    size_t     nPageNum_More32;\r
-\r
-    size_t     nPageSize_Mid;\r
-\r
-    size_t     nPageNum_InitMid;\r
-\r
-    size_t     nPageNum_MoreMid;\r
-\r
-    size_t     nPageSize_Large;\r
-\r
-    size_t     nPageSize_Alone;\r
-} FX_MEMCONFIG;\r
-void   FXMEM_SetConfig(const FX_MEMCONFIG* memConfig);\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#endif\r
+// 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_H_
+#define _FX_MEMORY_H_
+
+#include "fx_system.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define FX_Alloc(type, size)                                           (type*)calloc(size, sizeof(type))
+#define FX_Realloc(type, ptr, size)                                    (type*)realloc(ptr, sizeof(type) * (size))
+#define FX_AllocNL(type, size)                                         FX_Alloc(type, size)
+#define FX_ReallocNL(type, ptr, size)                          FX_Realloc(type, ptr, size)
+#define FX_Free(ptr)                                                           free(ptr)
+void*  FXMEM_DefaultAlloc(size_t byte_size, int flags);
+void*  FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);
+void   FXMEM_DefaultFree(void* pointer, int flags);
+#ifdef __cplusplus
+}
+#endif
+#ifdef __cplusplus
+class CFX_Object
+{
+public:
+    void*                      operator new (size_t size, FX_LPCSTR file, int line)
+    {
+        return malloc(size);
+    }
+    void                       operator delete (void* p, FX_LPCSTR file, int line)
+    {
+        free(p);
+    }
+    void*                      operator new (size_t size)
+    {
+        return malloc(size);
+    }
+    void                       operator delete (void* p)
+    {
+        free(p);
+    }
+    void*                      operator new[] (size_t size, FX_LPCSTR file, int line)
+    {
+        return malloc(size);
+    }
+    void                       operator delete[] (void* p, FX_LPCSTR file, int line)
+    {
+        free(p);
+    }
+    void*                      operator new[] (size_t size)
+    {
+        return malloc(size);
+    }
+    void                       operator delete[] (void* p)
+    {
+        free(p);
+    }
+    void*                      operator new (size_t, void* buf)
+    {
+        return buf;
+    }
+    void                       operator delete (void*, void*)                                                  {}
+};
+#endif
+#ifdef __cplusplus
+#if defined(_DEBUG)
+#define FX_NEW new(__FILE__, __LINE__)
+#else
+
+#define FX_NEW new
+#endif
+#define FX_NEW_VECTOR(Pointer, Class, Count) \
+    { \
+        Pointer = FX_Alloc(Class, Count); \
+        if (Pointer) { \
+            for (int i = 0; i < (Count); i ++) new (Pointer + i) Class; \
+        } \
+    }
+#define FX_DELETE_VECTOR(Pointer, Class, Count) \
+    { \
+        for (int i = 0; i < (Count); i ++) Pointer[i].~Class(); \
+        FX_Free(Pointer); \
+    }
+class CFX_DestructObject : public CFX_Object
+{
+public:
+
+    virtual ~CFX_DestructObject() {}
+};
+class CFX_GrowOnlyPool : public CFX_Object
+{
+public:
+
+    CFX_GrowOnlyPool(size_t trunk_size = 16384);
+
+    ~CFX_GrowOnlyPool();
+
+    void       SetTrunkSize(size_t trunk_size)
+    {
+        m_TrunkSize = trunk_size;
+    }
+
+    void*      AllocDebug(size_t size, FX_LPCSTR file, int line)
+    {
+        return Alloc(size);
+    }
+
+    void*      Alloc(size_t size);
+
+    void*      ReallocDebug(void* p, size_t new_size, FX_LPCSTR file, int line)
+    {
+        return NULL;
+    }
+
+    void*      Realloc(void* p, size_t new_size)
+    {
+        return NULL;
+    }
+
+    void       Free(void*) {}
+
+    void       FreeAll();
+private:
+
+    size_t     m_TrunkSize;
+
+    void*      m_pFirstTrunk;
+};
+#endif
+#endif