001    package data;
002    
003    /**
004     * A NumberValue that is based on a {@link java.lang.Double} object.
005     *
006     * <p>All operations are implemented as one might expect.</p>
007     *
008     * @author Steffen Zschaler
009     * @version 2.0 19/08/1999
010     * @since v2.0
011     */
012    public class DoubleValue extends NumberValue {
013    
014        /**
015         * Create a new DoubleValue.
016         *
017         * @param nbValue the initial value of the object. Will be converted to a {@link java.lang.Double}.
018         */
019        public DoubleValue(Number nbValue) {
020            super(nbValue);
021        }
022    
023        /**
024         * Create a new DoubleValue.
025         *
026         * @param dlValue the initial value of the object.
027         */
028        public DoubleValue(double dlValue) {
029            this(new Double(dlValue));
030        }
031    
032        /**
033         * Convert the given value to a {@link java.lang.Double} before setting the actual value of the object.
034         *
035         * @override Never
036         */
037        public void setValue(Number nbValue) {
038            super.setValue(new Double(nbValue.doubleValue()));
039        }
040    
041        /**
042         * @override Never
043         */
044        public void addAccumulating(Value v) {
045            Number nbV = ((NumberValue)v).getValue();
046    
047            super.setValue(new Double(getValue().doubleValue() + nbV.doubleValue()));
048        }
049    
050        /**
051         * @override Never
052         */
053        public void subtractAccumulating(Value v) {
054            Number nbV = ((NumberValue)v).getValue();
055    
056            super.setValue(new Double(getValue().doubleValue() - nbV.doubleValue()));
057        }
058    
059        /**
060         * @override Never
061         */
062        public void multiplyAccumulating(Value v) {
063            Number nbV = ((NumberValue)v).getValue();
064    
065            super.setValue(new Double(getValue().doubleValue() * nbV.doubleValue()));
066        }
067    
068        /**
069         * @override Never
070         */
071        public void multiplyAccumulating(double dl) {
072            super.setValue(new Double(getValue().doubleValue() * dl));
073        }
074    
075        /**
076         * @override Never
077         */
078        public void multiplyAccumulating(float fl) {
079            super.setValue(new Double(getValue().doubleValue() * fl));
080        }
081    
082        /**
083         * @override Never
084         */
085        public void multiplyAccumulating(long l) {
086            super.setValue(new Double(getValue().doubleValue() * l));
087        }
088    
089        /**
090         * @override Never
091         */
092        public void multiplyAccumulating(int n) {
093            super.setValue(new Double(getValue().doubleValue() * n));
094        }
095    
096        /**
097         * @override Never
098         */
099        public void divideAccumulating(Value v) {
100            Number nbV = ((NumberValue)v).getValue();
101    
102            super.setValue(new Double(getValue().doubleValue() / nbV.doubleValue()));
103        }
104    
105        /**
106         * @override Never
107         */
108        public Value add(Value v) {
109            Number nbV = ((NumberValue)v).getValue();
110    
111            return new DoubleValue(new Double(getValue().doubleValue() + nbV.doubleValue()));
112        }
113    
114        /**
115         * @override Never
116         */
117        public Value subtract(Value v) {
118            Number nbV = ((NumberValue)v).getValue();
119    
120            return new DoubleValue(new Double(getValue().doubleValue() - nbV.doubleValue()));
121        }
122    
123        /**
124         * @override Never
125         */
126        public Value multiply(Value v) {
127            Number nbV = ((NumberValue)v).getValue();
128    
129            return new DoubleValue(new Double(getValue().doubleValue() * nbV.doubleValue()));
130        }
131    
132        /**
133         * @override Never
134         */
135        public Value multiply(double dl) {
136            return new DoubleValue(new Double(getValue().doubleValue() * dl));
137        }
138    
139        /**
140         * @override Never
141         */
142        public Value multiply(float fl) {
143            return new DoubleValue(new Double(getValue().doubleValue() * fl));
144        }
145    
146        /**
147         * @override Never
148         */
149        public Value multiply(long l) {
150            return new DoubleValue(new Double(getValue().doubleValue() * l));
151        }
152    
153        /**
154         * @override Never
155         */
156        public Value multiply(int n) {
157            return new DoubleValue(new Double(getValue().doubleValue() * n));
158        }
159    
160        /**
161         * @override Never
162         */
163        public Value divide(Value v) {
164            Number nbV = ((NumberValue)v).getValue();
165    
166            return new DoubleValue(new Double(getValue().doubleValue() / nbV.doubleValue()));
167        }
168    
169        /**
170         * Compare this value to the given one.
171         *
172         * @override Never
173         *
174         * @exception ClassCastException if the given object cannot be casted into a {@link NumberValue}.
175         */
176        public int compareTo(Object o) {
177            Number nbO = ((NumberValue)o).getValue();
178    
179            double dlDiff = (getValue().doubleValue() - nbO.doubleValue());
180    
181            if (dlDiff > 0) {
182                return 1;
183            } else {
184                if (dlDiff < 0) {
185                    return -1;
186                } else {
187                    return 0;
188                }
189            }
190        }
191    
192        /**
193         * @override Never
194         */
195        public Object clone() {
196            return new DoubleValue(new Double(getValue().doubleValue()));
197        }
198    
199        /**
200         * Correctly checks <code>getValue().doubleValue()</code>.
201         *
202         * @override Never
203         */
204        public boolean isAddZero() {
205            return (getValue().doubleValue() == 0);
206        }
207    
208        /**
209         * Correctly checks <code>getValue().doubleValue()</code>.
210         *
211         * @override Never
212         */
213        public boolean isMulOne() {
214            return (getValue().doubleValue() == 1);
215        }
216    }