xtemplateserializer.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,995 行 · 第 1/4 页

CPP
1,995
字号
{     if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        int itemNumber = 0;        RefHash2KeysTableOfEnumerator<SchemaAttDef> e(objToStore, false, objToStore->getMemoryManager());        while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XMLCh*     key1;            int        key2;                       e.nextElementKey((void*&)key1, key2);            SchemaAttDef* data = objToStore->get(key1, key2);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHash2KeysTableOf<SchemaAttDef>** objToLoad                                   , int                                                                    , bool                                toAdopt                                   , XSerializeEngine&                   serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                             RefHash2KeysTableOf<SchemaAttDef>(                                                               hashModulus                                                             , toAdopt                                                             , serEng.getMemoryManager()                                                             );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                           SchemaAttDef*  data;            serEng>>data;            XMLCh* key1 = data->getAttName()->getLocalPart();            int    key2 = data->getAttName()->getURI();            //key2==data->getId()            (*objToLoad)->put((void*)key1, key2, data);                }    }}void XTemplateSerializer::storeObject(RefHash2KeysTableOf<ElemVector>* const objToStore                                    , XSerializeEngine&                      serEng){    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        int itemNumber = 0;        RefHash2KeysTableOfEnumerator<ElemVector> e(objToStore, false, objToStore->getMemoryManager());        while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XMLCh*     key1;            int        key2;                        e.nextElementKey((void*&)key1, key2);            serEng.writeString(key1);            serEng<<key2;            ElemVector* data = objToStore->get(key1, key2);            storeObject(data, serEng);        }    }}void XTemplateSerializer::loadObject(RefHash2KeysTableOf<ElemVector>**      objToLoad                                   , int                                                                        , bool                                    toAdopt                                   , XSerializeEngine&                       serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                             RefHash2KeysTableOf<ElemVector>(                                                               hashModulus                                                             , toAdopt                                                             , serEng.getMemoryManager()                                                             );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                           XMLCh*      key1;            serEng.readString(key1);            int         key2;            serEng>>key2;            ElemVector*  data = 0;            //don't call destructor            loadObject(&data, 8, false, serEng);            /***             *             *  There must be one element in the vector whose             *  susbititutionGroupElem matches the (key1,key2)             *             ***/                        // bool FOUND=false;            int vectorSize = data->size();            for ( int i = 0; i < vectorSize; i++)            {                            SchemaElementDecl*& elem   = data->elementAt(i);                SchemaElementDecl*  subElem = elem->getSubstitutionGroupElem();                XMLCh* elemName = subElem->getBaseName();                int    uri      = subElem->getURI();                if (XMLString::equals(elemName, key1) &&                     (uri == key2)                       )                {                    //release the temp                     serEng.getMemoryManager()->deallocate(key1);                    key1 = elemName;                    //FOUND=true;                    break;                }            }            /***             * if (!FOUND)             * {             *     throw exception             * }             ***/            (*objToLoad)->put((void*)key1, key2, data);                }    }}/********************************************************** * * RefHash3KeysIdPool * *   SchemaElementDecl * ***********************************************************/void XTemplateSerializer::storeObject(RefHash3KeysIdPool<SchemaElementDecl>* const objToStore                                    , XSerializeEngine&                            serEng){    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        int itemNumber = 0;        RefHash3KeysIdPoolEnumerator<SchemaElementDecl> e(objToStore, false, objToStore->getMemoryManager());        XMLCh*     key1;        int        key2;        int        key3;        while (e.hasMoreKeys())        {            e.nextElementKey((void*&)key1, key2, key3);            itemNumber++;        }        serEng<<itemNumber;        e.resetKey();        while (e.hasMoreKeys())        {                       e.nextElementKey((void*&)key1, key2, key3);            SchemaElementDecl* data = objToStore->getByKey(key1, key2, key3);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHash3KeysIdPool<SchemaElementDecl>** objToLoad                                   , int                                                                        , bool                                    toAdopt                                   , int                                     initSize2                                   , XSerializeEngine&                       serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHash3KeysIdPool<SchemaElementDecl>(                                                                   hashModulus                                                                 , toAdopt                                                                 , initSize2                                                                 , serEng.getMemoryManager());        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                                   SchemaElementDecl*  elemDecl;            serEng>>elemDecl;                    	                       (*objToLoad)->put(elemDecl->getBaseName()                            , elemDecl->getURI()                            , elemDecl->getEnclosingScope()                            , elemDecl);        }       }}/********************************************************** * * NameIdPool              *    no NameIdPool::nextElementKey() * *   DTDElementDecl *   DTDEntityDecl *   XMLNotationDecl * ***********************************************************/void XTemplateSerializer::storeObject(NameIdPool<DTDElementDecl>* const objToStore                                    , XSerializeEngine&                 serEng){    if (serEng.needToStoreObject(objToStore))    {        int itemNumber = 0;        NameIdPoolEnumerator<DTDElementDecl> e(objToStore, objToStore->getMemoryManager());        while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            DTDElementDecl& data = e.nextElement();            data.serialize(serEng);        }    }}void XTemplateSerializer::loadObject(NameIdPool<DTDElementDecl>** objToLoad                                   , int                          initSize                                   , int                          initSize2                                   , XSerializeEngine&            serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             NameIdPool<DTDElementDecl>(                                                        initSize                                                      , initSize2                                                      , serEng.getMemoryManager()                                                      );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                           DTDElementDecl*  data = new (serEng.getMemoryManager())                                    DTDElementDecl(serEng.getMemoryManager());            data->serialize(serEng);            (*objToLoad)->put(data);        }       }}void XTemplateSerializer::storeObject(NameIdPool<DTDEntityDecl>* const objToStore                                    , XSerializeEngine&                 serEng){    if (serEng.needToStoreObject(objToStore))    {        int itemNumber = 0;        NameIdPoolEnumerator<DTDEntityDecl> e(objToStore, objToStore->getMemoryManager());        while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            DTDEntityDecl& data = e.nextElement();            data.serialize(serEng);        }    }}void XTemplateSerializer::loadObject(NameIdPool<DTDEntityDecl>** objToLoad                                   , int                          initSize                                   , int                          initSize2                                   , XSerializeEngine&            serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                              NameIdPool<DTDEntityDecl>(                                                       initSize                                                     , initSize2                                                     , serEng.getMemoryManager()                                                     );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                           DTDEntityDecl*  data = new (serEng.getMemoryManager())                                    DTDEntityDecl(serEng.getMemoryManager());            data->serialize(serEng);            (*objToLoad)->put(data);        }       }}void XTemplateSerializer::storeObject(NameIdPool<XMLNotationDecl>* const objToStore                                    , XSerializeEngine&                  serEng){    if (serEng.needToStoreObject(objToStore))    {        int itemNumber = 0;        NameIdPoolEnumerator<XMLNotationDecl> e(objToStore, objToStore->getMemoryManager());        while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XMLNotationDecl& data = e.nextElement();            data.serialize(serEng);        }    }}void XTemplateSerializer::loadObject(NameIdPool<XMLNotationDecl>** objToLoad                                   , int                          initSize                                   , int                          initSize2                                   , XSerializeEngine&            serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                              NameIdPool<XMLNotationDecl>(                                                         initSize                                                       , initSize2                                                       , serEng.getMemoryManager()                                                       );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                           XMLNotationDecl*  data = new (serEng.getMemoryManager())                                      XMLNotationDecl(serEng.getMemoryManager());            data->serialize(serEng);            (*objToLoad)->put(data);        }       }}XERCES_CPP_NAMESPACE_END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?