Remove generics from YangNumberExpr
[yangtools.git] / yang / yang-xpath-api / src / main / java / org / opendaylight / yangtools / yang / xpath / api / DoubleXPathMathSupport.java
1 /*
2  * Copyright (c) 2019 Pantheon Technologies, s.r.o.  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.xpath.api;
9
10 final class DoubleXPathMathSupport extends AbstractYangXPathMathSupport<DoubleNumberExpr> {
11     static final DoubleXPathMathSupport INSTANCE = new DoubleXPathMathSupport();
12
13     private DoubleXPathMathSupport() {
14         super(DoubleNumberExpr.class);
15     }
16
17     @Override
18     public DoubleNumberExpr createNumber(final String str) {
19         return DoubleNumberExpr.of(Double.parseDouble(str));
20     }
21
22     @Override
23     public DoubleNumberExpr createNumber(final int value) {
24         return DoubleNumberExpr.of(value);
25     }
26
27     @Override
28     protected DoubleNumberExpr doNegateNumber(final DoubleNumberExpr number) {
29         return DoubleNumberExpr.of(-number.getValue());
30     }
31
32     @Override
33     protected YangExpr doEvaluate(final YangBinaryOperator operator, final DoubleNumberExpr left,
34             final DoubleNumberExpr right) {
35         final double l = left.getValue();
36         final double r = right.getValue();
37
38         final double result;
39         switch (operator) {
40             case DIV:
41                 result = l / r;
42                 break;
43             case EQUALS:
44                 return YangBooleanConstantExpr.of(left.equals(right));
45             case GT:
46                 return YangBooleanConstantExpr.of(l > r);
47             case GTE:
48                 return YangBooleanConstantExpr.of(l >= r);
49             case LT:
50                 return YangBooleanConstantExpr.of(l < r);
51             case LTE:
52                 return YangBooleanConstantExpr.of(l <= r);
53             case MINUS:
54                 result = l - r;
55                 break;
56             case MOD:
57                 result = l % r;
58                 break;
59             case MUL:
60                 result = l * r;
61                 break;
62             case NOT_EQUALS:
63                 return YangBooleanConstantExpr.of(!left.equals(right));
64             case PLUS:
65                 result = l + r;
66                 break;
67             default:
68                 throw new IllegalStateException("Unhandled operator " + operator);
69         }
70
71         return DoubleNumberExpr.of(result);
72     }
73 }