diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java | |
download | otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2 otp-84adefa331c4159d432d22840663c38f155cd4c1.zip |
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java')
-rw-r--r-- | lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java new file mode 100644 index 0000000000..793940e858 --- /dev/null +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java @@ -0,0 +1,132 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2000-2009. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ +package com.ericsson.otp.erlang; + +import java.io.Serializable; + +/** + * Provides a Java representation of Erlang floats and doubles. Erlang defines + * only one floating point numeric type, however this class and its subclass + * {@link OtpErlangFloat} are used to provide representations corresponding to + * the Java types Double and Float. + */ +public class OtpErlangDouble extends OtpErlangObject implements Serializable, + Cloneable { + // don't change this! + static final long serialVersionUID = 132947104811974021L; + + private final double d; + + /** + * Create an Erlang float from the given double value. + */ + public OtpErlangDouble(final double d) { + this.d = d; + } + + /** + * Create an Erlang float from a stream containing a double encoded in + * Erlang external format. + * + * @param buf + * the stream containing the encoded value. + * + * @exception OtpErlangDecodeException + * if the buffer does not contain a valid external + * representation of an Erlang float. + */ + public OtpErlangDouble(final OtpInputStream buf) + throws OtpErlangDecodeException { + d = buf.read_double(); + } + + /** + * Get the value, as a double. + * + * @return the value of this object, as a double. + */ + public double doubleValue() { + return d; + } + + /** + * Get the value, as a float. + * + * @return the value of this object, as a float. + * + * @exception OtpErlangRangeException + * if the value cannot be represented as a float. + */ + public float floatValue() throws OtpErlangRangeException { + final float f = (float) d; + + if (f != d) { + throw new OtpErlangRangeException("Value too large for float: " + d); + } + + return f; + } + + /** + * Get the string representation of this double. + * + * @return the string representation of this double. + */ + @Override + public String toString() { + return "" + d; + } + + /** + * Convert this double to the equivalent Erlang external representation. + * + * @param buf + * an output stream to which the encoded value should be + * written. + */ + @Override + public void encode(final OtpOutputStream buf) { + buf.write_double(d); + } + + /** + * Determine if two floats are equal. Floats are equal if they contain the + * same value. + * + * @param o + * the float to compare to. + * + * @return true if the floats have the same value. + */ + @Override + public boolean equals(final Object o) { + if (!(o instanceof OtpErlangDouble)) { + return false; + } + + final OtpErlangDouble d = (OtpErlangDouble) o; + return this.d == d.d; + } + + @Override + protected int doHashCode() { + Double v = new Double(d); + return v.hashCode(); + } +} |