01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.planning.ldm.plan;
28:
29: /** An AspectValue implementation which stores a double.
30: */
31:
32: public class DoubleAspectValue extends TypedAspectValue {
33: private final double value;
34:
35: protected DoubleAspectValue(int type, double value) {
36: super (type);
37: if (Double.isNaN(value) || Double.isInfinite(value))
38: throw new IllegalArgumentException(
39: "The value of a DoubleAspectValue must be a finite, non-NaN");
40: this .value = value;
41: }
42:
43: public static AspectValue create(int type, Object o) {
44: double value;
45: if (o instanceof Number) {
46: value = ((Number) o).doubleValue();
47: } else if (o instanceof AspectValue) {
48: value = ((AspectValue) o).doubleValue();
49: } else {
50: throw new IllegalArgumentException(
51: "Cannot construct a DoubleAspectValue from " + o);
52: }
53: return new DoubleAspectValue(type, value);
54: }
55:
56: public final double doubleValue() {
57: return value;
58: }
59:
60: public final long longValue() {
61: return Math.round(value);
62: }
63:
64: public final float floatValue() {
65: return (float) value;
66: }
67:
68: public final int intValue() {
69: return (int) Math.round(value);
70: }
71:
72: public boolean equals(Object v) {
73: if (v instanceof DoubleAspectValue) {
74: return (getType() == ((AspectValue) v).getType() && doubleValue() == ((AspectValue) v)
75: .doubleValue());
76: } else {
77: return false;
78: }
79: }
80:
81: public int hashCode() {
82: return getType() + ((int) (doubleValue() * 128));
83: }
84:
85: public String toString() {
86: return Double.toString(doubleValue()) + "[" + getType() + "]";
87: }
88:
89: }
|