xtemplateserializer.cpp

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

CPP
1,995
字号
        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            ComplexTypeInfo*  data;            serEng>>data;           (*objToLoad)->put((void*)data->getTypeName(), data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<XercesGroupInfo>* const objToStore                                    , XSerializeEngine&                      serEng)                                          {    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<XercesGroupInfo> e(objToStore, false, objToStore->getMemoryManager());        int itemNumber = 0;                while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XMLCh*       key = (XMLCh*) e.nextElementKey();                       unsigned int id  = serEng.getStringPool()->getId(key);                                   // key = StringPool->getValueForId(XercesGroupInfo::getNameSpaceId())            //     + chComma            //     + StringPool->getValueForId(XercesGroupInfo::getNameId())           //           // and the key is guranteed in the StringPool           //           //           //  if (id == 0)           //  {           //      throw exception            //   }           //            serEng<<id;                        XercesGroupInfo* data = objToStore->get(key);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<XercesGroupInfo>** objToLoad                                   , int                                                                  , bool                              toAdopt                                   , XSerializeEngine&                 serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<XercesGroupInfo>(                                                             hashModulus                                                           , toAdopt                                                           , serEng.getMemoryManager()                                                           );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            unsigned int id;            serEng>>id;            XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(id);                        XercesGroupInfo*  data;            serEng>>data;            (*objToLoad)->put((void*)key, data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<XercesAttGroupInfo>* const objToStore                                    , XSerializeEngine&                         serEng)                                          {    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<XercesAttGroupInfo> e(objToStore, false, objToStore->getMemoryManager());        int itemNumber = 0;                while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XercesAttGroupInfo* data = objToStore->get(e.nextElementKey());                        serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<XercesAttGroupInfo>** objToLoad                                   , int                                                                     , bool                                 toAdopt                                   , XSerializeEngine&                    serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<XercesAttGroupInfo>(                                                                hashModulus                                                              , toAdopt                                                              , serEng.getMemoryManager()                                                              );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            XercesAttGroupInfo*  data;            serEng>>data;           XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(data->getNameId());                      (*objToLoad)->put((void*)key, data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<XMLRefInfo>* const objToStore                                    , XSerializeEngine&                 serEng)                                          {    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<XMLRefInfo> e(objToStore, false, objToStore->getMemoryManager());        int itemNumber = 0;                while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            XMLCh*     key  = (XMLCh*) e.nextElementKey();            serEng.writeString(key);            XMLRefInfo* data = objToStore->get(key);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<XMLRefInfo>** objToLoad                                   , int                                                             , bool                         toAdopt                                   , XSerializeEngine&            serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<XMLRefInfo>(                                                        hashModulus                                                      , toAdopt                                                      , serEng.getMemoryManager()                                                      );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            XMLCh*      key;            serEng.readString(key);            XMLRefInfo*  data;            serEng>>data;            (*objToLoad)->put((void*)key, data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<DatatypeValidator>* const objToStore                                    , XSerializeEngine&                        serEng)                                          {    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<DatatypeValidator> e(objToStore, false, objToStore->getMemoryManager());        int itemNumber = 0;                while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            /***             * to do: verify valid id             *             *    XMLCh*  key = (XMLCh*) e.nextElementKey();             *    unsigned int id = serEng.getStringPool()->getId(key);             *    if (id == 0)             *        throw exception             ***/            DatatypeValidator* data = objToStore->get(e.nextElementKey());            DatatypeValidator::storeDV(serEng, data);        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<DatatypeValidator>** objToLoad                                   , int                                                                    , bool                                toAdopt                                   , XSerializeEngine&                   serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<DatatypeValidator>(                                                               hashModulus                                                             , toAdopt                                                             , serEng.getMemoryManager()                                                             );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {                       DatatypeValidator*  data;            data = DatatypeValidator::loadDV(serEng);            /***             *   restore the key             ***/            XMLCh*       typeUri   = (XMLCh*) data->getTypeUri();            XMLCh*       typeLocal = (XMLCh*) data->getTypeLocalName();            unsigned int uriLen    = XMLString::stringLen(typeUri);            unsigned int localLen  = XMLString::stringLen(typeLocal);            XMLCh*       typeKey   = (XMLCh*) serEng.getMemoryManager()->allocate                                     (                                       (uriLen + localLen + 2) * sizeof(XMLCh)                                     );            // "typeuri,typeLocal"            XMLString::moveChars(typeKey, typeUri, uriLen+1);            typeKey[uriLen] = chComma;            XMLString::moveChars(&typeKey[uriLen+1], typeLocal, localLen+1);            typeKey[uriLen + localLen + 1] = chNull;            ArrayJanitor<XMLCh> janName(typeKey, serEng.getMemoryManager());                        /*             * get the string from string pool             *             *  to do:             ***/            unsigned int id = serEng.getStringPool()->getId(typeKey);               XMLCh* refKey = (XMLCh*) serEng.getStringPool()->getValueForId(id);                  (*objToLoad)->put((void*)refKey, data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<Grammar>* const objToStore                                    , XSerializeEngine&              serEng)                                          {    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<Grammar> e(objToStore, false, objToStore->getMemoryManager());        int itemNumber = 0;                while (e.hasMoreElements())        {            e.nextElement();            itemNumber++;        }        serEng<<itemNumber;        e.Reset();        while (e.hasMoreElements())        {            Grammar* data = objToStore->get(e.nextElementKey());            Grammar::storeGrammar(serEng, data);        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<Grammar>** objToLoad                                   , int                                                          , bool                      toAdopt                                   , XSerializeEngine&         serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<Grammar>(                                                     hashModulus                                                   , toAdopt                                                   , serEng.getMemoryManager()                                                   );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            Grammar*  data;            data = Grammar::loadGrammar(serEng);            XMLCh* key = (XMLCh*) data->getGrammarDescription()->getGrammarKey();            (*objToLoad)->put((void*)key, data);        }    }}void XTemplateSerializer::storeObject(RefHashTableOf<XSAnnotation>* const objToStore                                    , XSerializeEngine&              serEng){    if (serEng.needToStoreObject(objToStore))    {        serEng<<objToStore->getHashModulus();        RefHashTableOfEnumerator<XSAnnotation> e(objToStore, false, objToStore->getMemoryManager());        ValueVectorOf<XSerializeEngine::XSerializedObjectId_t> ids(16, serEng.getMemoryManager());        ValueVectorOf<void*> keys(16, serEng.getMemoryManager());        while (e.hasMoreElements())        {            void* key = e.nextElementKey();            XSerializeEngine::XSerializedObjectId_t keyId = serEng.lookupStorePool(key);            if (keyId)            {                ids.addElement(keyId);                keys.addElement(key);            }        }        int itemNumber = ids.size();        serEng<<itemNumber;        for (int i=0; i<itemNumber; i++)        {            XSerializeEngine::XSerializedObjectId_t keyId = ids.elementAt(i);            XSAnnotation* data = objToStore->get(keys.elementAt(i));            serEng<<keyId;            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefHashTableOf<XSAnnotation>** objToLoad                                   , int                                                               , bool                           toAdopt                                   , XSerializeEngine&              serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        unsigned int hashModulus;        serEng>>hashModulus;        if (!*objToLoad)        {            *objToLoad = new (serEng.getMemoryManager())                              RefHashTableOf<XSAnnotation>(                              hashModulus                            , toAdopt                            , new (serEng.getMemoryManager()) HashPtr()                            , serEng.getMemoryManager()                              );        }        serEng.registerObject(*objToLoad);        int itemNumber = 0;        serEng>>itemNumber;        for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++)        {            XSerializeEngine::XSerializedObjectId_t keyId = 0;            serEng>>keyId;            void* key = serEng.lookupLoadPool(keyId);            XSAnnotation*  data;            serEng>>data;            (*objToLoad)->put(key, data);        }    }}/********************************************************** * * RefHash2KeysTableOf * *   SchemaAttDef *   ElemVector * ***********************************************************/void XTemplateSerializer::storeObject(RefHash2KeysTableOf<SchemaAttDef>* const objToStore                                    , XSerializeEngine&                        serEng)

⌨️ 快捷键说明

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