#
# Licensed to Elasticsearch under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

#
# Painless definition file. This defines the hierarchy of classes,
# what methods and fields they have, etc.
#

#### Classes

class BigDecimal -> java.math.BigDecimal extends Number,Comparable,Object {
  BigDecimal ONE
  BigDecimal TEN
  BigDecimal ZERO
  BigDecimal <init>(String)
  BigDecimal <init>(String,MathContext)
  BigDecimal abs()
  BigDecimal abs(MathContext)
  BigDecimal add(BigDecimal)
  BigDecimal add(BigDecimal,MathContext)
  byte byteValueExact()
  int compareTo(BigDecimal)
  BigDecimal divide(BigDecimal)
  BigDecimal divide(BigDecimal,MathContext)
  BigDecimal[] divideAndRemainder(BigDecimal)
  BigDecimal[] divideAndRemainder(BigDecimal,MathContext)
  BigDecimal divideToIntegralValue(BigDecimal)
  BigDecimal divideToIntegralValue(BigDecimal,MathContext)
  int intValueExact()
  long longValueExact()
  BigDecimal max(BigDecimal)
  BigDecimal min(BigDecimal)
  BigDecimal movePointLeft(int)
  BigDecimal movePointRight(int)
  BigDecimal multiply(BigDecimal)
  BigDecimal multiply(BigDecimal,MathContext)
  BigDecimal negate()
  BigDecimal negate(MathContext)
  BigDecimal plus()
  BigDecimal plus(MathContext)
  BigDecimal pow(int)
  BigDecimal pow(int,MathContext)
  int precision()
  BigDecimal remainder(BigDecimal)
  BigDecimal remainder(BigDecimal,MathContext)
  BigDecimal round(MathContext)
  int scale()
  BigDecimal scaleByPowerOfTen(int)
  BigDecimal setScale(int)
  BigDecimal setScale(int,RoundingMode)
  short shortValueExact()
  int signum()
  BigDecimal stripTrailingZeros()
  BigDecimal subtract(BigDecimal)
  BigDecimal subtract(BigDecimal,MathContext)
  BigInteger toBigInteger()
  BigInteger toBigIntegerExact()
  String toEngineeringString()
  String toPlainString()
  BigDecimal ulp()
  BigDecimal valueOf(double)
}

class BigInteger -> java.math.BigInteger extends Number,Comparable,Object {
  BigInteger ONE
  BigInteger TEN
  BigInteger ZERO
  BigInteger <init>(String)
  BigInteger <init>(String,int)
  BigInteger abs()
  BigInteger add(BigInteger)
  BigInteger and(BigInteger)
  BigInteger andNot(BigInteger)
  int bitCount()
  int bitLength()
  byte byteValueExact()
  BigInteger clearBit(int)
  int compareTo(BigInteger)
  BigInteger divide(BigInteger)
  BigInteger[] divideAndRemainder(BigInteger)
  BigInteger flipBit(int)
  BigInteger gcd(BigInteger)
  int getLowestSetBit()
  int intValueExact()
  long longValueExact()
  BigInteger max(BigInteger)
  BigInteger min(BigInteger)
  BigInteger mod(BigInteger)
  BigInteger modInverse(BigInteger)
  BigInteger modPow(BigInteger,BigInteger)
  BigInteger multiply(BigInteger)
  BigInteger negate()
  BigInteger not()
  BigInteger or(BigInteger)
  BigInteger pow(int)
  BigInteger remainder(BigInteger)
  BigInteger setBit(int)
  BigInteger shiftLeft(int)
  BigInteger shiftRight(int)
  short shortValueExact()
  int signum()
  BigInteger subtract(BigInteger)
  boolean testBit(int)
  byte[] toByteArray()
  String toString(int)
  BigInteger valueOf(long)
  BigInteger xor(BigInteger)
}

class MathContext -> java.math.MathContext extends Object {
  MathContext DECIMAL128
  MathContext DECIMAL32
  MathContext DECIMAL64
  MathContext UNLIMITED
  MathContext <init>(int)
  MathContext <init>(int,RoundingMode)
  int getPrecision()
  RoundingMode getRoundingMode()
}

#### Enums

class RoundingMode -> java.math.RoundingMode extends Enum,Object {
  RoundingMode CEILING
  RoundingMode DOWN
  RoundingMode FLOOR
  RoundingMode HALF_DOWN
  RoundingMode HALF_EVEN
  RoundingMode HALF_UP
  RoundingMode UNNECESSARY
  RoundingMode UP
  RoundingMode valueOf(String)
  RoundingMode[] values()
}

