Revert "Kill CFX_GrowOnlyPool."
authorTom Sepez <tsepez@chromium.org>
Thu, 12 Mar 2015 20:46:38 +0000 (13:46 -0700)
committerTom Sepez <tsepez@chromium.org>
Thu, 12 Mar 2015 20:46:38 +0000 (13:46 -0700)
This reverts commit 090d683489bfa3f36f1e2624c310ff9ca5836038.

Symbol appears in files that are not compiled anywhere, it would seem.
Reverting to remove these first.

TBR=thestig@chromium.org

Review URL: https://codereview.chromium.org/1001023003

core/include/fxcrt/fx_memory.h
core/src/fxcrt/fx_basic_memmgr.cpp

index 8806bba..cb71c04 100644 (file)
@@ -65,9 +65,12 @@ public:
     }
     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) \
@@ -88,5 +91,44 @@ public:
 
     virtual ~CFX_DestructObject() {}
 };
-#endif  // __cplusplus
-#endif  // _FX_MEMORY_H_
+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
index 6538ea6..3b3211c 100644 (file)
@@ -5,12 +5,12 @@
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
 #include "../../include/fxcrt/fx_basic.h"
-
+#ifdef __cplusplus
 extern "C" {
-
+#endif
 void*  FXMEM_DefaultAlloc(size_t byte_size, int flags)
 {
-    return malloc(byte_size);
+    return (void*)malloc(byte_size);
 }
 void*  FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags)
 {
@@ -20,5 +20,50 @@ void FXMEM_DefaultFree(void* pointer, int flags)
 {
     free(pointer);
 }
-
-}  // extern "C"
+#ifdef __cplusplus
+}
+#endif
+CFX_GrowOnlyPool::CFX_GrowOnlyPool(size_t trunk_size)
+{
+    m_TrunkSize = trunk_size;
+    m_pFirstTrunk = NULL;
+}
+CFX_GrowOnlyPool::~CFX_GrowOnlyPool()
+{
+    FreeAll();
+}
+struct _FX_GrowOnlyTrunk {
+    size_t     m_Size;
+    size_t     m_Allocated;
+    _FX_GrowOnlyTrunk* m_pNext;
+};
+void CFX_GrowOnlyPool::FreeAll()
+{
+    _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+    while (pTrunk) {
+        _FX_GrowOnlyTrunk* pNext = pTrunk->m_pNext;
+        FX_Free(pTrunk);
+        pTrunk = pNext;
+    }
+    m_pFirstTrunk = NULL;
+}
+void* CFX_GrowOnlyPool::Alloc(size_t size)
+{
+    size = (size + 3) / 4 * 4;
+    _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+    while (pTrunk) {
+        if (pTrunk->m_Size - pTrunk->m_Allocated >= size) {
+            void* p = (FX_LPBYTE)(pTrunk + 1) + pTrunk->m_Allocated;
+            pTrunk->m_Allocated += size;
+            return p;
+        }
+        pTrunk = pTrunk->m_pNext;
+    }
+    size_t alloc_size = size > m_TrunkSize ? size : m_TrunkSize;
+    pTrunk = (_FX_GrowOnlyTrunk*)FX_Alloc(FX_BYTE, sizeof(_FX_GrowOnlyTrunk) + alloc_size);
+    pTrunk->m_Size = alloc_size;
+    pTrunk->m_Allocated = size;
+    pTrunk->m_pNext = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+    m_pFirstTrunk = pTrunk;
+    return pTrunk + 1;
+}