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 BigDecimalNumberExpr doNegate(final BigDecimalNumberExpr number) {
42 return BigDecimalNumberExpr.of(number.getNumber().negate());
46 YangExpr evaluate(final YangBinaryOperator operator, final BigDecimalNumberExpr left,
47 final BigDecimalNumberExpr right) {
48 final BigDecimal l = left.getNumber();
49 final BigDecimal r = right.getNumber();
51 final BigDecimal result;
57 return YangBooleanConstantExpr.of(l.equals(r));
59 return YangBooleanConstantExpr.of(l.compareTo(r) > 0);
61 return YangBooleanConstantExpr.of(l.compareTo(r) >= 0);
63 return YangBooleanConstantExpr.of(l.compareTo(r) < 0);
65 return YangBooleanConstantExpr.of(l.compareTo(r) <= 0);
67 result = l.subtract(r);
70 result = l.remainder(r);
73 result = l.multiply(r);
76 return YangBooleanConstantExpr.of(!l.equals(r));
81 throw new IllegalStateException("Unhandled operator " + operator);
84 return BigDecimalNumberExpr.of(result);