Index: core/include/fxcrt/fx_basic.h |
diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h |
index c5bb570fcabd06c4bbf763a68172144850f4a052..710bbcc3c3ac3a62c67690a5f92cd2d7d8a16855 100644 |
--- a/core/include/fxcrt/fx_basic.h |
+++ b/core/include/fxcrt/fx_basic.h |
@@ -130,6 +130,70 @@ class CFX_WideTextBuf : public CFX_BinaryBuf { |
CFX_WideStringC GetWideString() const; |
}; |
+#ifdef PDF_ENABLE_XFA |
+class CFX_ArchiveSaver { |
+ public: |
+ CFX_ArchiveSaver() : m_pStream(NULL) {} |
+ |
+ CFX_ArchiveSaver& operator<<(uint8_t i); |
+ |
+ CFX_ArchiveSaver& operator<<(int i); |
+ |
+ CFX_ArchiveSaver& operator<<(FX_DWORD i); |
+ |
+ CFX_ArchiveSaver& operator<<(FX_FLOAT i); |
+ |
+ CFX_ArchiveSaver& operator<<(double i); |
+ |
+ CFX_ArchiveSaver& operator<<(const CFX_ByteStringC& bstr); |
+ |
+ CFX_ArchiveSaver& operator<<(const FX_WCHAR* bstr); |
+ |
+ CFX_ArchiveSaver& operator<<(const CFX_WideString& wstr); |
+ |
+ void Write(const void* pData, FX_STRSIZE dwSize); |
+ |
+ intptr_t GetLength() { return m_SavingBuf.GetSize(); } |
+ |
+ const uint8_t* GetBuffer() { return m_SavingBuf.GetBuffer(); } |
+ |
+ void SetStream(IFX_FileStream* pStream) { m_pStream = pStream; } |
+ |
+ protected: |
+ CFX_BinaryBuf m_SavingBuf; |
+ |
+ IFX_FileStream* m_pStream; |
+}; |
+class CFX_ArchiveLoader { |
+ public: |
+ CFX_ArchiveLoader(const uint8_t* pData, FX_DWORD dwSize); |
+ |
+ CFX_ArchiveLoader& operator>>(uint8_t& i); |
+ |
+ CFX_ArchiveLoader& operator>>(int& i); |
+ |
+ CFX_ArchiveLoader& operator>>(FX_DWORD& i); |
+ |
+ CFX_ArchiveLoader& operator>>(FX_FLOAT& i); |
+ |
+ CFX_ArchiveLoader& operator>>(double& i); |
+ |
+ CFX_ArchiveLoader& operator>>(CFX_ByteString& bstr); |
+ |
+ CFX_ArchiveLoader& operator>>(CFX_WideString& wstr); |
+ |
+ FX_BOOL IsEOF(); |
+ |
+ FX_BOOL Read(void* pBuf, FX_DWORD dwSize); |
+ |
+ protected: |
+ FX_DWORD m_LoadingPos; |
+ |
+ const uint8_t* m_pLoadingBuf; |
+ |
+ FX_DWORD m_LoadingSize; |
+}; |
+#endif |
class IFX_BufferArchive { |
public: |
@@ -374,6 +438,10 @@ 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; |
+#ifdef PDF_ENABLE_XFA |
+typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; |
+typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array; |
+#endif |
template <class ObjectClass> |
class CFX_ObjectArray : public CFX_BasicArray { |
@@ -634,7 +702,46 @@ class CFX_MapPtrToPtr { |
CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const; |
}; |
+#ifdef PDF_ENABLE_XFA |
+template <class KeyType, class ValueType> |
+class CFX_MapPtrTemplate : public CFX_MapPtrToPtr { |
+ public: |
+ CFX_MapPtrTemplate() : CFX_MapPtrToPtr(10) {} |
+ |
+ FX_BOOL Lookup(KeyType key, ValueType& rValue) const { |
+ void* pValue = NULL; |
+ if (!CFX_MapPtrToPtr::Lookup((void*)(uintptr_t)key, pValue)) { |
+ return FALSE; |
+ } |
+ rValue = (ValueType)(uintptr_t)pValue; |
+ return TRUE; |
+ } |
+ |
+ ValueType& operator[](KeyType key) { |
+ return (ValueType&)CFX_MapPtrToPtr::operator[]((void*)(uintptr_t)key); |
+ } |
+ |
+ void SetAt(KeyType key, ValueType newValue) { |
+ CFX_MapPtrToPtr::SetAt((void*)(uintptr_t)key, (void*)(uintptr_t)newValue); |
+ } |
+ |
+ FX_BOOL RemoveKey(KeyType key) { |
+ return CFX_MapPtrToPtr::RemoveKey((void*)(uintptr_t)key); |
+ } |
+#endif |
+#ifdef PDF_ENABLE_XFA |
+ void GetNextAssoc(FX_POSITION& rNextPosition, |
+ KeyType& rKey, |
+ ValueType& rValue) const { |
+ void* pKey = NULL; |
+ void* pValue = NULL; |
+ CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue); |
+ rKey = (KeyType)(uintptr_t)pKey; |
+ rValue = (ValueType)(uintptr_t)pValue; |
+ } |
+}; |
+#endif |
class CFX_CMapByteStringToPtr { |
public: |
CFX_CMapByteStringToPtr(); |
@@ -1088,6 +1195,15 @@ typedef enum { |
} FX_ProgressiveStatus; |
#define ProgressiveStatus FX_ProgressiveStatus |
#define FX_NAMESPACE_DECLARE(namespace, type) namespace ::type |
+#ifdef PDF_ENABLE_XFA |
+class IFX_Unknown { |
+ public: |
+ virtual ~IFX_Unknown() {} |
+ virtual FX_DWORD Release() = 0; |
+ virtual FX_DWORD AddRef() = 0; |
+}; |
+#define FX_IsOdd(a) ((a)&1) |
+#endif |
class CFX_Vector_3by1 { |
public: |