xtemplatecomparator.cpp

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

CPP
958
字号
/* * 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. *//* * $Log: XTemplateComparator.cpp,v $ * Revision 1.4  2004/09/08 13:56:14  peiyongz * Apache License Version 2.0 * * Revision 1.3  2003/12/19 23:02:43  cargilld * Fix compiler messages on OS390. * * Revision 1.2  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.1  2003/10/29 16:14:15  peiyongz * XObjectComparator/XTemplateComparator * * $Id: XTemplateComparator.cpp,v 1.4 2004/09/08 13:56:14 peiyongz Exp $ * */// ---------------------------------------------------------------------------//  Includes// ---------------------------------------------------------------------------#include <xercesc/internal/XTemplateComparator.hpp>#include <xercesc/internal/XObjectComparator.hpp>XERCES_CPP_NAMESPACE_BEGIN    /**********************************************************     *     * ValueVectorOf     *     *   SchemaElementDecl*     *   unsigned int     *     ***********************************************************/   bool XTemplateComparator::isEquivalent(ValueVectorOf<SchemaElementDecl*>* const lValue                                     , ValueVectorOf<SchemaElementDecl*>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    SchemaElementDecl*& data1 = lValue->elementAt(i);        SchemaElementDecl*& data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(ValueVectorOf<unsigned int>* const lValue                                     , ValueVectorOf<unsigned int>* const rValue)                                     {    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    unsigned int& data1 = lValue->elementAt(i);        unsigned int& data2 = rValue->elementAt(i);        if (data1!=data2)            return false;    }    return true;}    /**********************************************************     *     * RefArrayVectorOf     *     *   XMLCh     *     ***********************************************************/   bool XTemplateComparator::isEquivalent(RefArrayVectorOf<XMLCh>* const lValue                                     , RefArrayVectorOf<XMLCh>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    XMLCh* data1 = lValue->elementAt(i);        XMLCh* data2 = rValue->elementAt(i);        if (!XMLString::equals(data1, data2))        {                        return false;        }    }    return true;}    /**********************************************************     *     * RefVectorOf     *     *   SchemaAttDef     *   SchemaElementDecl     *   ContentSpecNode     *   IC_Field     *   DatatypeValidator     *   IdentityConstraint     *   XMLNumber     *   XercesLocationPath     *   XercesStep     *     ***********************************************************/bool XTemplateComparator::isEquivalent(RefVectorOf<SchemaAttDef>* const lValue                                     , RefVectorOf<SchemaAttDef>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    SchemaAttDef* data1 = lValue->elementAt(i);        SchemaAttDef* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<SchemaElementDecl>* const lValue                                     , RefVectorOf<SchemaElementDecl>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    SchemaElementDecl* data1 = lValue->elementAt(i);        SchemaElementDecl* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<ContentSpecNode>* const lValue                                     , RefVectorOf<ContentSpecNode>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    ContentSpecNode* data1 = lValue->elementAt(i);        ContentSpecNode* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<IC_Field>* const lValue                                     , RefVectorOf<IC_Field>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    IC_Field* data1 = lValue->elementAt(i);        IC_Field* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<DatatypeValidator>* const lValue                                     , RefVectorOf<DatatypeValidator>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    DatatypeValidator* data1 = lValue->elementAt(i);        DatatypeValidator* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<IdentityConstraint>* const lValue                                     , RefVectorOf<IdentityConstraint>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    IdentityConstraint* data1 = lValue->elementAt(i);        IdentityConstraint* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<XMLNumber>* const lValue                                     , RefVectorOf<XMLNumber>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    XMLNumber* data1 = lValue->elementAt(i);        XMLNumber* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<XercesLocationPath>* const lValue                                     , RefVectorOf<XercesLocationPath>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    XercesLocationPath* data1 = lValue->elementAt(i);        XercesLocationPath* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}bool XTemplateComparator::isEquivalent(RefVectorOf<XercesStep>* const lValue                                     , RefVectorOf<XercesStep>* const rValue){    IS_EQUIVALENT(lValue, rValue);    int size1 = lValue->size();    int size2 = rValue->size();    if (size1 != size2)        return false;    for ( int i = 0; i < size1; i++)    {                    XercesStep* data1 = lValue->elementAt(i);        XercesStep* data2 = rValue->elementAt(i);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }    return true;}    /**********************************************************     *     * RefHashTableOf     *     *   KVStringPair     *   XMLAttDef     *   DTDAttDef     *   ComplexTypeInfo     *   XercesGroupInfo     *   XercesAttGroupInfo     *   XMLRefInfo     *   DatatypeValidator     *   Grammar     *     ***********************************************************/bool XTemplateComparator::isEquivalent(RefHashTableOf<KVStringPair>* const lValue                                     , RefHashTableOf<KVStringPair>* const rValue){    IS_EQUIVALENT(lValue, rValue);    RefHashTableOfEnumerator<KVStringPair> lEnum(lValue, false, lValue->getMemoryManager());    int lItemNumber = 0;            while (lEnum.hasMoreElements())    {        lEnum.nextElement();        lItemNumber++;    }    RefHashTableOfEnumerator<KVStringPair> rEnum(rValue, false, rValue->getMemoryManager());    int rItemNumber = 0;            while (rEnum.hasMoreElements())    {        rEnum.nextElement();        rItemNumber++;    }    //both shall have the number of item in it    if (lItemNumber != rItemNumber)        return false;    //Any thing in the lValue shall be found in the rValue    lEnum.Reset();    while (lEnum.hasMoreElements())    {        XMLCh*        key   = (XMLCh*) lEnum.nextElementKey();        KVStringPair* data1 = lValue->get(key);        KVStringPair* data2 = rValue->get(key);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }      return true;}bool XTemplateComparator::isEquivalent(RefHashTableOf<XMLAttDef>* const lValue                                     , RefHashTableOf<XMLAttDef>* const rValue){    IS_EQUIVALENT(lValue, rValue);    RefHashTableOfEnumerator<XMLAttDef> lEnum(lValue, false, lValue->getMemoryManager());    int lItemNumber = 0;            while (lEnum.hasMoreElements())    {        lEnum.nextElement();        lItemNumber++;    }    RefHashTableOfEnumerator<XMLAttDef> rEnum(rValue, false, rValue->getMemoryManager());    int rItemNumber = 0;            while (rEnum.hasMoreElements())    {        rEnum.nextElement();        rItemNumber++;    }    //both shall have the number of item in it    if (lItemNumber != rItemNumber)        return false;    //Any thing in the lValue shall be found in the rValue    lEnum.Reset();    while (lEnum.hasMoreElements())    {        XMLCh*     key   = (XMLCh*) lEnum.nextElementKey();        //we know they are SchemaAttDef        SchemaAttDef* data1 = (SchemaAttDef*) lValue->get(key);        SchemaAttDef* data2 = (SchemaAttDef*) rValue->get(key);        if (!XObjectComparator::isEquivalent(data1, data2))            return false;    }      return true;}bool XTemplateComparator::isEquivalent(RefHashTableOf<DTDAttDef>* const lValue                                     , RefHashTableOf<DTDAttDef>* const rValue){    IS_EQUIVALENT(lValue, rValue);    RefHashTableOfEnumerator<DTDAttDef> lEnum(lValue, false, lValue->getMemoryManager());    int lItemNumber = 0;            while (lEnum.hasMoreElements())    {        lEnum.nextElement();        lItemNumber++;    }    RefHashTableOfEnumerator<DTDAttDef> rEnum(rValue, false, rValue->getMemoryManager());    int rItemNumber = 0;            while (rEnum.hasMoreElements())    {        rEnum.nextElement();        rItemNumber++;    }    //both shall have the number of item in it    if (lItemNumber != rItemNumber)        return false;    //Any thing in the lValue shall be found in the rValue    lEnum.Reset();    while (lEnum.hasMoreElements())    {

⌨️ 快捷键说明

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