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