FOREIGN MODULE java_math;

IMPORT
    java_lang := "java.lang",
    java_util_concurrent_atomic := "java.util.concurrent.atomic",
    java_io := "java.io",
    java_util := "java.util",
    sun_misc := "sun.misc";

TYPE

  BigDecimal* = POINTER TO EXTENSIBLE RECORD (java_lang.Number + java_lang.Comparable)    (* Typebound Procedures *)
                STATIC
                  ONE*               : BigDecimal;
                  ROUND_CEILING*     = 2;
                  ROUND_DOWN*        = 1;
                  ROUND_FLOOR*       = 3;
                  ROUND_HALF_DOWN*   = 5;
                  ROUND_HALF_EVEN*   = 6;
                  ROUND_HALF_UP*     = 4;
                  ROUND_UNNECESSARY* = 7;
                  ROUND_UP*          = 0;
                  TEN*               : BigDecimal;
                  ZERO*              : BigDecimal;
                  PROCEDURE Init*(p0 : BigInteger;
                                  p1 : INTEGER) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : BigInteger;
                                  p1 : INTEGER;
                                  p2 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : BigInteger) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : BigInteger;
                                  p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : LONGINT) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : LONGINT;
                                  p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : INTEGER) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : INTEGER;
                                  p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF CHAR) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF CHAR;
                                      p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF CHAR;
                                      p1 : INTEGER;
                                      p2 : INTEGER) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF CHAR;
                                      p1 : INTEGER;
                                      p2 : INTEGER;
                                      p3 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : REAL) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : REAL;
                                  p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : java_lang.String) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : java_lang.String;
                                  p1 : MathContext) : BigDecimal,CONSTRUCTOR;
                  PROCEDURE valueOf*(p0 : REAL) : BigDecimal;
                  PROCEDURE valueOf*(p0 : LONGINT) : BigDecimal;
                  PROCEDURE valueOf*(p0 : LONGINT;
                                     p1 : INTEGER) : BigDecimal;
                END;

  BigInteger* = POINTER TO EXTENSIBLE RECORD (java_lang.Number + java_lang.Comparable)    (* Typebound Procedures *)
                STATIC
                  ONE*           : BigInteger;
                  TEN*           : BigInteger;
                  ZERO*          : BigInteger;
                  PROCEDURE Init*(p0 : java_lang.String) : BigInteger,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : INTEGER;
                                  p1 : java_util.Random) : BigInteger,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : INTEGER;
                                  p1 : INTEGER;
                                  p2 : java_util.Random) : BigInteger,CONSTRUCTOR;
                  PROCEDURE Init*(IN  p0 : ARRAY OF BYTE) : BigInteger,CONSTRUCTOR;
                  PROCEDURE Init*(    p0 : INTEGER;
                                  IN  p1 : ARRAY OF BYTE) : BigInteger,CONSTRUCTOR;
                  PROCEDURE Init*(p0 : java_lang.String;
                                  p1 : INTEGER) : BigInteger,CONSTRUCTOR;
                  PROCEDURE probablePrime*(p0 : INTEGER;
                                           p1 : java_util.Random) : BigInteger;
                  PROCEDURE valueOf*(p0 : LONGINT) : BigInteger;
                END;

  MathContext* = POINTER TO RECORD (java_lang.Object + java_io.Serializable)    (* Typebound Procedures *)
                 STATIC
                   DECIMAL128* : MathContext;
                   DECIMAL32*  : MathContext;
                   DECIMAL64*  : MathContext;
                   UNLIMITED*  : MathContext;
                   PROCEDURE Init*(p0 : java_lang.String) : MathContext,CONSTRUCTOR;
                   PROCEDURE Init*(p0 : INTEGER;
                                   p1 : RoundingMode) : MathContext,CONSTRUCTOR;
                   PROCEDURE Init*(p0 : INTEGER) : MathContext,CONSTRUCTOR;
                 END;

  RoundingMode* = POINTER TO RECORD (java_lang.Enum)
                  STATIC
                    CEILING*     : RoundingMode;
                    DOWN*        : RoundingMode;
                    FLOOR*       : RoundingMode;
                    HALF_DOWN*   : RoundingMode;
                    HALF_EVEN*   : RoundingMode;
                    HALF_UP*     : RoundingMode;
                    UNNECESSARY* : RoundingMode;
                    UP*          : RoundingMode;
                    PROCEDURE valueOf*(p0 : INTEGER) : RoundingMode;
                    PROCEDURE valueOf*(p0 : java_lang.String) : RoundingMode;
                    PROCEDURE values*() : POINTER TO ARRAY OF RoundingMode;
                  END;




PROCEDURE (self:BigDecimal) abs*(p0 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) abs*() : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) add*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) add*(p0 : BigDecimal;
                                 p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) byteValueExact*() : BYTE,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) compareTo*(p0 : BigDecimal) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) compareTo*(p0 : java_lang.Object) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal;
                                    p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal;
                                    p1 : RoundingMode) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal;
                                    p1 : INTEGER;
                                    p2 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal;
                                    p1 : INTEGER;
                                    p2 : RoundingMode) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divide*(p0 : BigDecimal;
                                    p1 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divideAndRemainder*(p0 : BigDecimal) : POINTER TO ARRAY OF BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divideAndRemainder*(p0 : BigDecimal;
                                                p1 : MathContext) : POINTER TO ARRAY OF BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divideToIntegralValue*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) divideToIntegralValue*(p0 : BigDecimal;
                                                   p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) doubleValue*() : REAL,EXTENSIBLE;

PROCEDURE (self:BigDecimal) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:BigDecimal) floatValue*() : SHORTREAL,EXTENSIBLE;

PROCEDURE (self:BigDecimal) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:BigDecimal) intValue*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:BigDecimal) intValueExact*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) longValue*() : LONGINT,EXTENSIBLE;

PROCEDURE (self:BigDecimal) longValueExact*() : LONGINT,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) max*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) min*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) movePointLeft*(p0 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) movePointRight*(p0 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) multiply*(p0 : BigDecimal;
                                      p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) multiply*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) negate*() : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) negate*(p0 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) plus*() : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) plus*(p0 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) pow*(p0 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) pow*(p0 : INTEGER;
                                 p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) precision*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) remainder*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) remainder*(p0 : BigDecimal;
                                       p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) round*(p0 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) scale*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) scaleByPowerOfTen*(p0 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) setScale*(p0 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) setScale*(p0 : INTEGER;
                                      p1 : RoundingMode) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) setScale*(p0 : INTEGER;
                                      p1 : INTEGER) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) shortValueExact*() : SHORTINT,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) signum*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) stripTrailingZeros*() : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) subtract*(p0 : BigDecimal) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) subtract*(p0 : BigDecimal;
                                      p1 : MathContext) : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) toBigInteger*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) toBigIntegerExact*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) toEngineeringString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) toPlainString*() : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:BigDecimal) ulp*() : BigDecimal,NEW,EXTENSIBLE;

PROCEDURE (self:BigDecimal) unscaledValue*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) abs*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) add*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) and*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) andNot*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) bitCount*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) bitLength*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) clearBit*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) compareTo*(p0 : java_lang.Object) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) compareTo*(p0 : BigInteger) : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) divide*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) divideAndRemainder*(p0 : BigInteger) : POINTER TO ARRAY OF BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) doubleValue*() : REAL,EXTENSIBLE;

PROCEDURE (self:BigInteger) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:BigInteger) flipBit*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) floatValue*() : SHORTREAL,EXTENSIBLE;

PROCEDURE (self:BigInteger) gcd*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) getLowestSetBit*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:BigInteger) intValue*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:BigInteger) isProbablePrime*(p0 : INTEGER) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) longValue*() : LONGINT,EXTENSIBLE;

PROCEDURE (self:BigInteger) max*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) min*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) mod*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) modInverse*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) modPow*(p0 : BigInteger;
                                    p1 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) multiply*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) negate*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) nextProbablePrime*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) not*() : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) or*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) pow*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) remainder*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) setBit*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) shiftLeft*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) shiftRight*(p0 : INTEGER) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) signum*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) subtract*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) testBit*(p0 : INTEGER) : BOOLEAN,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) toByteArray*() : POINTER TO ARRAY OF BYTE,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) toString*(p0 : INTEGER) : java_lang.String,NEW,EXTENSIBLE;

PROCEDURE (self:BigInteger) toString*() : java_lang.String,EXTENSIBLE;

PROCEDURE (self:BigInteger) xor*(p0 : BigInteger) : BigInteger,NEW,EXTENSIBLE;

PROCEDURE (self:MathContext) equals*(p0 : java_lang.Object) : BOOLEAN,EXTENSIBLE;

PROCEDURE (self:MathContext) getPrecision*() : INTEGER,NEW,EXTENSIBLE;

PROCEDURE (self:MathContext) getRoundingMode*() : RoundingMode,NEW,EXTENSIBLE;

PROCEDURE (self:MathContext) hashCode*() : INTEGER,EXTENSIBLE;

PROCEDURE (self:MathContext) toString*() : java_lang.String,EXTENSIBLE;

END java_math.