summaryrefslogtreecommitdiff
path: root/xfa/src/fgas/src/crt/fx_memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fgas/src/crt/fx_memory.h')
-rw-r--r--xfa/src/fgas/src/crt/fx_memory.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/xfa/src/fgas/src/crt/fx_memory.h b/xfa/src/fgas/src/crt/fx_memory.h
new file mode 100644
index 0000000000..9121c32c0f
--- /dev/null
+++ b/xfa/src/fgas/src/crt/fx_memory.h
@@ -0,0 +1,199 @@
+// 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_IMP
+#define _FX_MEMORY_IMP
+class CFX_DefStore;
+class CFX_StaticStore;
+class CFX_FixedStore;
+class CFX_DynamicStore;
+class CFX_DefStore : public IFX_MEMAllocator, public CFX_Target
+{
+public:
+ CFX_DefStore() {}
+ ~CFX_DefStore() {}
+ virtual void Release()
+ {
+ FXTARGET_Delete this;
+ }
+ virtual void* Alloc(size_t size)
+ {
+ return FX_Alloc(FX_BYTE, size);
+ }
+ virtual void Free(void *pBlock)
+ {
+ FX_Free(pBlock);
+ }
+ virtual size_t GetBlockSize() const
+ {
+ return 0;
+ }
+ virtual size_t GetDefChunkSize() const
+ {
+ return 0;
+ }
+ virtual size_t SetDefChunkSize(size_t size)
+ {
+ return 0;
+ }
+ virtual size_t GetCurrentDataSize() const
+ {
+ return 0;
+ }
+};
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(push, 1)
+#endif
+typedef struct _FX_STATICSTORECHUNK {
+ _FX_STATICSTORECHUNK* pNextChunk;
+ size_t iChunkSize;
+ size_t iFreeSize;
+} FX_STATICSTORECHUNK, * FX_LPSTATICSTORECHUNK;
+typedef FX_STATICSTORECHUNK const * FX_LPCSTATICSTORECHUNK;
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(pop)
+#endif
+class CFX_StaticStore : public IFX_MEMAllocator, public CFX_Target
+{
+public:
+ CFX_StaticStore(size_t iDefChunkSize = 4096);
+ ~CFX_StaticStore();
+ virtual void Release()
+ {
+ FXTARGET_Delete this;
+ }
+ virtual void* Alloc(size_t size);
+ virtual void Free(FX_LPVOID pBlock) {}
+ virtual size_t GetBlockSize() const
+ {
+ return 0;
+ }
+ virtual size_t GetDefChunkSize() const
+ {
+ return m_iDefChunkSize;
+ }
+ virtual size_t SetDefChunkSize(size_t size);
+ virtual size_t GetCurrentDataSize() const
+ {
+ return m_iAllocatedSize;
+ }
+protected:
+ size_t m_iAllocatedSize;
+ size_t m_iDefChunkSize;
+ FX_LPSTATICSTORECHUNK m_pChunk;
+ FX_LPSTATICSTORECHUNK m_pLastChunk;
+ FX_LPSTATICSTORECHUNK AllocChunk(size_t size);
+ FX_LPSTATICSTORECHUNK FindChunk(size_t size);
+};
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(push, 1)
+#endif
+typedef struct _FX_FIXEDSTORECHUNK {
+ FX_LPBYTE FirstFlag() const
+ {
+ return (FX_LPBYTE)this + sizeof(_FX_FIXEDSTORECHUNK);
+ }
+ FX_LPBYTE FirstBlock() const
+ {
+ return FirstFlag() + iChunkSize;
+ }
+ _FX_FIXEDSTORECHUNK* pNextChunk;
+ size_t iChunkSize;
+ size_t iFreeNum;
+} FX_FIXEDSTORECHUNK, * FX_LPFIXEDSTORECHUNK;
+typedef FX_FIXEDSTORECHUNK const * FX_LPCFIXEDSTORECHUNK;
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(pop)
+#endif
+class CFX_FixedStore : public IFX_MEMAllocator, public CFX_Target
+{
+public:
+ CFX_FixedStore(size_t iBlockSize, size_t iBlockNumsInChunk);
+ virtual ~CFX_FixedStore();
+ virtual void Release()
+ {
+ FXTARGET_Delete this;
+ }
+ virtual void* Alloc(size_t size);
+ virtual void Free(FX_LPVOID pBlock);
+ virtual size_t GetBlockSize() const
+ {
+ return m_iBlockSize;
+ }
+ virtual size_t GetDefChunkSize() const
+ {
+ return m_iDefChunkSize;
+ }
+ virtual size_t SetDefChunkSize(size_t iChunkSize);
+ virtual size_t GetCurrentDataSize() const
+ {
+ return 0;
+ }
+protected:
+ size_t m_iBlockSize;
+ size_t m_iDefChunkSize;
+ FX_LPFIXEDSTORECHUNK m_pChunk;
+ FX_LPFIXEDSTORECHUNK AllocChunk();
+};
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(push, 1)
+#endif
+typedef struct _FX_DYNAMICSTOREBLOCK {
+ _FX_DYNAMICSTOREBLOCK* NextBlock() const
+ {
+ return (_FX_DYNAMICSTOREBLOCK*)(Data() + iBlockSize);
+ }
+ FX_LPBYTE Data() const
+ {
+ return (FX_LPBYTE)this + sizeof(_FX_DYNAMICSTOREBLOCK);
+ }
+ size_t iBlockSize;
+ FX_BOOL bUsed;
+} FX_DYNAMICSTOREBLOCK, * FX_LPDYNAMICSTOREBLOCK;
+typedef FX_DYNAMICSTOREBLOCK const * FX_LPCDYNAMICSTOREBLOCK;
+typedef struct _FX_DYNAMICSTORECHUNK {
+ FX_LPDYNAMICSTOREBLOCK FirstBlock() const
+ {
+ return (FX_LPDYNAMICSTOREBLOCK)((FX_LPBYTE)this + sizeof(_FX_DYNAMICSTORECHUNK));
+ }
+ _FX_DYNAMICSTORECHUNK* pNextChunk;
+ size_t iChunkSize;
+ size_t iFreeSize;
+} FX_DYNAMICSTORECHUNK, * FX_LPDYNAMICSTORECHUNK;
+typedef FX_DYNAMICSTORECHUNK const * FX_LPCDYNAMICSTORECHUNK;
+#if _FX_OS_ != _FX_ANDROID_
+#pragma pack(pop)
+#endif
+class CFX_DynamicStore : public IFX_MEMAllocator, public CFX_Target
+{
+public:
+ CFX_DynamicStore(size_t iDefChunkSize = 4096);
+ virtual ~CFX_DynamicStore();
+ virtual void Release()
+ {
+ FXTARGET_Delete this;
+ }
+ virtual void* Alloc(size_t size);
+ virtual void Free(FX_LPVOID pBlock);
+ virtual size_t GetBlockSize() const
+ {
+ return 0;
+ }
+ virtual size_t GetDefChunkSize() const
+ {
+ return m_iDefChunkSize;
+ }
+ virtual size_t SetDefChunkSize(size_t size);
+ virtual size_t GetCurrentDataSize() const
+ {
+ return 0;
+ }
+protected:
+ size_t m_iDefChunkSize;
+ FX_LPDYNAMICSTORECHUNK m_pChunk;
+ FX_LPDYNAMICSTORECHUNK AllocChunk(size_t size);
+};
+#endif