📄 xserializeengine.hpp
字号:
* * Param * toRead: the pointer to the buffer to hold the XMLByte stream * bufferLen: the size of the buffer created * * Return: * ***/ inline void readString(XMLByte*& toRead , int& bufferLen); /*** * * 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: * ***/ inline void readString(XMLByte*& toRead); /*** * * 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&); /*** * * Getters * ***/ inline XMLSize_t getBufSize() const; inline XMLSize_t getBufCur() const; inline XMLSize_t getBufCurAccumulated() const; inline XMLSize_t getBufCount() const; void trace(char*) const;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(); void flushBuffer(); void pumpCount(); inline void resetBuffer(); /*** * * 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 XMLSize_t calBytesNeeded(XMLSize_t) const; inline XMLSize_t alignAdjust(XMLSize_t) const; inline void alignBufCur(XMLSize_t); // 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) // // fStorerLevel: // The level of the serialize engine which created the binary // stream that this serialize engine is loading // // It is set by GrammarPool when loading // // fGrammarPool: // Thw owning GrammarPool which instantiate this SerializeEngine // instance // // 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; short fStorerLevel; XMLGrammarPool* const fGrammarPool; BinInputStream* const fInputStream; BinOutputStream* const fOutputStream; XMLSize_t fBufCount; //buffer const XMLSize_t 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; //to allow grammar pool to set storer level when loading friend class XMLGrammarPoolImpl;};inline bool XSerializeEngine::isStoring() const{ return (fStoreLoad == mode_Store);}inline bool XSerializeEngine::isLoading() const{ return (fStoreLoad == mode_Load);}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, getMemoryManager()); }}inline void XSerializeEngine::readString(XMLCh*& toRead , int& bufferLen){ int dummyDataLen; readString(toRead, bufferLen, dummyDataLen);}inline void XSerializeEngine::readString(XMLCh*& toRead){ int dummyBufferLen; int dummyDataLen; readString(toRead, dummyBufferLen, dummyDataLen);}inline void XSerializeEngine::readString(XMLByte*& toRead , int& bufferLen){ int dummyDataLen; readString(toRead, bufferLen, dummyDataLen);}inline void XSerializeEngine::readString(XMLByte*& toRead){ int dummyBufferLen; int dummyDataLen; readString(toRead, dummyBufferLen, dummyDataLen);}inline XMLSize_t XSerializeEngine::getBufSize() const{ return fBufSize;}inline XMLSize_t XSerializeEngine::getBufCur() const{ return XMLSize_t (fBufCur-fBufStart);}inline XMLSize_t XSerializeEngine::getBufCurAccumulated() const{ return (fBufCount - (isStoring() ? 0: 1)) * fBufSize + (fBufCur-fBufStart);}inline XMLSize_t XSerializeEngine::getBufCount() const{ return fBufCount;}inline unsigned short XSerializeEngine::getStorerLevel() const{ return fStorerLevel;}/*** * 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 + -