2 * Copyright (c) 2019 Pantheon Technologies, s.r.o. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.xpath.api;
10 import java.math.BigDecimal;
12 final class BigDecimalXPathMathSupport extends AbstractYangXPathMathSupport<BigDecimalNumberExpr> {
13 private static final BigDecimalXPathMathSupport INSTANCE = new BigDecimalXPathMathSupport();
14 private static final BigDecimalNumberExpr ZERO = BigDecimalNumberExpr.of(BigDecimal.ZERO);
15 private static final BigDecimalNumberExpr ONE = BigDecimalNumberExpr.of(BigDecimal.ONE);
16 private static final BigDecimalNumberExpr TEN = BigDecimalNumberExpr.of(BigDecimal.TEN);
18 private BigDecimalXPathMathSupport() {
19 super(BigDecimalNumberExpr.class);
22 static BigDecimalXPathMathSupport getInstance() {
27 public BigDecimalNumberExpr createNumber(final String str) {
36 return BigDecimalNumberExpr.of(new BigDecimal(str));
41 public BigDecimalNumberExpr createNumber(final int value) {
50 return BigDecimalNumberExpr.of(BigDecimal.valueOf(value));
55 BigDecimalNumberExpr doNegate(final BigDecimalNumberExpr number) {
56 return BigDecimalNumberExpr.of(number.getNumber().negate());
60 YangExpr evaluate(final YangBinaryOperator operator, final BigDecimalNumberExpr left,
61 final BigDecimalNumberExpr right) {
62 final BigDecimal l = left.getNumber();
63 final BigDecimal r = right.getNumber();
65 final BigDecimal result;
71 return YangBooleanConstantExpr.of(l.equals(r));
73 return YangBooleanConstantExpr.of(l.compareTo(r) > 0);
75 return YangBooleanConstantExpr.of(l.compareTo(r) >= 0);
77 return YangBooleanConstantExpr.of(l.compareTo(r) < 0);
79 return YangBooleanConstantExpr.of(l.compareTo(r) <= 0);
81 result = l.subtract(r);
84 result = l.remainder(r);
87 result = l.multiply(r);
90 return YangBooleanConstantExpr.of(!l.equals(r));
95 throw new IllegalStateException("Unhandled operator " + operator);
98 return BigDecimalNumberExpr.of(result);