/* GENERATED SOURCE. DO NOT MODIFY. */
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/* Generated from 'MathContext.nrx' 8 Sep 2000 11:07:48 [v2.00] */
/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */

package android.icu.math;

@SuppressWarnings({"unchecked", "deprecation", "all"})
public final class MathContext implements java.io.Serializable {

public MathContext(int setdigits) { throw new RuntimeException("Stub!"); }

public MathContext(int setdigits, int setform) { throw new RuntimeException("Stub!"); }

public MathContext(int setdigits, int setform, boolean setlostdigits) { throw new RuntimeException("Stub!"); }

public MathContext(int setdigits, int setform, boolean setlostdigits, int setroundingmode) { throw new RuntimeException("Stub!"); }

public int getDigits() { throw new RuntimeException("Stub!"); }

public int getForm() { throw new RuntimeException("Stub!"); }

public boolean getLostDigits() { throw new RuntimeException("Stub!"); }

public int getRoundingMode() { throw new RuntimeException("Stub!"); }

public java.lang.String toString() { throw new RuntimeException("Stub!"); }

public static final android.icu.math.MathContext DEFAULT;
static { DEFAULT = null; }

public static final int ENGINEERING = 2; // 0x2

public static final int PLAIN = 0; // 0x0

public static final int ROUND_CEILING = 2; // 0x2

public static final int ROUND_DOWN = 1; // 0x1

public static final int ROUND_FLOOR = 3; // 0x3

public static final int ROUND_HALF_DOWN = 5; // 0x5

public static final int ROUND_HALF_EVEN = 6; // 0x6

public static final int ROUND_HALF_UP = 4; // 0x4

public static final int ROUND_UNNECESSARY = 7; // 0x7

public static final int ROUND_UP = 0; // 0x0

public static final int SCIENTIFIC = 1; // 0x1
}

