xtemplateserializer.cpp

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

CPP
1,995
字号
/* * Copyright 2003,2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: XTemplateSerializer.cpp,v 1.10 2004/09/08 13:56:14 peiyongz Exp $ * $Log: XTemplateSerializer.cpp,v $ * Revision 1.10  2004/09/08 13:56:14  peiyongz * Apache License Version 2.0 * * Revision 1.9  2004/03/09 20:59:28  peiyongz * restore key string from string pool from datatypevalidator * * Revision 1.8  2004/03/01 23:20:46  peiyongz * For RefHashTableOf/RefHash2KeysTableOf/RefHashTable3KeysIdPool, * resovle "key string" either from the data itself or the GrammarPool's StringPool. * * Revision 1.6  2003/12/17 00:18:34  cargilld * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data. * * Revision 1.5  2003/11/11 22:48:13  knoaman * Serialization of XSAnnotation. * * Revision 1.4  2003/11/03 22:01:27  peiyongz * Store/Load keys separately from SchemaElementDecl * * Revision 1.3  2003/10/31 22:15:31  peiyongz * fix bug in creating ElemVector * * Revision 1.2  2003/10/29 16:16:08  peiyongz * GrammarPool' serialization/deserialization support * * Revision 1.1  2003/10/17 21:07:49  peiyongz * To support Template object serialization/deserialization * * */// ---------------------------------------------------------------------------//  Includes// ---------------------------------------------------------------------------#include <xercesc/internal/XSerializeEngine.hpp>#include <xercesc/internal/XTemplateSerializer.hpp>#include <xercesc/validators/common/Grammar.hpp>#include <xercesc/util/HashPtr.hpp>XERCES_CPP_NAMESPACE_BEGIN/********************************************************** * * ValueVectorOf * *   SchemaElementDecl* *   unsigned int * ***********************************************************/   void XTemplateSerializer::storeObject(ValueVectorOf<SchemaElementDecl*>* const objToStore                                    , XSerializeEngine&                        serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorSize = objToStore->size();        serEng<<vectorSize;        for ( int i = 0; i < vectorSize; i++)        {                        SchemaElementDecl*& data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(ValueVectorOf<SchemaElementDecl*>**       objToLoad                                   , int                                       initSize                                   , bool                                      toCallDestructor                                   , XSerializeEngine&                         serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                              ValueVectorOf<SchemaElementDecl*>(                                                               initSize                                                             , serEng.getMemoryManager()                                                             , toCallDestructor                                                             );        }        serEng.registerObject(*objToLoad);        int vectorSize = 0;        serEng>>vectorSize;        for ( int i = 0; i < vectorSize; i++)        {            SchemaElementDecl* data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}void XTemplateSerializer::storeObject(ValueVectorOf<unsigned int>* const objToStore                                    , XSerializeEngine&                  serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorSize = objToStore->size();        serEng<<vectorSize;        for ( int i = 0; i < vectorSize; i++)        {                        unsigned int& data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(ValueVectorOf<unsigned int>**       objToLoad                                   , int                                 initSize                                   , bool                                toCallDestructor                                   , XSerializeEngine&                   serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                              ValueVectorOf<unsigned int>(                                                         initSize                                                       , serEng.getMemoryManager()                                                       , toCallDestructor                                                       );        }        serEng.registerObject(*objToLoad);        int vectorSize = 0;        serEng>>vectorSize;        for ( int i = 0; i < vectorSize; i++)        {            unsigned int data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}/********************************************************** * * RefArrayVectorOf * *   XMLCh * ***********************************************************/void XTemplateSerializer::storeObject(RefArrayVectorOf<XMLCh>* const objToStore                                    , XSerializeEngine&              serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorSize = objToStore->size();        serEng<<vectorSize;        for ( int i = 0; i < vectorSize; i++)        {                        serEng.writeString(objToStore->elementAt(i));        }    }    }void XTemplateSerializer::loadObject(RefArrayVectorOf<XMLCh>**  objToLoad                                   , int                        initSize                                   , bool                       toAdopt                                   , XSerializeEngine&          serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                              RefArrayVectorOf<XMLCh>(                                                     initSize                                                   , toAdopt                                                   , serEng.getMemoryManager()                                                   );        }        serEng.registerObject(*objToLoad);        int vectorSize = 0;        serEng>>vectorSize;        for ( int i = 0; i < vectorSize; i++)        {            XMLCh* data;            serEng.readString(data);            (*objToLoad)->addElement(data);        }    }}/********************************************************** * * RefVectorOf * *   SchemaAttDef *   SchemaElementDecl *   ContentSpecNode *   IC_Field *   DatatypeValidator *   IdentityConstraint *   XMLNumber *   XercesLocationPath *   XercesStep * ***********************************************************/void XTemplateSerializer::storeObject(RefVectorOf<SchemaAttDef>* const objToStore                                    , XSerializeEngine&                serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorLength = objToStore->size();        serEng<<vectorLength;        for ( int i = 0; i < vectorLength; i++)        {            SchemaAttDef* data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefVectorOf<SchemaAttDef>** objToLoad                                   , int                         initSize                                   , bool                        toAdopt                                   , XSerializeEngine&           serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             RefVectorOf<SchemaAttDef>(                                                       initSize                                                     , toAdopt                                                     , serEng.getMemoryManager()                                                     );        }        serEng.registerObject(*objToLoad);        int vectorLength = 0;        serEng>>vectorLength;        for ( int i = 0 ; i < vectorLength; i++)        {                        SchemaAttDef* data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}void XTemplateSerializer::storeObject(RefVectorOf<SchemaElementDecl>* const objToStore                                    , XSerializeEngine&                     serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorLength = objToStore->size();        serEng<<vectorLength;        for ( int i = 0; i < vectorLength; i++)        {            SchemaElementDecl* data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefVectorOf<SchemaElementDecl>** objToLoad                                   , int                              initSize                                   , bool                             toAdopt                                   , XSerializeEngine&                serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             RefVectorOf<SchemaElementDecl>(                                                            initSize                                                          , toAdopt                                                          , serEng.getMemoryManager()                                                          );        }        serEng.registerObject(*objToLoad);        int vectorLength = 0;        serEng>>vectorLength;        for ( int i = 0 ; i < vectorLength; i++)        {                        SchemaElementDecl* data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}void XTemplateSerializer::storeObject(RefVectorOf<ContentSpecNode>* const objToStore                                    , XSerializeEngine&                   serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorLength = objToStore->size();        serEng<<vectorLength;        for ( int i = 0; i < vectorLength; i++)        {            ContentSpecNode* data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefVectorOf<ContentSpecNode>** objToLoad                                   , int                            initSize                                   , bool                           toAdopt                                   , XSerializeEngine&              serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             RefVectorOf<ContentSpecNode>(                                                          initSize                                                        , toAdopt                                                        , serEng.getMemoryManager()                                                        );        }        serEng.registerObject(*objToLoad);        int vectorLength = 0;        serEng>>vectorLength;        for ( int i = 0 ; i < vectorLength; i++)        {                        ContentSpecNode* data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}void XTemplateSerializer::storeObject(RefVectorOf<IC_Field>* const objToStore                                    , XSerializeEngine&            serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorLength = objToStore->size();        serEng<<vectorLength;        for ( int i = 0; i < vectorLength; i++)        {            IC_Field* data = objToStore->elementAt(i);            serEng<<data;        }    }}void XTemplateSerializer::loadObject(RefVectorOf<IC_Field>** objToLoad                                   , int                     initSize                                   , bool                    toAdopt                                   , XSerializeEngine&       serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             RefVectorOf<IC_Field>(                                                   initSize                                                 , toAdopt                                                 , serEng.getMemoryManager()                                                 );        }        serEng.registerObject(*objToLoad);        int vectorLength = 0;        serEng>>vectorLength;        for ( int i = 0 ; i < vectorLength; i++)        {                        IC_Field* data;            serEng>>data;            (*objToLoad)->addElement(data);        }    }}void XTemplateSerializer::storeObject(RefVectorOf<DatatypeValidator>* const objToStore                                    , XSerializeEngine&                      serEng){    if (serEng.needToStoreObject(objToStore))    {        int vectorLength = objToStore->size();        serEng<<vectorLength;        for ( int i = 0; i < vectorLength; i++)        {            DatatypeValidator* data = objToStore->elementAt(i);            DatatypeValidator::storeDV(serEng, data);        }    }}void XTemplateSerializer::loadObject(RefVectorOf<DatatypeValidator>** objToLoad                                   , int                               initSize                                   , bool                              toAdopt                                   , XSerializeEngine&                 serEng){    if (serEng.needToLoadObject((void**)objToLoad))    {        if (!*objToLoad)        {            if (initSize < 0)                initSize = 16;            *objToLoad = new (serEng.getMemoryManager())                             RefVectorOf<DatatypeValidator>(                                                            initSize                                                          , toAdopt

⌨️ 快捷键说明

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