blob: 1dda2809693462e61482c880725d8b45dee07875 [file] [log] [blame]
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xerces" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache\@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation, and was
* originally based on software copyright (c) 2001, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
* $Id$
*/
#ifndef XML_BIGDECIMAL_HPP
#define XML_BIGDECIMAL_HPP
#include <xercesc/util/XercesDefs.hpp>
#include <xercesc/util/XMLNumber.hpp>
#include <xercesc/util/XMLBigInteger.hpp>
class XMLUTIL_EXPORT XMLBigDecimal : public XMLNumber
{
public:
/**
* Constructs a newly allocated <code>XMLBigDecimal</code> object that
* represents the value represented by the string.
*
* @param strValue the <code>String</code> to be converted to an
* <code>XMLBigDecimal</code>.
* @exception NumberFormatException if the <code>String</code> does not
* contain a parsable XMLBigDecimal.
*/
XMLBigDecimal(const XMLCh* const strValue);
~XMLBigDecimal();
XMLBigDecimal(const XMLBigDecimal& toCopy);
/**
* Constructs a newly allocated <code>XMLBigDecimal</code> object
* from an existing XMLBigDecimal with an extra Exponent.
*/
XMLBigDecimal(const XMLBigDecimal& toCopy, const int addExponent);
static void parseBigDecimal(const XMLCh* const strValue
, XMLCh* const retValue
, unsigned int& scaleValue);
static int compareValues(const XMLBigDecimal* const lValue
, const XMLBigDecimal* const rValue);
static void matchScale(XMLBigDecimal* const lValue
, XMLBigDecimal* const rValue);
virtual XMLCh* toString() const;
virtual int getSign() const;
XMLBigInteger* getValue() const;
unsigned int getScale() const;
unsigned int getTotalDigit() const;
/**
* Compares this object to the specified object.
* The result is <code>true</code> if and only if the argument is not
* <code>null</code> and is an <code>XMLBigDecimal</code> object that contains
* the same <code>int</code> value as this object.
*
* @param toCompare the object to compare with.
* @return <code>true</code> if the objects are the same;
* <code>false</code> otherwise.
*/
bool operator==(const XMLBigDecimal& toCompare) const;
private:
void reScale(unsigned int newValue);
// -----------------------------------------------------------------------
// Private data members
//
// fIntVal
// the XMLBigInteger holding the value of this BigDecimal.
//
// fScale
// the number of digits to the right of the decimal point
//
// -----------------------------------------------------------------------
XMLBigInteger* fIntVal;
unsigned int fScale;
};
inline XMLBigDecimal::~XMLBigDecimal()
{
delete fIntVal;
}
inline int XMLBigDecimal::getSign() const
{
return fIntVal->getSign();
}
inline XMLBigInteger* XMLBigDecimal::getValue() const
{
return fIntVal;
}
inline unsigned int XMLBigDecimal::getScale() const
{
return fScale;
}
inline unsigned int XMLBigDecimal::getTotalDigit() const
{
return fIntVal->getTotalDigit();
}
inline bool XMLBigDecimal::operator==(const XMLBigDecimal& toCompare) const
{
return ( XMLBigInteger::compareValues(this->fIntVal, toCompare.fIntVal) == 0 ? true : false);
}
#endif