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 static final BigDecimalXPathMathSupport INSTANCE = new BigDecimalXPathMathSupport();
15 private static final long serialVersionUID = 1L;
16 private static final BigDecimalNumberExpr ZERO = BigDecimalNumberExpr.of(BigDecimal.ZERO);
17 private static final BigDecimalNumberExpr ONE = BigDecimalNumberExpr.of(BigDecimal.ONE);
18 private static final BigDecimalNumberExpr TEN = BigDecimalNumberExpr.of(BigDecimal.TEN);
20 private BigDecimalXPathMathSupport() {
21 super(BigDecimalNumberExpr.class);
25 public BigDecimalNumberExpr createNumber(final String str) {
34 return BigDecimalNumberExpr.of(new BigDecimal(str));
39 public BigDecimalNumberExpr createNumber(final int value) {
48 return BigDecimalNumberExpr.of(BigDecimal.valueOf(value));
53 protected BigDecimalNumberExpr doNegateNumber(final BigDecimalNumberExpr number) {
54 return BigDecimalNumberExpr.of(number.getNumber().negate());
58 protected YangExpr doEvaluate(final YangBinaryOperator operator, final BigDecimalNumberExpr left,
59 final BigDecimalNumberExpr right) {
60 final BigDecimal l = left.getNumber();
61 final BigDecimal r = right.getNumber();
63 return switch (operator) {
64 case DIV -> BigDecimalNumberExpr.of(l.divide(r));
65 case EQUALS -> YangBooleanConstantExpr.of(l.equals(r));
66 case GT -> YangBooleanConstantExpr.of(l.compareTo(r) > 0);
67 case GTE -> YangBooleanConstantExpr.of(l.compareTo(r) >= 0);
68 case LT -> YangBooleanConstantExpr.of(l.compareTo(r) < 0);
69 case LTE -> YangBooleanConstantExpr.of(l.compareTo(r) <= 0);
70 case MINUS -> BigDecimalNumberExpr.of(l.subtract(r));
71 case MOD -> BigDecimalNumberExpr.of(l.remainder(r));
72 case MUL -> BigDecimalNumberExpr.of(l.multiply(r));
73 case NOT_EQUALS -> YangBooleanConstantExpr.of(!l.equals(r));
74 case PLUS -> BigDecimalNumberExpr.of(l.add(r));
79 protected Object readResolve() {