Require scale for integral conversions and RoundingMode for float
[yangtools.git] / common / yang-common / src / main / java / org / opendaylight / yangtools / yang / common / Decimal64Conversion.java
1 /*
2  * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.common;
9
10 import org.eclipse.jdt.annotation.NonNullByDefault;
11
12 /**
13  * Conversion constants for all scales supported by Decimal64.
14  */
15 @NonNullByDefault
16 enum Decimal64Conversion {
17     SCALE_1(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
18             -922337203685477580L,   922337203685477580L,
19             -922337203685477580.8F, 922337203685477580.7F,
20             -922337203685477580.8D, 922337203685477580.7D),
21     SCALE_2(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
22             -92233720368547758L,    92233720368547758L,
23             -92233720368547758.08F, 92233720368547758.07F,
24             -92233720368547758.08F, 92233720368547758.07D),
25     SCALE_3(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
26             -9223372036854775L,     9223372036854775L,
27             -9223372036854775.808F, 9223372036854775.807F,
28             -9223372036854775.808D, 9223372036854775.807D),
29     SCALE_4(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
30             -922337203685477L,      922337203685477L,
31             -922337203685477.5808F, 922337203685477.5807F,
32             -922337203685477.5808D, 922337203685477.5807D),
33     SCALE_5(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
34             -92233720368547L,       92233720368547L,
35             -92233720368547.75808F, 92233720368547.75807F,
36             -92233720368547.75808D, 92233720368547.75807D),
37     SCALE_6(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
38             -9223372036854L,        9223372036854L,
39             -9223372036854.775808F, 9223372036854.775807F,
40             -9223372036854.775808D, 9223372036854.775807D),
41     SCALE_7(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
42             -922337203685L,         922337203685L,
43             -922337203685.4775808F, 922337203685.4775807F,
44             -922337203685.4775808D, 922337203685.4775807D),
45     SCALE_8(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
46             -92233720368L,          92233720368L,
47             -92233720368.54775808F, 92233720368.54775807F,
48             -92233720368.54775808D, 92233720368.54775807D),
49     SCALE_9(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE,
50             -9223372036L,           9223372036L,
51             -9223372036.854775808F, 9223372036.854775807F,
52             -9223372036.854775808D, 9223372036.854775807D),
53     SCALE_10(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, -922337203, 922337203,
54             -922337203L,            922337203L,
55             -922337203.6854775808F, 922337203.6854775807F,
56             -922337203.6854775808D, 922337203.6854775807D),
57     SCALE_11(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, -92233720, 92233720,
58             -92233720L,             92233720L,
59             -92233720.36854775808F, 92233720.36854775807F,
60             -92233720.36854775808D, 92233720.36854775807D),
61     SCALE_12(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, -9223372, 9223372, -9223372L, 9223372L,
62             -9223372.036854775808F, 9223372.036854775807F,
63             -9223372.036854775808D, 9223372.036854775807D),
64     SCALE_13(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, -922337, 922337, -922337L, 922337L,
65             -922337.2036854775808F, 922337.2036854775807F,
66             -922337.2036854775808D, 922337.2036854775807D),
67     SCALE_14(Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, Short.MAX_VALUE, -92233, 92233, -92233L, 92233L,
68             -92233.72036854775808F, 92233.72036854775807F,
69             -92233.72036854775808D, 92233.72036854775807D),
70     SCALE_15(Byte.MIN_VALUE, Byte.MAX_VALUE, (short) -9223, (short) 9223, -9223, 9223, -9223L, 9223L,
71             -9223.372036854775808F, 9223.372036854775807F,
72             -9223.372036854775808D, 9223.372036854775807D),
73     SCALE_16(Byte.MIN_VALUE, Byte.MAX_VALUE, (short) -922, (short) 922, -922, 922, -922L, 922L,
74             -922.3372036854775808F, 922.3372036854775807F,
75             -922.3372036854775808D, 922.3372036854775807D),
76     SCALE_17((byte) -92, (byte)92, (short) -92, (short) 92, -92, 92, -92L, 92L,
77             -92.23372036854775808F, 92.23372036854775807F,
78             -92.23372036854775808D, 92.23372036854775807D),
79     SCALE_18((byte) -9, (byte)9, (short) -9, (short) 9, -9, 9, -9L, 9L,
80             -9.223372036854775808F, 9.223372036854775807F,
81             -9.223372036854775808D, 9.223372036854775807D);
82
83     final byte minByte;
84     final byte maxByte;
85
86     final short minShort;
87     final short maxShort;
88
89     final int minInt;
90     final int maxInt;
91
92     final long minLong;
93     final long maxLong;
94
95     final float minFloat;
96     final float maxFloat;
97
98     final double minDouble;
99     final double maxDouble;
100
101     Decimal64Conversion(
102             final byte minByte, final byte maxByte,
103             final short minShort, final short maxShort,
104             final int minInt, final int maxInt,
105             final long minLong, final long maxLong,
106             final float minFloat, final float maxFloat,
107             final double minDouble, final double maxDouble) {
108         this.minByte = minByte;
109         this.maxByte = maxByte;
110         this.minShort = minShort;
111         this.maxShort = maxShort;
112         this.minInt = minInt;
113         this.maxInt = maxInt;
114         this.minLong = minLong;
115         this.maxLong = maxLong;
116         this.minFloat = minFloat;
117         this.maxFloat = maxFloat;
118         this.minDouble = minDouble;
119         this.maxDouble = maxDouble;
120     }
121 }