2 * Copyright (c) 2018 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 static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import java.math.BigDecimal;
14 import org.eclipse.jdt.annotation.Nullable;
17 * A number-bearing expression.
20 public abstract class YangNumberExpr<T extends YangNumberExpr<T, N>, N extends Number> implements YangExpr {
21 public static final class YangBigDecimal extends YangNumberExpr<YangBigDecimal, BigDecimal> {
22 private static final long serialVersionUID = 1L;
24 private final BigDecimal number;
26 YangBigDecimal(final BigDecimal number) {
27 this.number = requireNonNull(number);
31 public BigDecimal getNumber() {
36 public int hashCode() {
37 return number.hashCode();
41 public boolean equals(final @Nullable Object obj) {
42 return this == obj || obj instanceof YangBigDecimal
43 && number.equals(((YangBigDecimal) obj).number);
47 public String toString() {
48 return number.toString();
52 public static final class YangDouble extends YangNumberExpr<YangDouble, Double> {
53 private static final long serialVersionUID = 1L;
55 private final double value;
57 YangDouble(final double value) {
61 public double getValue() {
66 public Double getNumber() {
71 public int hashCode() {
72 return Double.hashCode(value);
76 public boolean equals(final @Nullable Object obj) {
77 return this == obj || obj instanceof YangDouble && value == ((YangDouble) obj).value;
81 public String toString() {
82 return String.valueOf(value);
87 private static final long serialVersionUID = 1L;
90 // Hidden to prevent external subclassing
93 public static YangBigDecimal of(final BigDecimal number) {
94 return new YangBigDecimal(number);
97 public static YangDouble of(final double value) {
98 return new YangDouble(value);
101 public abstract N getNumber();