// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_math_BigDecimal__
#define __java_math_BigDecimal__

#pragma interface

#include <java/lang/Number.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace math
    {
      class MathContext;
      class BigDecimal;
      class BigInteger;
    }
  }
}

class java::math::BigDecimal : public ::java::lang::Number
{
public:
  BigDecimal (jint);
  BigDecimal (jint, ::java::math::MathContext *);
  BigDecimal (jlong);
  BigDecimal (jlong, ::java::math::MathContext *);
  BigDecimal (::java::math::BigInteger *, ::java::math::MathContext *);
  BigDecimal (::java::lang::String *, ::java::math::MathContext *);
  BigDecimal (::java::math::BigInteger *);
  BigDecimal (::java::math::BigInteger *, jint);
  BigDecimal (::java::math::BigInteger *, jint, ::java::math::MathContext *);
  BigDecimal (jdouble, ::java::math::MathContext *);
  BigDecimal (jdouble);
  BigDecimal (jcharArray, jint, jint, ::java::math::MathContext *);
  BigDecimal (jcharArray, ::java::math::MathContext *);
  BigDecimal (jcharArray);
  BigDecimal (jcharArray, jint, jint);
  BigDecimal (::java::lang::String *);
  static ::java::math::BigDecimal *valueOf (jlong);
  static ::java::math::BigDecimal *valueOf (jlong, jint);
  virtual ::java::math::BigDecimal *add (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *add (::java::math::BigDecimal *, ::java::math::MathContext *);
  virtual ::java::math::BigDecimal *subtract (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *subtract (::java::math::BigDecimal *, ::java::math::MathContext *);
  virtual ::java::math::BigDecimal *multiply (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *multiply (::java::math::BigDecimal *, ::java::math::MathContext *);
  virtual ::java::math::BigDecimal *divide (::java::math::BigDecimal *, jint);
  virtual ::java::math::BigDecimal *divide (::java::math::BigDecimal *, jint, jint);
  virtual ::java::math::BigDecimal *divide (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *remainder (::java::math::BigDecimal *);
  virtual JArray< ::java::math::BigDecimal *> *divideAndRemainder (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *divideToIntegralValue (::java::math::BigDecimal *);
private:
  ::java::math::BigDecimal *floor ();
public:
  virtual jint compareTo (::java::lang::Object *);
  virtual jint compareTo (::java::math::BigDecimal *);
  virtual jboolean equals (::java::lang::Object *);
  virtual jint hashCode ();
  virtual ::java::math::BigDecimal *max (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *min (::java::math::BigDecimal *);
  virtual ::java::math::BigDecimal *movePointLeft (jint);
  virtual ::java::math::BigDecimal *movePointRight (jint);
  virtual jint signum ();
  virtual jint scale () { return scale__; }
  virtual ::java::math::BigInteger *unscaledValue () { return intVal; }
  virtual ::java::math::BigDecimal *abs ();
  virtual ::java::math::BigDecimal *negate ();
  virtual ::java::math::BigDecimal *negate (::java::math::MathContext *);
  virtual ::java::math::BigDecimal *plus () { return this; }
  virtual ::java::math::BigDecimal *plus (::java::math::MathContext *);
  virtual ::java::math::BigDecimal *round (::java::math::MathContext *);
  virtual jint precision ();
  virtual ::java::lang::String *toString ();
  virtual ::java::lang::String *toEngineeringString ();
  virtual ::java::lang::String *toPlainString ();
  virtual ::java::math::BigInteger *toBigInteger ();
  virtual ::java::math::BigInteger *toBigIntegerExact ();
  virtual jint intValue ();
  virtual ::java::math::BigDecimal *stripTrailingZeros ();
  virtual jlong longValue ();
  virtual jfloat floatValue ();
  virtual jdouble doubleValue ();
  virtual ::java::math::BigDecimal *setScale (jint);
  virtual ::java::math::BigDecimal *setScale (jint, jint);
  static ::java::math::BigDecimal *valueOf (jdouble);
  virtual ::java::math::BigDecimal *scaleByPowerOfTen (jint);
  virtual ::java::math::BigDecimal *pow (jint);
  virtual ::java::math::BigDecimal *pow (jint, ::java::math::MathContext *);
  virtual ::java::math::BigDecimal *abs (::java::math::MathContext *);
  virtual ::java::math::BigDecimal *ulp ();
  virtual jlong longValueExact ();
  virtual jint intValueExact ();
  virtual jbyte byteValueExact ();
  virtual jshort shortValueExact ();
private:
  ::java::math::BigInteger * __attribute__((aligned(__alignof__( ::java::lang::Number )))) intVal;
  jint scale__;
  jint precision__;
  static const jlong serialVersionUID = 6108874887143696463LL;
public:
  static ::java::math::BigDecimal *ZERO;
  static ::java::math::BigDecimal *ONE;
  static ::java::math::BigDecimal *TEN;
  static const jint ROUND_UP = 0L;
  static const jint ROUND_DOWN = 1L;
  static const jint ROUND_CEILING = 2L;
  static const jint ROUND_FLOOR = 3L;
  static const jint ROUND_HALF_UP = 4L;
  static const jint ROUND_HALF_DOWN = 5L;
  static const jint ROUND_HALF_EVEN = 6L;
  static const jint ROUND_UNNECESSARY = 7L;

  static ::java::lang::Class class$;
};

#endif /* __java_math_BigDecimal__ */
