📄 xserializeengine.hpp
字号:
* * Return: * ***/ void readString(XMLCh*& toRead , int& bufferLen = defaultBufferLen , int& dataLen = defaultDataLen , bool toReadBufLen = false); /*** * * Read a stream of XMLByte from the internal buffer. * * Read the bufferLen first if requested, then the length * of the stream followed by the stream. * * Param * toRead: the pointer to the buffer to hold the XMLByte stream * bufferLen: the size of the buffer created * dataLen: the length of the stream * toReadBufLen: specify if the bufferLen need to be read or not * * Return: * ***/ void readString(XMLByte*& toRead , int& bufferLen = defaultBufferLen , int& dataLen = defaultDataLen , bool toReadBufLen = false); /*** * * Check if the template object has been stored or not * * Param * objectPtr: the template object pointer * * Return: true : the object has NOT been stored yet * false : otherwise * ***/ bool needToStoreObject(void* const templateObjectToWrite); /*** * * Check if the template object has been loaded or not * * Param * objectPtr: the address of the template object pointer * * Return: true : the object has NOT been loaded yet * false : otherwise * ***/ bool needToLoadObject(void** templateObjectToRead); /*** * * In the case of needToLoadObject() return true, the client * application needs to instantiate an expected template object, and * register the address to the engine. * * Param * objectPtr: the template object pointer newly instantiated * * Return: * ***/ void registerObject(void* const templateObjectToRegister); /*** * * Insertion operator for serializable classes * ***/ friend XSerializeEngine& operator<<(XSerializeEngine& , XSerializable* const ); /*** * * Insertion operators for * . basic Xerces data types * . built-in types * ***/ XSerializeEngine& operator<<(XMLByte); XSerializeEngine& operator<<(XMLCh); XSerializeEngine& operator<<(char); XSerializeEngine& operator<<(short); XSerializeEngine& operator<<(int); XSerializeEngine& operator<<(unsigned int); XSerializeEngine& operator<<(long); XSerializeEngine& operator<<(unsigned long); XSerializeEngine& operator<<(float); XSerializeEngine& operator<<(double); XSerializeEngine& operator<<(bool); /*** * * Extraction operators for * . basic Xerces data types * . built-in types * ***/ XSerializeEngine& operator>>(XMLByte&); XSerializeEngine& operator>>(XMLCh&); XSerializeEngine& operator>>(char&); XSerializeEngine& operator>>(short&); XSerializeEngine& operator>>(int&); XSerializeEngine& operator>>(unsigned int&); XSerializeEngine& operator>>(long&); XSerializeEngine& operator>>(unsigned long&); XSerializeEngine& operator>>(float&); XSerializeEngine& operator>>(double&); XSerializeEngine& operator>>(bool&);private: // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- XSerializeEngine(); XSerializeEngine(const XSerializeEngine&); XSerializeEngine& operator=(const XSerializeEngine&); /*** * * Store Pool Opertions * ***/ XSerializedObjectId_t lookupStorePool(void* const objectPtr) const; void addStorePool(void* const objectPtr); /*** * * Load Pool Opertions * ***/ XSerializable* lookupLoadPool(XSerializedObjectId_t objectTag) const; void addLoadPool(void* const objectPtr); /*** * * Intenal Buffer Operations * ***/ inline void checkAndFillBuffer(int bytesNeedToRead); inline void checkAndFlushBuffer(int bytesNeedToWrite); void fillBuffer(int bytesNeedToRead); void flushBuffer(); void pumpCount(); /*** * * Helper * ***/ inline void ensureStoring() const; inline void ensureLoading() const; inline void ensureStoreBuffer() const; inline void ensureLoadBuffer() const; inline void ensurePointer(void* const) const; inline void ensureBufferLen(int bufferLen) const; inline void Assert(bool toEval , const XMLExcepts::Codes toThrow) const; inline size_t allignAdjust() const; inline void allignBufCur(); // Make XTemplateSerializer friend of XSerializeEngine so that // we can call lookupStorePool and lookupLoadPool in the case of // annotations. friend class XTemplateSerializer; // ------------------------------------------------------------------------------- // data // // fStoreLoad: // Indicator: storing(serialization) or loading(de-serialization) // // fMemoryManager: // used to allocate memory for internal consumption and/or // allocate memory for object created in de-serialization. // // fInputStream: // Binary stream to read from (de-serialization), provided // by client application, not owned. // // fOutputStream: // Binary stream to write to (serialization), provided // by client application, not owned. // // fBufSize: // The size of the internal buffer // // fBufStart/fBufEnd: // // The internal buffer. // fBufEnd: // one beyond the last valid cell // fBufEnd === (fBufStart + fBufSize) // // fBufCur: // The cursor of the buffer // // fBufLoadMax: // Indicating the end of the valid content in the buffer // // fStorePool: // Object collection for storing // // fLoadPool: // Object collection for loading // // fMapCount: // ------------------------------------------------------------------------------- const short fStoreLoad; MemoryManager* const fMemoryManager; BinInputStream* const fInputStream; BinOutputStream* const fOutputStream; //buffer const unsigned long fBufSize; XMLByte* const fBufStart; XMLByte* const fBufEnd; XMLByte* fBufCur; XMLByte* fBufLoadMax; /*** * Map for storing object * * key: XSerializable* * XProtoType* * * value: XMLInteger*, owned * ***/ RefHashTableOf<XSerializedObjectId>* fStorePool; /*** * Vector for loading object, objects are NOT owned * * data: XSerializable* * XProtoType* * ***/ ValueVectorOf<void*>* fLoadPool; /*** * object counter ***/ XSerializedObjectId_t fObjectCount;};inline bool XSerializeEngine::isStoring() const{ return (fStoreLoad == mode_Store);}inline bool XSerializeEngine::isLoading() const{ return (fStoreLoad == mode_Load);}inline MemoryManager* XSerializeEngine::getMemoryManager() const{ return fMemoryManager;}inline XSerializeEngine& operator<<(XSerializeEngine& serEng , XSerializable* const serObj){ serEng.write(serObj); return serEng; }inline void XSerializeEngine::ensureStoring() const{ Assert(isStoring(), XMLExcepts::XSer_Storing_Violation);}inline void XSerializeEngine::ensureLoading() const{ Assert(isLoading(), XMLExcepts::XSer_Loading_Violation);}inline void XSerializeEngine::Assert(bool toEval , const XMLExcepts::Codes toThrow) const{ if (!toEval) { ThrowXMLwithMemMgr(XSerializationException, toThrow, fMemoryManager); }}// For the following built-in datatype, we assume// the same allignment requirement//// short unsigned short// int unsigned long// long unsigned long// float// double//// Based on the current position (fBufCur), calculated the needed size// to read/write//inline size_t XSerializeEngine::allignAdjust() const{ #ifdef XML_PLATFORM_NEW_BLOCK_ALIGNMENT size_t alignment = XML_PLATFORM_NEW_BLOCK_ALIGNMENT; #else size_t alignment = (sizeof(void*) >= sizeof(double)) ? sizeof(void*) : sizeof(double); #endif size_t remainder = (size_t) fBufCur % alignment; return (remainder == 0) ? 0 : (alignment - remainder);}// Adjust the fBufCurinline void XSerializeEngine::allignBufCur(){ fBufCur+=allignAdjust();}/*** * Ought to be nested class ***/class XSerializedObjectId : public XMemory{public: ~XSerializedObjectId(){};private: inline XSerializedObjectId(XSerializeEngine::XSerializedObjectId_t val): fData(val) { }; inline XSerializeEngine::XSerializedObjectId_t getValue() const {return fData; }; friend class XSerializeEngine;private: // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- XSerializedObjectId(); XSerializedObjectId(const XSerializedObjectId&); XSerializedObjectId& operator=(const XSerializedObjectId&); XSerializeEngine::XSerializedObjectId_t fData;};XERCES_CPP_NAMESPACE_END#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -