http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Download
Installation
Build

API Docs
Samples
Schema

FAQs
Programming
Migration

Releases
Bug-Reporting
Feedback

Y2K Compliance
PDF Document

CVS Repository
Mail Archive

API Docs for SAX and DOM
 

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

XMLDouble.hpp

Go to the documentation of this file.
00001 /*
00002  * The Apache Software License, Version 1.1
00003  *
00004  * Copyright (c) 2001 The Apache Software Foundation.  All rights
00005  * reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  *
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  *
00026  * 4. The names "Xerces" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written
00029  *    permission, please contact apache\@apache.org.
00030  *
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  *
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  *
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation, and was
00051  * originally based on software copyright (c) 2001, International
00052  * Business Machines, Inc., http://www.ibm.com .  For more information
00053  * on the Apache Software Foundation, please see
00054  * <http://www.apache.org/>.
00055  */
00056 
00057 /*
00058  * $Id: XMLDouble.hpp,v 1.7 2001/10/25 21:54:50 peiyongz Exp $
00059  * $Log: XMLDouble.hpp,v $
00060  * Revision 1.7  2001/10/25 21:54:50  peiyongz
00061  * Apply XMLRegisterCleanup
00062  *
00063  * Revision 1.6  2001/09/27 14:54:20  peiyongz
00064  * DTV Reorganization: derived from XMLNumber
00065  *
00066  * Revision 1.5  2001/08/29 19:03:03  peiyongz
00067  * Bugzilla# 2816:on AIX 4.2, xlC 3 r ev.1, Compilation error on inline method
00068  *
00069  * Revision 1.4  2001/07/31 13:48:29  peiyongz
00070  * fValue removed
00071  *
00072  * Revision 1.3  2001/07/26 18:21:15  peiyongz
00073  * Boundary Checking
00074  *
00075  * Revision 1.2  2001/07/24 21:52:27  peiyongz
00076  * XMLDouble: move fg...String to XMLUni
00077  *
00078  * Revision 1.1  2001/07/24 13:58:11  peiyongz
00079  * XMLDouble and related supporting methods from XMLBigInteger/XMLBigDecimal
00080  *
00081  */
00082 
00083 #ifndef XML_DOUBLE_HPP
00084 #define XML_DOUBLE_HPP
00085 
00086 #include <util/XercesDefs.hpp>
00087 #include <util/XMLNumber.hpp>
00088 #include <util/XMLBigDecimal.hpp>
00089 
00090 /***
00091  * 3.2.5.1 Lexical representation
00092  *
00093  *   double values have a lexical representation consisting of a mantissa followed, 
00094  *   optionally, by the character "E" or "e", followed by an exponent. 
00095  *
00096  *   The exponent ·must· be an integer. 
00097  *   The mantissa must be a decimal number. 
00098  *   The representations for exponent and mantissa must follow the lexical rules 
00099  *   for integer and decimal. 
00100  *
00101  *   If the "E" or "e" and the following exponent are omitted, 
00102  *   an exponent value of 0 is assumed. 
00103 ***/
00104 
00105 class  XMLDouble : public XMLNumber
00106 {
00107 public:
00108 
00118 
00119     enum LiteralType
00120     {
00121         NegINF,
00122         NegZero,
00123         PosZero,
00124         PosINF,
00125         NaN,
00126         SpecialTypeNum = 5,
00127         Normal
00128     };
00129 
00130     XMLDouble(const XMLCh* const strValue);
00131 
00132     ~XMLDouble();
00133 
00134     XMLDouble(const XMLDouble& toCopy);
00135    
00136     virtual XMLCh*        toString() const;
00137 
00138     virtual int           getSign() const;
00139 
00150     bool operator==(const XMLDouble& toCompare) const;
00151 
00152     static int            compareValues(const XMLDouble* const lValue
00153                                       , const XMLDouble* const rValue);
00154 
00155     // -----------------------------------------------------------------------
00156     //  Notification that lazy data has been deleted
00157     // -----------------------------------------------------------------------
00158     static void reinitXMLDouble();   
00159 
00160 private:
00161 
00162     void                  init(const XMLCh* const strValue);
00163 
00164     void                  checkBoundary(const XMLCh* const strValue);
00165 
00166     void                  cleanUp();
00167 
00168     bool                  isSpecialValue() const;
00169 
00170     static int            compareSpecial(const XMLDouble* const specialValue
00171                                        , const XMLDouble* const normalValue);
00172 
00173     static bool           isInitialized;
00174 
00175     // -----------------------------------------------------------------------
00176     //  Private data members
00177     //
00178     //  fMantissa
00179     //     the XMLBigDecimal holding the value of mantissa.
00180     //
00181     //  fExponent
00182     //     the XMLBigInteger holding the value of exponent.
00183     //
00184     //  fType
00185     //     the type of the object.
00186     //
00187     // -----------------------------------------------------------------------
00188 
00189     XMLBigDecimal*          fMantissa;
00190     XMLBigInteger*          fExponent;   
00191     LiteralType             fType;
00192 };
00193 
00194 inline int XMLDouble::getSign() const
00195 {
00196     return fMantissa->getSign();
00197 }
00198 
00199 inline bool XMLDouble::operator==(const XMLDouble& toCompare) const
00200 {
00201     return ( XMLDouble::compareValues(this, &toCompare) == 0 ? true : false);
00202 }
00203 
00204 inline bool XMLDouble::isSpecialValue() const
00205 {
00206     return (fType < SpecialTypeNum);
00207 }
00208 
00209 inline void XMLDouble::cleanUp()
00210 {
00211     if (fMantissa)
00212         delete fMantissa;
00213 
00214     if (fExponent)
00215         delete fExponent;
00216 }
00217 
00218 inline XMLDouble::~XMLDouble()
00219 {
00220     cleanUp();
00221 }
00222 
00223 #endif


Copyright © 2000 The Apache Software Foundation. All Rights Reserved.