
// 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 BigDecimal;
        class BigInteger;
        class MathContext;
        class RoundingMode;
    }
  }
}

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(JArray< jchar > *, jint, jint, ::java::math::MathContext *);
  BigDecimal(JArray< jchar > *, ::java::math::MathContext *);
  BigDecimal(JArray< jchar > *);
  BigDecimal(JArray< jchar > *, 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, ::java::math::RoundingMode *);
  virtual ::java::math::BigDecimal * divide(::java::math::BigDecimal *, ::java::math::RoundingMode *);
  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 BigDecimal$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();
  virtual ::java::math::BigInteger * unscaledValue();
  virtual ::java::math::BigDecimal * abs();
  virtual ::java::math::BigDecimal * negate();
  virtual ::java::math::BigDecimal * negate(::java::math::MathContext *);
  virtual ::java::math::BigDecimal * plus();
  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);
  virtual ::java::math::BigDecimal * setScale(jint, ::java::math::RoundingMode *);
  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();
  virtual jint compareTo(::java::lang::Object *);
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 = 0;
  static const jint ROUND_DOWN = 1;
  static const jint ROUND_CEILING = 2;
  static const jint ROUND_FLOOR = 3;
  static const jint ROUND_HALF_UP = 4;
  static const jint ROUND_HALF_DOWN = 5;
  static const jint ROUND_HALF_EVEN = 6;
  static const jint ROUND_UNNECESSARY = 7;
  static ::java::lang::Class class$;
};

#endif // __java_math_BigDecimal__
