⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xserializeengine.hpp

📁 基于属性证书的访问控制源代码,由c++编写,包括openssl,xercesc等
💻 HPP
📖 第 1 页 / 共 2 页
字号:
      *      *  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 + -