Fix BaseDecimalType scales
[yangtools.git] / model / yang-model-ri / src / main / java / org / opendaylight / yangtools / yang / model / ri / type / BaseDecimalType.java
index 04e8a0449dce10f974eadf11381c28031aaecded..374ef46f1481e696b13d140bfa6b1fdb4b41709f 100644 (file)
@@ -12,16 +12,16 @@ import static com.google.common.base.Verify.verifyNotNull;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableRangeSet;
 import com.google.common.collect.Range;
-import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Optional;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 
-final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition, BigDecimal>
+final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition, Decimal64>
         implements DecimalTypeDefinition {
     private static final ConstraintMetaDefinition BUILTIN_CONSTRAINT = new ConstraintMetaDefinition() {
 
@@ -46,39 +46,25 @@ final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeD
         }
     };
 
-    private static final ImmutableList<RangeConstraint<BigDecimal>> IMPLICIT_RANGE_STATEMENTS = ImmutableList.of(
-        createRangeConstraint("-922337203685477580.8", "922337203685477580.7"),
-        createRangeConstraint("-92233720368547758.08", "92233720368547758.07"),
-        createRangeConstraint("-9223372036854775.808", "9223372036854775.807"),
-        createRangeConstraint("-922337203685477.5808", "922337203685477.5807"),
-        createRangeConstraint("-92233720368547.75808", "92233720368547.75807"),
-        createRangeConstraint("-9223372036854.775808", "9223372036854.775807"),
-        createRangeConstraint("-922337203685.4775808", "922337203685.4775807"),
-        createRangeConstraint("-92233720368.54775808", "92233720368.54775807"),
-        createRangeConstraint("-9223372036.854775808", "9223372036.854775807"),
-        createRangeConstraint("-922337203.6854775808", "922337203.6854775807"),
-        createRangeConstraint("-92233720.36854775808", "92233720.36854775807"),
-        createRangeConstraint("-9223372.036854775808", "9223372.036854775807"),
-        createRangeConstraint("-922337.2036854775808", "922337.2036854775807"),
-        createRangeConstraint("-92233.72036854775808", "92233.72036854775807"),
-        createRangeConstraint("-9223.372036854775808", "9223.372036854775807"),
-        createRangeConstraint("-922.3372036854775808", "922.3372036854775807"),
-        createRangeConstraint("-92.23372036854775808", "92.23372036854775807"),
-        createRangeConstraint("-9.223372036854775808", "9.223372036854775807"));
-
-    private static RangeConstraint<BigDecimal> createRangeConstraint(final String min, final String max) {
-        return new ResolvedRangeConstraint<>(BUILTIN_CONSTRAINT, ImmutableRangeSet.of(
-            Range.closed(new BigDecimal(min), new BigDecimal(max))));
+    private static final ImmutableList<RangeConstraint<Decimal64>> IMPLICIT_RANGE_STATEMENTS;
+
+    static {
+        final var builder = ImmutableList.<RangeConstraint<Decimal64>>builderWithExpectedSize(18);
+        for (int scale = 1; scale <= 18; ++scale) {
+            builder.add(new ResolvedRangeConstraint<>(BUILTIN_CONSTRAINT, ImmutableRangeSet.of(Range.closed(
+                Decimal64.minValueIn(scale), Decimal64.maxValueIn(scale)))));
+        }
+        IMPLICIT_RANGE_STATEMENTS = builder.build();
     }
 
-    static RangeConstraint<BigDecimal> constraintsForDigits(final int fractionDigits) {
+    static RangeConstraint<Decimal64> constraintsForDigits(final int fractionDigits) {
         return verifyNotNull(IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1));
     }
 
     private final int fractionDigits;
 
     BaseDecimalType(final QName qname, final Collection<? extends UnknownSchemaNode> unknownSchemaNodes,
-            final int fractionDigits, final RangeConstraint<BigDecimal> rangeConstraint) {
+            final int fractionDigits, final RangeConstraint<Decimal64> rangeConstraint) {
         super(qname, unknownSchemaNodes, rangeConstraint);
         this.fractionDigits = fractionDigits;
     }