Merge to XFA: Kill FXSYS_mem{cpy,cmp,set.move}{32,8}.
[pdfium.git] / core / include / fxcrt / fx_basic.h
index 2a77e6e..85ade1a 100644 (file)
@@ -4,20 +4,13 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef _FX_BASIC_H_
-#define _FX_BASIC_H_
-#ifndef _FX_SYSTEM_H_
-#include "fx_system.h"
-#endif
-#ifndef _FX_MEMORY_H_
+#ifndef CORE_INCLUDE_FXCRT_FX_BASIC_H_
+#define CORE_INCLUDE_FXCRT_FX_BASIC_H_
+
 #include "fx_memory.h"
-#endif
-#ifndef _FX_STRING_H_
-#include "fx_string.h"
-#endif
-#ifndef _FX_STREAM_H_
 #include "fx_stream.h"
-#endif
+#include "fx_string.h"
+#include "fx_system.h"
 
 // The FX_ArraySize(arr) macro returns the # of elements in an array arr.
 // The expression is a compile-time constant, and therefore can be
@@ -34,7 +27,7 @@
 template <typename T, size_t N>
 char (&ArraySizeHelper(T (&array)[N]))[N];
 
-class CFX_BinaryBuf : public CFX_Object
+class CFX_BinaryBuf 
 {
 public:
     CFX_BinaryBuf();
@@ -48,14 +41,14 @@ public:
 
     void                                       AppendBlock(const void* pBuf, FX_STRSIZE size);
 
-    void                                       AppendFill(FX_BYTE byte, FX_STRSIZE count);
+    void                                       AppendFill(uint8_t byte, FX_STRSIZE count);
 
-    void                                       AppendString(FX_BSTR str)
+    void                                       AppendString(const CFX_ByteStringC& str)
     {
         AppendBlock(str.GetPtr(), str.GetLength());
     }
 
-    inline void                                AppendByte(FX_BYTE byte)
+    inline void                                AppendByte(uint8_t byte)
     {
         if (m_AllocSize <= m_DataSize) {
             ExpandBuf(1);
@@ -73,7 +66,7 @@ public:
 
     void                                       Delete(int start_index, int count);
 
-    FX_LPBYTE                          GetBuffer() const
+    uint8_t*                           GetBuffer() const
     {
         return m_pBuffer;
     }
@@ -90,7 +83,7 @@ protected:
 
     FX_STRSIZE                         m_AllocStep;
 
-    FX_LPBYTE                          m_pBuffer;
+    uint8_t*                           m_pBuffer;
 
     FX_STRSIZE                         m_DataSize;
 
@@ -102,11 +95,11 @@ class CFX_ByteTextBuf : public CFX_BinaryBuf
 {
 public:
 
-    void                                       operator = (FX_BSTR str);
+    void                                       operator = (const CFX_ByteStringC& str);
 
     void                                       AppendChar(int ch)
     {
-        AppendByte((FX_BYTE)ch);
+        AppendByte((uint8_t)ch);
     }
 
     CFX_ByteTextBuf&           operator << (int i);
@@ -115,7 +108,7 @@ public:
 
     CFX_ByteTextBuf&           operator << (double f);
 
-    CFX_ByteTextBuf&           operator << (FX_BSTR lpsz);
+    CFX_ByteTextBuf&           operator << (const CFX_ByteStringC& lpsz);
 
     CFX_ByteTextBuf&           operator << (const CFX_ByteTextBuf& buf);
 
@@ -128,9 +121,9 @@ class CFX_WideTextBuf : public CFX_BinaryBuf
 {
 public:
 
-    void                                       operator = (FX_LPCWSTR lpsz);
+    void                                       operator = (const FX_WCHAR* lpsz);
 
-    void                                       operator = (FX_WSTR str);
+    void                                       operator = (const CFX_WideStringC& str);
 
     void                                       AppendChar(FX_WCHAR wch);
 
@@ -138,9 +131,9 @@ public:
 
     CFX_WideTextBuf&           operator << (double f);
 
-    CFX_WideTextBuf&           operator << (FX_LPCWSTR lpsz);
+    CFX_WideTextBuf&           operator << (const FX_WCHAR* lpsz);
 
-    CFX_WideTextBuf&           operator << (FX_WSTR str);
+    CFX_WideTextBuf&           operator << (const CFX_WideStringC& str);
     CFX_WideTextBuf&           operator << (const CFX_WideString &str);
 
     CFX_WideTextBuf&           operator << (const CFX_WideTextBuf& buf);
@@ -150,9 +143,9 @@ public:
         return m_DataSize / sizeof(FX_WCHAR);
     }
 
-    FX_LPWSTR                          GetBuffer() const
+    FX_WCHAR*                          GetBuffer() const
     {
-        return (FX_LPWSTR)m_pBuffer;
+        return (FX_WCHAR*)m_pBuffer;
     }
 
     void                                       Delete(int start_index, int count)
@@ -162,12 +155,12 @@ public:
 
     CFX_WideStringC                    GetWideString() const;
 };
-class CFX_ArchiveSaver : public CFX_Object
+class CFX_ArchiveSaver 
 {
 public:
     CFX_ArchiveSaver() : m_pStream(NULL) {}
 
-    CFX_ArchiveSaver&          operator << (FX_BYTE i);
+    CFX_ArchiveSaver&          operator << (uint8_t i);
 
     CFX_ArchiveSaver&          operator << (int i);
 
@@ -177,20 +170,20 @@ public:
 
     CFX_ArchiveSaver&          operator << (double i);
 
-    CFX_ArchiveSaver&          operator << (FX_BSTR bstr);
+    CFX_ArchiveSaver&          operator << (const CFX_ByteStringC& bstr);
 
-    CFX_ArchiveSaver&          operator << (FX_LPCWSTR bstr);
+    CFX_ArchiveSaver&          operator << (const FX_WCHAR* bstr);
 
     CFX_ArchiveSaver&          operator << (const CFX_WideString& wstr);
 
     void                                       Write(const void* pData, FX_STRSIZE dwSize);
 
-    FX_INTPTR                          GetLength()
+    intptr_t                           GetLength()
     {
         return m_SavingBuf.GetSize();
     }
 
-    FX_LPCBYTE                         GetBuffer()
+    const uint8_t*                             GetBuffer()
     {
         return m_SavingBuf.GetBuffer();
     }
@@ -205,13 +198,13 @@ protected:
 
     IFX_FileStream*                    m_pStream;
 };
-class CFX_ArchiveLoader : public CFX_Object
+class CFX_ArchiveLoader 
 {
 public:
 
-    CFX_ArchiveLoader(FX_LPCBYTE pData, FX_DWORD dwSize);
+    CFX_ArchiveLoader(const uint8_t* pData, FX_DWORD dwSize);
 
-    CFX_ArchiveLoader&         operator >> (FX_BYTE& i);
+    CFX_ArchiveLoader&         operator >> (uint8_t& i);
 
     CFX_ArchiveLoader&         operator >> (int& i);
 
@@ -232,7 +225,7 @@ protected:
 
     FX_DWORD                           m_LoadingPos;
 
-    FX_LPCBYTE                         m_pLoadingBuf;
+    const uint8_t*                             m_pLoadingBuf;
 
     FX_DWORD                           m_LoadingSize;
 };
@@ -240,7 +233,7 @@ class IFX_BufferArchive
 {
 public:
     IFX_BufferArchive(FX_STRSIZE size);
-
+    virtual ~IFX_BufferArchive() { }
 
     virtual void                       Clear();
 
@@ -248,14 +241,14 @@ public:
     FX_BOOL                                    Flush();
 
 
-    FX_INT32                           AppendBlock(const void* pBuf, size_t size);
+    int32_t                            AppendBlock(const void* pBuf, size_t size);
 
-    FX_INT32                           AppendByte(FX_BYTE byte);
+    int32_t                            AppendByte(uint8_t byte);
 
-    FX_INT32                           AppendDWord(FX_DWORD i);
+    int32_t                            AppendDWord(FX_DWORD i);
 
 
-    FX_INT32                           AppendString(FX_BSTR lpsz);
+    int32_t                            AppendString(const CFX_ByteStringC& lpsz);
 
 protected:
 
@@ -263,22 +256,22 @@ protected:
 
     FX_STRSIZE                         m_BufSize;
 
-    FX_LPBYTE                          m_pBuffer;
+    uint8_t*                           m_pBuffer;
 
     FX_STRSIZE                         m_Length;
 };
-class CFX_FileBufferArchive : public IFX_BufferArchive, public CFX_Object
+class CFX_FileBufferArchive : public IFX_BufferArchive
 {
 public:
     CFX_FileBufferArchive(FX_STRSIZE size = 32768);
-    ~CFX_FileBufferArchive();
+    ~CFX_FileBufferArchive() override;
     virtual void                       Clear();
 
     FX_BOOL                                    AttachFile(IFX_StreamWrite *pFile, FX_BOOL bTakeover = FALSE);
 
-    FX_BOOL                                    AttachFile(FX_LPCWSTR filename);
+    FX_BOOL                                    AttachFile(const FX_WCHAR* filename);
 
-    FX_BOOL                                    AttachFile(FX_LPCSTR filename);
+    FX_BOOL                                    AttachFile(const FX_CHAR* filename);
 private:
 
     virtual FX_BOOL                    DoWork(const void* pBuf, size_t size);
@@ -289,14 +282,14 @@ private:
 };
 struct CFX_CharMap {
 
-    static CFX_CharMap*                GetDefaultMapper(FX_INT32 codepage = 0);
+    static CFX_CharMap*                GetDefaultMapper(int32_t codepage = 0);
 
 
     CFX_WideString     (*m_GetWideString)(CFX_CharMap* pMap, const CFX_ByteString& bstr);
 
     CFX_ByteString     (*m_GetByteString)(CFX_CharMap* pMap, const CFX_WideString& wstr);
 
-    FX_INT32           (*m_GetCodePage)();
+    int32_t            (*m_GetCodePage)();
 };
 class CFX_UTF8Decoder
 {
@@ -308,7 +301,7 @@ public:
 
     void                       Clear();
 
-    void                       Input(FX_BYTE byte);
+    void                       Input(uint8_t byte);
 
     void                       AppendChar(FX_DWORD ch);
 
@@ -339,7 +332,7 @@ public:
 
     void                       Input(FX_WCHAR unicode);
 
-    void                       AppendStr(FX_BSTR str)
+    void                       AppendStr(const CFX_ByteStringC& str)
     {
         m_UTF16First = 0;
         m_Buffer << str;
@@ -359,7 +352,7 @@ CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl);
 CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl);
 CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI);
 CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI);
-class CFX_BasicArray : public CFX_Object
+class CFX_BasicArray 
 {
 protected:
     CFX_BasicArray(int unit_size);
@@ -372,7 +365,7 @@ protected:
 
     FX_BOOL                    Copy(const CFX_BasicArray& src);
 
-    FX_LPBYTE          InsertSpaceAt(int nIndex, int nCount);
+    uint8_t*           InsertSpaceAt(int nIndex, int nCount);
 
     FX_BOOL                    RemoveAt(int nIndex, int nCount);
 
@@ -381,7 +374,7 @@ protected:
     const void*                GetDataPtr(int index) const;
 protected:
 
-    FX_LPBYTE          m_pData;
+    uint8_t*           m_pData;
 
     int                                m_nSize;
 
@@ -548,13 +541,13 @@ public:
         return -1;
     }
 };
-typedef CFX_ArrayTemplate<FX_BYTE>             CFX_ByteArray;
+typedef CFX_ArrayTemplate<uint8_t>             CFX_ByteArray;
 typedef CFX_ArrayTemplate<FX_WORD>             CFX_WordArray;
 typedef CFX_ArrayTemplate<FX_DWORD>            CFX_DWordArray;
 typedef CFX_ArrayTemplate<void*>               CFX_PtrArray;
 typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray;
 typedef CFX_ArrayTemplate<FX_FLOAT>            CFX_FloatArray;
-typedef CFX_ArrayTemplate<FX_INT32>            CFX_Int32Array;
+typedef CFX_ArrayTemplate<int32_t>             CFX_Int32Array;
 template <class ObjectClass>
 class CFX_ObjectArray : public CFX_BasicArray
 {
@@ -581,12 +574,12 @@ public:
         return InsertSpaceAt(m_nSize, 1);
     }
 
-    FX_INT32           Append(const CFX_ObjectArray& src, FX_INT32 nStart = 0, FX_INT32 nCount = -1)
+    int32_t            Append(const CFX_ObjectArray& src, int32_t nStart = 0, int32_t nCount = -1)
     {
         if (nCount == 0) {
             return 0;
         }
-        FX_INT32 nSize = src.GetSize();
+        int32_t nSize = src.GetSize();
         if (!nSize) {
             return 0;
         }
@@ -604,18 +597,18 @@ public:
         InsertSpaceAt(m_nSize, nCount);
         ObjectClass* pStartObj = (ObjectClass*)GetDataPtr(nSize);
         nSize = nStart + nCount;
-        for (FX_INT32 i = nStart; i < nSize; i ++, pStartObj++) {
+        for (int32_t i = nStart; i < nSize; i ++, pStartObj++) {
             new ((void*)pStartObj) ObjectClass(src[i]);
         }
         return nCount;
     }
 
-    FX_INT32           Copy(const CFX_ObjectArray& src, FX_INT32 nStart = 0, FX_INT32 nCount = -1)
+    int32_t            Copy(const CFX_ObjectArray& src, int32_t nStart = 0, int32_t nCount = -1)
     {
         if (nCount == 0) {
             return 0;
         }
-        FX_INT32 nSize = src.GetSize();
+        int32_t nSize = src.GetSize();
         if (!nSize) {
             return 0;
         }
@@ -633,7 +626,7 @@ public:
         SetSize(nCount);
         ObjectClass* pStartObj = (ObjectClass*)m_pData;
         nSize = nStart + nCount;
-        for (FX_INT32 i = nStart; i < nSize; i ++, pStartObj++) {
+        for (int32_t i = nStart; i < nSize; i ++, pStartObj++) {
             new ((void*)pStartObj) ObjectClass(src[i]);
         }
         return nCount;
@@ -672,7 +665,7 @@ public:
 };
 typedef CFX_ObjectArray<CFX_ByteString> CFX_ByteStringArray;
 typedef CFX_ObjectArray<CFX_WideString> CFX_WideStringArray;
-class CFX_BaseSegmentedArray : public CFX_Object
+class CFX_BaseSegmentedArray 
 {
 public:
     CFX_BaseSegmentedArray(int unit_size = 1, int segment_units = 512, int index_size = 8);
@@ -711,16 +704,16 @@ private:
 
     short                      m_SegmentSize;
 
-    FX_BYTE                    m_IndexSize;
+    uint8_t                    m_IndexSize;
 
-    FX_BYTE                    m_IndexDepth;
+    uint8_t                    m_IndexDepth;
 
     int                                m_DataSize;
 
     void*                      m_pIndex;
     void**     GetIndex(int seg_index) const;
     void*      IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*callback)(void* param, void* pData), void* param) const;
-    void*      IterateSegment(FX_LPCBYTE pSegment, int count, FX_BOOL (*callback)(void* param, void* pData), void* param) const;
+    void*      IterateSegment(const uint8_t* pSegment, int count, FX_BOOL (*callback)(void* param, void* pData), void* param) const;
 };
 template <class ElementType>
 class CFX_SegmentedArray : public CFX_BaseSegmentedArray
@@ -741,7 +734,7 @@ public:
     }
 };
 template <class DataType, int FixedSize>
-class CFX_FixedBufGrow : public CFX_Object
+class CFX_FixedBufGrow 
 {
 public:
     CFX_FixedBufGrow() : m_pData(NULL)
@@ -751,7 +744,7 @@ public:
         if (data_size > FixedSize) {
             m_pData = FX_Alloc(DataType, data_size);
         } else {
-            FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize);
+            FXSYS_memset(m_Data, 0, sizeof(DataType)*FixedSize);
         }
     }
     void SetDataSize(int data_size)
@@ -763,7 +756,7 @@ public:
         if (data_size > FixedSize) {
             m_pData = FX_Alloc(DataType, data_size);
         } else {
-            FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize);
+            FXSYS_memset(m_Data, 0, sizeof(DataType)*FixedSize);
         }
     }
     ~CFX_FixedBufGrow()
@@ -780,33 +773,7 @@ private:
     DataType           m_Data[FixedSize];
     DataType*          m_pData;
 };
-template <class DataType>
-class CFX_TempBuf
-{
-public:
-    CFX_TempBuf(int size)
-    {
-        m_pData = FX_Alloc(DataType, size);
-    }
-    ~CFX_TempBuf()
-    {
-        if (m_pData) {
-            FX_Free(m_pData);
-        }
-    }
-    DataType&  operator[](int i)
-    {
-        FXSYS_assert(m_pData != NULL);
-        return m_pData[i];
-    }
-    operator DataType*()
-    {
-        return m_pData;
-    }
-private:
-    DataType*          m_pData;
-};
-class CFX_MapPtrToPtr : public CFX_Object
+class CFX_MapPtrToPtr 
 {
 protected:
 
@@ -891,27 +858,27 @@ public:
 
     FX_BOOL    Lookup(KeyType key, ValueType& rValue) const
     {
-        FX_LPVOID pValue = NULL;
-        if (!CFX_MapPtrToPtr::Lookup((void*)(FX_UINTPTR)key, pValue)) {
+        void* pValue = NULL;
+        if (!CFX_MapPtrToPtr::Lookup((void*)(uintptr_t)key, pValue)) {
             return FALSE;
         }
-        rValue = (ValueType)(FX_UINTPTR)pValue;
+        rValue = (ValueType)(uintptr_t)pValue;
         return TRUE;
     }
 
     ValueType& operator[](KeyType key)
     {
-        return (ValueType&)CFX_MapPtrToPtr::operator []((void*)(FX_UINTPTR)key);
+        return (ValueType&)CFX_MapPtrToPtr::operator []((void*)(uintptr_t)key);
     }
 
     void SetAt(KeyType key, ValueType newValue)
     {
-        CFX_MapPtrToPtr::SetAt((void*)(FX_UINTPTR)key, (void*)(FX_UINTPTR)newValue);
+        CFX_MapPtrToPtr::SetAt((void*)(uintptr_t)key, (void*)(uintptr_t)newValue);
     }
 
     FX_BOOL    RemoveKey(KeyType key)
     {
-        return CFX_MapPtrToPtr::RemoveKey((void*)(FX_UINTPTR)key);
+        return CFX_MapPtrToPtr::RemoveKey((void*)(uintptr_t)key);
     }
 
     void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey, ValueType& rValue) const
@@ -919,11 +886,11 @@ public:
         void* pKey = NULL;
         void* pValue = NULL;
         CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue);
-        rKey = (KeyType)(FX_UINTPTR)pKey;
-        rValue = (ValueType)(FX_UINTPTR)pValue;
+        rKey = (KeyType)(uintptr_t)pKey;
+        rValue = (ValueType)(uintptr_t)pValue;
     }
 };
-class CFX_CMapDWordToDWord : public CFX_Object
+class CFX_CMapDWordToDWord 
 {
 public:
 
@@ -940,7 +907,7 @@ protected:
 
     CFX_BinaryBuf      m_Buffer;
 };
-class CFX_MapByteStringToPtr : public CFX_Object
+class CFX_MapByteStringToPtr 
 {
 protected:
 
@@ -967,16 +934,16 @@ public:
         return m_nCount == 0;
     }
 
-    FX_BOOL Lookup(FX_BSTR key, void*& rValue) const;
+    FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
 
-    void*& operator[](FX_BSTR key);
+    void*& operator[](const CFX_ByteStringC& key);
 
-    void SetAt(FX_BSTR key, void* newValue)
+    void SetAt(const CFX_ByteStringC& key, void* newValue)
     {
         (*this)[key] = newValue;
     }
 
-    FX_BOOL RemoveKey(FX_BSTR key);
+    FX_BOOL RemoveKey(const CFX_ByteStringC& key);
 
     void RemoveAll();
 
@@ -987,7 +954,7 @@ public:
 
     void GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;
 
-    FX_LPVOID          GetNextValue(FX_POSITION& rNextPosition) const;
+    void*              GetNextValue(FX_POSITION& rNextPosition) const;
 
     FX_DWORD GetHashTableSize() const
     {
@@ -996,7 +963,7 @@ public:
 
     void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
 
-    FX_DWORD HashKey(FX_BSTR key) const;
+    FX_DWORD HashKey(const CFX_ByteStringC& key) const;
 protected:
 
     CAssoc** m_pHashTable;
@@ -1015,12 +982,12 @@ protected:
 
     void FreeAssoc(CAssoc* pAssoc);
 
-    CAssoc* GetAssocAt(FX_BSTR key, FX_DWORD& hash) const;
+    CAssoc* GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& hash) const;
 public:
 
     ~CFX_MapByteStringToPtr();
 };
-class CFX_CMapByteStringToPtr : public CFX_Object
+class CFX_CMapByteStringToPtr 
 {
 public:
     CFX_CMapByteStringToPtr();
@@ -1033,22 +1000,22 @@ public:
 
     void                       GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;
 
-    FX_LPVOID          GetNextValue(FX_POSITION& rNextPosition) const;
+    void*              GetNextValue(FX_POSITION& rNextPosition) const;
 
-    FX_BOOL                    Lookup(FX_BSTR key, void*& rValue) const;
+    FX_BOOL                    Lookup(const CFX_ByteStringC& key, void*& rValue) const;
 
-    void                       SetAt(FX_BSTR key, void* value);
+    void                       SetAt(const CFX_ByteStringC& key, void* value);
 
-    void                       RemoveKey(FX_BSTR key);
+    void                       RemoveKey(const CFX_ByteStringC& key);
 
     int                                GetCount() const;
 
-    void                       AddValue(FX_BSTR key, void* pValue);
+    void                       AddValue(const CFX_ByteStringC& key, void* pValue);
 private:
 
     CFX_BaseSegmentedArray                     m_Buffer;
 };
-class CFX_PtrList : public CFX_Object
+class CFX_PtrList 
 {
 protected:
 
@@ -1148,14 +1115,14 @@ public:
 
     ~CFX_PtrList();
 };
-typedef void (*PD_CALLBACK_FREEDATA)(FX_LPVOID pData);
+typedef void (*PD_CALLBACK_FREEDATA)(void* pData);
 struct FX_PRIVATEDATA {
 
     void                                       FreeData();
 
-    FX_LPVOID                          m_pModuleId;
+    void*                              m_pModuleId;
 
-    FX_LPVOID                          m_pData;
+    void*                              m_pData;
 
     PD_CALLBACK_FREEDATA       m_pCallback;
 
@@ -1169,13 +1136,13 @@ public:
 
     void                                       ClearAll();
 
-    void                                       SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);
+    void                                       SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback);
 
-    void                                       SetPrivateObj(FX_LPVOID module_id, CFX_DestructObject* pObj);
+    void                                       SetPrivateObj(void* module_id, CFX_DestructObject* pObj);
 
-    FX_LPVOID                          GetPrivateData(FX_LPVOID module_id);
+    void*                              GetPrivateData(void* module_id);
 
-    FX_BOOL                                    LookupPrivateData(FX_LPVOID module_id, FX_LPVOID &pData) const
+    FX_BOOL                                    LookupPrivateData(void* module_id, void* &pData) const
     {
         if (!module_id) {
             return FALSE;
@@ -1190,18 +1157,18 @@ public:
         return FALSE;
     }
 
-    FX_BOOL                                    RemovePrivateData(FX_LPVOID module_id);
+    FX_BOOL                                    RemovePrivateData(void* module_id);
 protected:
 
     CFX_ArrayTemplate<FX_PRIVATEDATA>  m_DataList;
 
-    void                                       AddData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback, FX_BOOL bSelfDestruct);
+    void                                       AddData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback, FX_BOOL bSelfDestruct);
 };
-class CFX_BitStream : public CFX_Object
+class CFX_BitStream 
 {
 public:
 
-    void                               Init(FX_LPCBYTE pData, FX_DWORD dwSize);
+    void                               Init(const uint8_t* pData, FX_DWORD dwSize);
 
 
     FX_DWORD                   GetBits(FX_DWORD nBits);
@@ -1228,9 +1195,9 @@ protected:
 
     FX_DWORD                   m_BitSize;
 
-    FX_LPCBYTE                 m_pData;
+    const uint8_t*                     m_pData;
 };
-template <class ObjClass> class CFX_CountRef : public CFX_Object
+template <class ObjClass> class CFX_CountRef 
 {
 public:
 
@@ -1377,10 +1344,10 @@ protected:
 class IFX_Pause
 {
 public:
-
+    virtual ~IFX_Pause() { }
     virtual FX_BOOL    NeedToPauseNow() = 0;
 };
-class CFX_DataFilter : public CFX_Object
+class CFX_DataFilter 
 {
 public:
 
@@ -1398,13 +1365,13 @@ public:
         return m_SrcPos;
     }
 
-    void                       FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
+    void                       FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
 
     void                       FilterFinish(CFX_BinaryBuf& dest_buf);
 protected:
 
     CFX_DataFilter();
-    virtual void       v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
+    virtual void       v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
     virtual void       v_FilterFinish(CFX_BinaryBuf& dest_buf) = 0;
     void                       ReportEOF(FX_DWORD left_input);
 
@@ -1414,6 +1381,21 @@ protected:
 
     CFX_DataFilter*    m_pDestFilter;
 };
+
+template<typename T>
+class CFX_AutoRestorer {
+public:
+    explicit CFX_AutoRestorer(T* location) {
+      m_Location = location;
+      m_OldValue = *location;
+    }
+    ~CFX_AutoRestorer() { *m_Location = m_OldValue; }
+
+private:
+  T* m_Location;
+  T m_OldValue;
+};
+
 template <class T>
 class CFX_SmartPointer
 {
@@ -1423,7 +1405,7 @@ public:
     {
         m_pObj->Release();
     }
-    operator T*(void)
+    T* Get(void)
     {
         return m_pObj;
     }
@@ -1440,16 +1422,16 @@ protected:
 };
 #define FX_DATALIST_LENGTH     1024
 template<size_t unit>
-class CFX_SortListArray : public CFX_Object
+class CFX_SortListArray 
 {
 protected:
 
     struct DataList {
 
-        FX_INT32       start;
+        int32_t        start;
 
-        FX_INT32       count;
-        FX_LPBYTE      data;
+        int32_t        count;
+        uint8_t*       data;
     };
 public:
 
@@ -1463,7 +1445,7 @@ public:
 
     void                       Clear()
     {
-        for (FX_INT32 i = m_DataLists.GetUpperBound(); i >= 0; i--) {
+        for (int32_t i = m_DataLists.GetUpperBound(); i >= 0; i--) {
             DataList list = m_DataLists.ElementAt(i);
             if (list.data) {
                 FX_Free(list.data);
@@ -1473,18 +1455,15 @@ public:
         m_CurList = 0;
     }
 
-    void                       Append(FX_INT32 nStart, FX_INT32 nCount)
+    void                       Append(int32_t nStart, int32_t nCount)
     {
         if (nStart < 0) {
             return;
         }
         while (nCount > 0) {
-            FX_INT32 temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH);
+            int32_t temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH);
             DataList list;
-            list.data = FX_Alloc(FX_BYTE, temp_count * unit);
-            if (!list.data) {
-                break;
-            }
+            list.data = FX_Alloc2D(uint8_t, temp_count, unit);
             list.start = nStart;
             list.count = temp_count;
             Append(list);
@@ -1493,7 +1472,7 @@ public:
         }
     }
 
-    FX_LPBYTE          GetAt(FX_INT32 nIndex)
+    uint8_t*           GetAt(int32_t nIndex)
     {
         if (nIndex < 0) {
             return NULL;
@@ -1504,9 +1483,9 @@ public:
         DataList *pCurList = m_DataLists.GetDataPtr(m_CurList);
         if (!pCurList || nIndex < pCurList->start || nIndex >= pCurList->start + pCurList->count) {
             pCurList = NULL;
-            FX_INT32 iStart = 0;
-            FX_INT32 iEnd = m_DataLists.GetUpperBound();
-            FX_INT32 iMid = 0;
+            int32_t iStart = 0;
+            int32_t iEnd = m_DataLists.GetUpperBound();
+            int32_t iMid = 0;
             while (iStart <= iEnd) {
                 iMid = (iStart + iEnd) / 2;
                 DataList* list = m_DataLists.GetDataPtr(iMid);
@@ -1526,11 +1505,11 @@ public:
 protected:
     void                       Append(const DataList& list)
     {
-        FX_INT32 iStart = 0;
-        FX_INT32 iEnd = m_DataLists.GetUpperBound();
-        FX_INT32 iFind = 0;
+        int32_t iStart = 0;
+        int32_t iEnd = m_DataLists.GetUpperBound();
+        int32_t iFind = 0;
         while (iStart <= iEnd) {
-            FX_INT32 iMid = (iStart + iEnd) / 2;
+            int32_t iMid = (iStart + iEnd) / 2;
             DataList* cur_list = m_DataLists.GetDataPtr(iMid);
             if (list.start < cur_list->start + cur_list->count) {
                 iEnd = iMid - 1;
@@ -1550,11 +1529,11 @@ protected:
         }
         m_DataLists.InsertAt(iFind, list);
     }
-    FX_INT32           m_CurList;
+    int32_t            m_CurList;
     CFX_ArrayTemplate<DataList>        m_DataLists;
 };
 template<typename T1, typename T2>
-class CFX_ListArrayTemplate : public CFX_Object
+class CFX_ListArrayTemplate 
 {
 public:
 
@@ -1563,19 +1542,19 @@ public:
         m_Data.Clear();
     }
 
-    void                       Add(FX_INT32 nStart, FX_INT32 nCount)
+    void                       Add(int32_t nStart, int32_t nCount)
     {
         m_Data.Append(nStart, nCount);
     }
 
-    T2&                                operator [] (FX_INT32 nIndex)
+    T2&                                operator [] (int32_t nIndex)
     {
-        FX_LPBYTE data = m_Data.GetAt(nIndex);
+        uint8_t* data = m_Data.GetAt(nIndex);
         FXSYS_assert(data != NULL);
         return (T2&)(*(volatile T2*)data);
     }
 
-    T2*                                GetPtrAt(FX_INT32 nIndex)
+    T2*                                GetPtrAt(int32_t nIndex)
     {
         return (T2*)m_Data.GetAt(nIndex);
     }
@@ -1602,7 +1581,7 @@ public:
 };
 #define FX_IsOdd(a)    ((a) & 1)
 
-class CFX_Vector_3by1 : public CFX_Object
+class CFX_Vector_3by1 
 {
 public:
 
@@ -1618,7 +1597,7 @@ public:
     FX_FLOAT b;
     FX_FLOAT c;
 };
-class CFX_Matrix_3by3 : public CFX_Object
+class CFX_Matrix_3by3 
 {
 public:
 
@@ -1647,4 +1626,4 @@ public:
     FX_FLOAT i;
 };
 
-#endif
+#endif  // CORE_INCLUDE_FXCRT_FX_BASIC_H_