Refactor CFX_BasicArray.
[pdfium.git] / core / include / fxcrt / fx_memory.h
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef _FX_MEMORY_H_
8 #define _FX_MEMORY_H_
9 #ifndef _FX_SYSTEM_H_
10 #include "fx_system.h"
11 #endif
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 #define FX_Alloc(type, size)                                            (type*)calloc(size, sizeof(type))
16 #define FX_Realloc(type, ptr, size)                                     (type*)realloc(ptr, sizeof(type) * (size))
17 #define FX_AllocNL(type, size)                                          FX_Alloc(type, size)
18 #define FX_ReallocNL(type, ptr, size)                           FX_Realloc(type, ptr, size)
19 #define FX_Free(ptr)                                                            free(ptr)
20 void*   FXMEM_DefaultAlloc(size_t byte_size, int flags);
21 void*   FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);
22 void    FXMEM_DefaultFree(void* pointer, int flags);
23 #ifdef __cplusplus
24 }
25 #endif
26 #ifdef __cplusplus
27 class CFX_Object
28 {
29 public:
30     void*                       operator new (size_t size, FX_LPCSTR file, int line)
31     {
32         return malloc(size);
33     }
34     void                        operator delete (void* p, FX_LPCSTR file, int line)
35     {
36         free(p);
37     }
38     void*                       operator new (size_t size)
39     {
40         return malloc(size);
41     }
42     void                        operator delete (void* p)
43     {
44         free(p);
45     }
46     void*                       operator new[] (size_t size, FX_LPCSTR file, int line)
47     {
48         return malloc(size);
49     }
50     void                        operator delete[] (void* p, FX_LPCSTR file, int line)
51     {
52         free(p);
53     }
54     void*                       operator new[] (size_t size)
55     {
56         return malloc(size);
57     }
58     void                        operator delete[] (void* p)
59     {
60         free(p);
61     }
62     void*                       operator new (size_t, void* buf)
63     {
64         return buf;
65     }
66     void                        operator delete (void*, void*)                                                  {}
67 };
68 #endif
69 #ifdef __cplusplus
70 #if defined(_DEBUG)
71 #define FX_NEW new(__FILE__, __LINE__)
72 #else
73
74 #define FX_NEW new
75 #endif
76 #define FX_NEW_VECTOR(Pointer, Class, Count) \
77     { \
78         Pointer = FX_Alloc(Class, Count); \
79         if (Pointer) { \
80             for (int i = 0; i < (Count); i ++) new (Pointer + i) Class; \
81         } \
82     }
83 #define FX_DELETE_VECTOR(Pointer, Class, Count) \
84     { \
85         for (int i = 0; i < (Count); i ++) Pointer[i].~Class(); \
86         FX_Free(Pointer); \
87     }
88 class CFX_DestructObject : public CFX_Object
89 {
90 public:
91
92     virtual ~CFX_DestructObject() {}
93 };
94 class CFX_GrowOnlyPool : public CFX_Object
95 {
96 public:
97
98     CFX_GrowOnlyPool(size_t trunk_size = 16384);
99
100     ~CFX_GrowOnlyPool();
101
102     void        SetTrunkSize(size_t trunk_size)
103     {
104         m_TrunkSize = trunk_size;
105     }
106
107     void*       AllocDebug(size_t size, FX_LPCSTR file, int line)
108     {
109         return Alloc(size);
110     }
111
112     void*       Alloc(size_t size);
113
114     void*       ReallocDebug(void* p, size_t new_size, FX_LPCSTR file, int line)
115     {
116         return NULL;
117     }
118
119     void*       Realloc(void* p, size_t new_size)
120     {
121         return NULL;
122     }
123
124     void        Free(void*) {}
125
126     void        FreeAll();
127 private:
128
129     size_t      m_TrunkSize;
130
131     void*       m_pFirstTrunk;
132 };
133 #endif
134 #endif