abstractnumericfacetvalidator.cpp

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

CPP
1,053
字号
    //    // minExclusive < minInclusive <= maxInclusive < maxExclusive    //    // check 4.3.7.c1 must: minInclusive <= maxInclusive    if (((thisFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0) &&        ((thisFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0) )    {        int result = compareValues(thisMinInclusive, thisMaxInclusive);        if ( result == 1 || result == INDETERMINATE )        {            REPORT_FACET_ERROR(thisMinInclusive                             , thisMaxInclusive                             , XMLExcepts::FACET_maxIncl_minIncl                             , manager)        }    }    // check 4.3.8.c2 must: minExclusive <= maxExclusive    if ( ((thisFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0) &&        ((thisFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0) )    {        int result = compareValues(getMinExclusive(), getMaxExclusive());        if ( result == 1 || result == INDETERMINATE )        {            REPORT_FACET_ERROR(thisMinExclusive                             , thisMaxExclusive                             , XMLExcepts::FACET_maxExcl_minExcl                             , manager)        }    }    // check 4.3.9.c2 must: minExclusive < maxInclusive    if ( ((thisFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0) &&        ((thisFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0) )    {        int result = compareValues(getMinExclusive(), getMaxInclusive());        if ( result != -1 )        {            REPORT_FACET_ERROR(thisMinExclusive                             , thisMaxInclusive                             , XMLExcepts::FACET_maxIncl_minExcl                             , manager)        }    }    // check 4.3.10.c1 must: minInclusive < maxExclusive    if ( ((thisFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0) &&        ((thisFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0) )    {        int result = compareValues(getMinInclusive(), getMaxExclusive());        if ( result != -1)        {            REPORT_FACET_ERROR(thisMinInclusive                             , thisMaxExclusive                             , XMLExcepts::FACET_maxExcl_minIncl                             , manager)        }    }    checkAdditionalFacetConstraints(manager);}// end of inspectFacet()////  Check vs base//         check common facets//         check enumeration//         check Additional Facet Constraint//void AbstractNumericFacetValidator::inspectFacetBase(MemoryManager* const manager){    AbstractNumericFacetValidator* numBase = (AbstractNumericFacetValidator*) getBaseValidator();    int thisFacetsDefined = getFacetsDefined();    if ( (!thisFacetsDefined && !fEnumeration) ||         !numBase           )        return;    int baseFacetsDefined = numBase->getFacetsDefined();    XMLNumber *thisMaxInclusive = getMaxInclusive();    XMLNumber *thisMaxExclusive = getMaxExclusive();    XMLNumber *thisMinInclusive = getMinInclusive();    XMLNumber *thisMinExclusive = getMinExclusive();    XMLNumber *baseMaxInclusive = numBase->getMaxInclusive();    XMLNumber *baseMaxExclusive = numBase->getMaxExclusive();    XMLNumber *baseMinInclusive = numBase->getMinInclusive();    XMLNumber *baseMinExclusive = numBase->getMinExclusive();    int       baseFixed = numBase->getFixed();                //                                     this                //                 minExclusive                          maxExclusive                //                    minInclusive                  maxInclusive                //                //                                     base                //  minExclusive                                                          maxExclusive                //      minInclusive                                                   maxInclusive                //    // check 4.3.7.c2 error:    // maxInclusive > base.maxInclusive && maxInclusive != base.maxInclusive if (base.fixed)    // maxInclusive >= base.maxExclusive    // maxInclusive < base.minInclusive    // maxInclusive <= base.minExclusive    if ((thisFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0)    {        if ((baseFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0)        {            int result = compareValues(thisMaxInclusive, baseMaxInclusive);            if (((baseFixed & DatatypeValidator::FACET_MAXINCLUSIVE) != 0) &&                 (result != 0 ))            {                REPORT_FACET_ERROR(thisMaxInclusive                                 , baseMaxInclusive                                 , XMLExcepts::FACET_maxIncl_base_fixed                                 , manager)            }            if (result == 1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMaxInclusive                                 , baseMaxInclusive                                 , XMLExcepts::FACET_maxIncl_base_maxIncl                                 , manager)            }        }        if ((baseFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0)        {            int result = compareValues(thisMaxInclusive, baseMaxExclusive);            if (result != -1 )            {                REPORT_FACET_ERROR(thisMaxInclusive                                 , baseMaxExclusive                                 , XMLExcepts::FACET_maxIncl_base_maxExcl                                 , manager)            }        }        if ((baseFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0)        {            int result = compareValues(thisMaxInclusive, baseMinInclusive);            if (result == -1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMaxInclusive                                 , baseMinInclusive                                 , XMLExcepts::FACET_maxIncl_base_minIncl                                 , manager)            }        }        if ((baseFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0)        {            int result = compareValues(thisMaxInclusive, baseMinExclusive);            if (result != 1 )            {                REPORT_FACET_ERROR(thisMaxInclusive                                 , baseMinExclusive                                 , XMLExcepts::FACET_maxIncl_base_minExcl                                 , manager)            }        }    }    // check 4.3.8.c3 error:    // maxExclusive > base.maxExclusive  && maxExclusive != base.maxExclusive if (base.fixed)    // maxExclusive > base.maxInclusive    // maxExclusive <= base.minInclusive    // maxExclusive <= base.minExclusive    if ((thisFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0)    {        if (( baseFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0)        {            int result = compareValues(thisMaxExclusive, baseMaxExclusive);            if (((baseFixed & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0) &&                 (result != 0 ))            {                REPORT_FACET_ERROR(thisMaxExclusive                                 , baseMaxExclusive                                 , XMLExcepts::FACET_maxExcl_base_fixed                                 , manager)             }            if (result == 1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMaxExclusive                                 , baseMaxExclusive                                 , XMLExcepts::FACET_maxExcl_base_maxExcl                                 , manager)            }            /**             * Schema Errata             * E2-16 maxExclusive             *             *   derived type's maxExclusive must either be             *   1) equal to base' maxExclusive or             *   2) from the base type value space             *             */            if (result != 0)            {                FROM_BASE_VALUE_SPACE(thisMaxExclusive                        , DatatypeValidator::FACET_MAXEXCLUSIVE                        , XMLExcepts::FACET_maxExcl_notFromBase                        , manager)            }        }        else  // base has no maxExclusive        {            FROM_BASE_VALUE_SPACE(thisMaxExclusive                        , DatatypeValidator::FACET_MAXEXCLUSIVE                        , XMLExcepts::FACET_maxExcl_notFromBase                        , manager)        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0)        {            int result = compareValues(thisMaxExclusive, baseMaxInclusive);            if (result == 1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMaxExclusive                                 , baseMaxInclusive                                 , XMLExcepts::FACET_maxExcl_base_maxIncl                                 , manager)            }        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0)        {            int result = compareValues(thisMaxExclusive, baseMinExclusive);            if (result != 1)            {                REPORT_FACET_ERROR(thisMaxExclusive                                 , baseMinExclusive                                 , XMLExcepts::FACET_maxExcl_base_minExcl                                 , manager)            }        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0)        {            int result = compareValues(thisMaxExclusive, baseMinInclusive);            if (result != 1)            {                REPORT_FACET_ERROR(thisMaxExclusive                                 , baseMinInclusive                                 , XMLExcepts::FACET_maxExcl_base_minIncl                                 , manager)            }        }    }    // check 4.3.9.c3 error:    // minExclusive < base.minExclusive     minExclusive != base.minExclusive if (base.fixed)    // minExclusive > base.maxInclusive ??? minExclusive >= base.maxInclusive    // minExclusive < base.minInclusive    // minExclusive >= base.maxExclusive    if ((thisFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0)    {        if (( baseFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0)        {            int result = compareValues(thisMinExclusive, baseMinExclusive);            if (((baseFixed & DatatypeValidator::FACET_MINEXCLUSIVE) != 0) &&                 (result != 0 ))            {                REPORT_FACET_ERROR(thisMinExclusive                                 , baseMinExclusive                                 , XMLExcepts::FACET_minExcl_base_fixed                                 , manager)            }            if (result == -1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMinExclusive                                 , baseMinExclusive                                 , XMLExcepts::FACET_minExcl_base_minExcl                                 , manager)            }            /**             * Schema Errata             * E2-16 maxExclusive             *             *   derived type's minExclusive must either be             *   1) equal to base' minxExclusive or             *   2) from the base type value space             *             *  Note: deduced from, not explicitly expressed in the Errata             */            if (result != 0)            {                FROM_BASE_VALUE_SPACE(thisMinExclusive                        , DatatypeValidator::FACET_MINEXCLUSIVE                        , XMLExcepts::FACET_minExcl_notFromBase                        , manager)            }        }        else // base has no minExclusive        {            FROM_BASE_VALUE_SPACE(thisMinExclusive                        , DatatypeValidator::FACET_MINEXCLUSIVE                        , XMLExcepts::FACET_minExcl_notFromBase                        , manager)        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0)        {            int result = compareValues(thisMinExclusive, baseMaxInclusive);            if (result == 1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMinExclusive                                 , baseMaxInclusive                                 , XMLExcepts::FACET_minExcl_base_maxIncl                                 , manager)            }        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0)        {            int result = compareValues(thisMinExclusive, baseMinInclusive);            if (result == -1 || result == INDETERMINATE)            {                REPORT_FACET_ERROR(thisMinExclusive                                 , baseMinInclusive                                 , XMLExcepts::FACET_minExcl_base_minIncl                                 , manager)            }        }        if (( baseFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0)        {            int result = compareValues(thisMinExclusive, baseMaxExclusive);            if (result != -1)            {                REPORT_FACET_ERROR(thisMinExclusive                                 , baseMaxExclusive                                 , XMLExcepts::FACET_minExcl_base_maxExcl                                 , manager)

⌨️ 快捷键说明

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