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

#ifndef __java_math_MathContext__
#define __java_math_MathContext__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace math
    {
        class MathContext;
        class RoundingMode;
    }
  }
}

class java::math::MathContext : public ::java::lang::Object
{

public:
  MathContext(jint);
  MathContext(jint, ::java::math::RoundingMode *);
  MathContext(::java::lang::String *);
  jboolean equals(::java::lang::Object *);
  jint getPrecision();
  ::java::math::RoundingMode * getRoundingMode();
  ::java::lang::String * toString();
  jint hashCode();
  static ::java::math::MathContext * UNLIMITED;
  static ::java::math::MathContext * DECIMAL32;
  static ::java::math::MathContext * DECIMAL64;
  static ::java::math::MathContext * DECIMAL128;
private:
  static const jlong serialVersionUID = 5579720004786848255LL;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) precision;
  ::java::math::RoundingMode * roundMode;
public:
  static ::java::lang::Class class$;
};

#endif // __java_math_MathContext__
