From: Vlad D. <vl...@us...> - 2006-09-04 19:43:08
|
Update of /cvsroot/jungerl/jungerl/lib/otp.net/Otp In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv26144/lib/otp.net/Otp Modified Files: OtpInputStream.cs Log Message: fixes from Paul Shaffer Index: OtpInputStream.cs =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/otp.net/Otp/OtpInputStream.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- OtpInputStream.cs 8 May 2004 20:35:59 -0000 1.1 +++ OtpInputStream.cs 4 Sep 2006 19:43:02 -0000 1.2 @@ -342,30 +342,25 @@ throw new Erlang.DecodeException("Value cannot be represented as float: " + d); return f; } - /* - * Read an Erlang float from the stream. - * - * @return the float value, as a double. - * - * @exception Erlang.DecodeException if the next term in the - * stream is not a float. - **/ - public virtual double read_double() + /* + * Read an Erlang float from the stream. + * + * @return the float value, as a double. + * + * @exception Erlang.DecodeException if the next term in the + * stream is not a float. + * + **/ + public virtual double read_double() { return getFloatOrDouble(); } private double getFloatOrDouble() { - double val = 0.0; - int epos; - int exp; - byte[] strbuf = new byte[31]; - System.String str; - int tag; // parse the stream - tag = this.read1(); + int tag = this.read1(); if (tag == OtpExternal.versionTag) { tag = this.read1(); @@ -377,34 +372,27 @@ } // get the string + byte[] strbuf = new byte[31]; this.readN(strbuf); - char[] tmpChar; - tmpChar = new char[strbuf.Length]; - strbuf.CopyTo(tmpChar, 0); - str = new System.String(tmpChar); - - // find the exponent prefix 'e' in the string - epos = str.IndexOf((System.Char) 'e', 0); - - if (epos < 0) - { - throw new Erlang.DecodeException("Invalid float format: '" + str + "'"); - } - - // remove the sign from the exponent, if positive - System.String estr = str.Substring(epos + 1).Trim(); - if (estr.Substring(0, (1) - (0)).Equals("+")) - { - estr = estr.Substring(1); - } - - // now put the mantissa and exponent together - exp = System.Int32.Parse(estr); - //UPGRADE_TODO: The equivalent in .NET for Class java.math.BigDecimal will be considered in a future release.; -// val = new BigDecimal(str.Substring(0, (epos) - (0))).movePointRight(exp); - - return val; + char[] tmpChar = new char[strbuf.Length]; + strbuf.CopyTo(tmpChar, 0); + System.String str = new System.String(tmpChar); + //System.Diagnostics.Debug.WriteLine("getFloatOrDouble: str = " + str); + + double parsedValue = 0.0; + + try + { + // Easier than the java version. + parsedValue = System.Double.Parse(str); + } + catch + { + throw new Erlang.DecodeException("Error parsing float format: '" + str + "'"); + } + return parsedValue; + } /* @@ -934,6 +922,8 @@ tag = this.peek(); } + //System.Diagnostics.Debug.WriteLine("read_any: tag = " + tag); + switch (tag) { case OtpExternal.smallIntTag: case OtpExternal.intTag: case OtpExternal.smallBigTag: |