8806bba7dde6ede6336b91c480efe11e9f63318a
[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 #if defined(_DEBUG)
69 #define FX_NEW new(__FILE__, __LINE__)
70 #else
71 #define FX_NEW new
72 #endif
73 #define FX_NEW_VECTOR(Pointer, Class, Count) \
74     { \
75         Pointer = FX_Alloc(Class, Count); \
76         if (Pointer) { \
77             for (int i = 0; i < (Count); i ++) new (Pointer + i) Class; \
78         } \
79     }
80 #define FX_DELETE_VECTOR(Pointer, Class, Count) \
81     { \
82         for (int i = 0; i < (Count); i ++) Pointer[i].~Class(); \
83         FX_Free(Pointer); \
84     }
85 class CFX_DestructObject : public CFX_Object
86 {
87 public:
88
89     virtual ~CFX_DestructObject() {}
90 };
91 #endif  // __cplusplus
92 #endif  // _FX_MEMORY_H_