abstractnumericvalidator.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 231 行

CPP
231
字号
/* * Copyright 2001,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: AbstractNumericValidator.cpp,v 1.12 2004/09/08 13:56:52 peiyongz Exp $ * $Log: AbstractNumericValidator.cpp,v $ * Revision 1.12  2004/09/08 13:56:52  peiyongz * Apache License Version 2.0 * * Revision 1.11  2003/12/23 21:50:36  peiyongz * Absorb exception thrown in getCanonicalRepresentation and return 0, * only validate when required * * Revision 1.10  2003/12/17 00:18:38  cargilld * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data. * * Revision 1.9  2003/12/11 21:40:24  peiyongz * support for Canonical Representation for Datatype * * Revision 1.8  2003/11/28 18:53:07  peiyongz * Support for getCanonicalRepresentation * * Revision 1.7  2003/11/12 20:32:03  peiyongz * Statless Grammar: ValidationContext * * Revision 1.6  2003/10/02 19:21:06  peiyongz * Implementation of Serialization/Deserialization * * Revision 1.5  2003/05/15 18:53:26  knoaman * Partial implementation of the configurable memory manager. * * Revision 1.4  2003/02/02 23:55:40  peiyongz * getFormattedString() added to return original and converted value. * * Revision 1.3  2003/01/30 21:56:22  tng * Performance: call getRawData instead of toString * * Revision 1.2  2002/11/04 14:53:27  tng * C++ Namespace Support. * * Revision 1.1.1.1  2002/02/01 22:22:39  peiyongz * sane_include * * Revision 1.2  2001/10/09 21:16:31  peiyongz * . macro to simplify code * * Revision 1.1  2001/10/01 16:13:56  peiyongz * DTV Reorganization:new classes: AbstractNumericFactValidator/ AbstractNumericValidator * */// ---------------------------------------------------------------------------//  Includes// ---------------------------------------------------------------------------#include <xercesc/validators/datatype/AbstractNumericValidator.hpp>#include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp>#include <xercesc/util/XMLAbstractDoubleFloat.hpp>XERCES_CPP_NAMESPACE_BEGIN#define  REPORT_VALUE_ERROR(val1, val2, except_code, manager)    \  ThrowXMLwithMemMgr2(InvalidDatatypeValueException               \          , except_code                                 \          , val1->getFormattedString()                  \          , val2->getFormattedString()                  \          , manager);// ---------------------------------------------------------------------------//  Constructors and Destructor// ---------------------------------------------------------------------------AbstractNumericValidator::~AbstractNumericValidator(){}AbstractNumericValidator::AbstractNumericValidator(                          DatatypeValidator*            const baseValidator                        , RefHashTableOf<KVStringPair>* const facets                        , const int                           finalSet                        , const ValidatorType                 type                        , MemoryManager* const                manager):AbstractNumericFacetValidator(baseValidator, facets, finalSet, type, manager){    //do not invoke init() here !!!}void AbstractNumericValidator::validate(const XMLCh*             const content                                       ,      ValidationContext* const context                                       ,      MemoryManager*     const manager){    checkContent(content, context, false, manager);}void AbstractNumericValidator::boundsCheck(const XMLNumber*         const theData                                          ,      MemoryManager*     const manager){    int thisFacetsDefined = getFacetsDefined();    int result;    try    {        // must be < MaxExclusive        if ( (thisFacetsDefined & DatatypeValidator::FACET_MAXEXCLUSIVE) != 0 )        {            result = compareValues(theData, getMaxExclusive());            if ( result != -1)            {                REPORT_VALUE_ERROR(theData                                 , getMaxExclusive()                                 , XMLExcepts::VALUE_exceed_maxExcl                                 , manager)            }        } 	        // must be <= MaxInclusive        if ( (thisFacetsDefined & DatatypeValidator::FACET_MAXINCLUSIVE) != 0 )        {            result = compareValues(theData, getMaxInclusive());            if (result == 1)            {                REPORT_VALUE_ERROR(theData                                 , getMaxInclusive()                                 , XMLExcepts::VALUE_exceed_maxIncl                                 , manager)            }        }        // must be >= MinInclusive        if ( (thisFacetsDefined & DatatypeValidator::FACET_MININCLUSIVE) != 0 )        {            result = compareValues(theData, getMinInclusive());            if (result == -1)            {                REPORT_VALUE_ERROR(theData                                 , getMinInclusive()                                 , XMLExcepts::VALUE_exceed_minIncl                                 , manager)            }        }        // must be > MinExclusive        if ( (thisFacetsDefined & DatatypeValidator::FACET_MINEXCLUSIVE) != 0 )        {            result = compareValues(theData, getMinExclusive());            if (result != 1)            {                REPORT_VALUE_ERROR(theData                                 , getMinExclusive()                                 , XMLExcepts::VALUE_exceed_minExcl                                 , manager)            }        }    }    catch (XMLException &e)    {       ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::RethrowError, e.getMessage(), manager);    }}const XMLCh* AbstractNumericValidator::getCanonicalRepresentation(const XMLCh*         const rawData                                                                 ,      MemoryManager* const memMgr                                                                 ,      bool                 toValidate) const{    MemoryManager* toUse = memMgr? memMgr : fMemoryManager;    if (toValidate)    {        AbstractNumericValidator* temp = (AbstractNumericValidator*) this;        try         {            temp->checkContent(rawData, 0, false, toUse);        }        catch (...)        {            return 0;        }    }    // XMLAbstractDoubleFloat::getCanonicalRepresentation handles    // exceptional cases    return XMLAbstractDoubleFloat::getCanonicalRepresentation(rawData, toUse);}/*** * Support for Serialization/De-serialization ***/IMPL_XSERIALIZABLE_NOCREATE(AbstractNumericValidator)void AbstractNumericValidator::serialize(XSerializeEngine& serEng){    AbstractNumericFacetValidator::serialize(serEng);    /***     * Need not to do anything else here     *     * Note: its derivatives, Doubledv, Floatdv and Decimaldv writes     *       number type info into the binary data stream to be read     *       by AbstractNumericFacetVaildator during loading, therefore     *       this class can NOT write/read anything into/from the binary     *       data stream.     *     *       Later on, if this class has to write/read something into/from     *       the binary data stream, we need to add a numberType data     *       to XMLNumber and let AbstractNumericFacetValidator to write/read     *       this number type info.     ***/}XERCES_CPP_NAMESPACE_END/**  * End of file AbstractNumericValidator::cpp  */

⌨️ 快捷键说明

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