From 43271e0c5e29ca731f8d47e7304ec1cae4f13db6 Mon Sep 17 00:00:00 2001 From: Rainer Klute Date: Wed, 13 Apr 2005 16:33:22 +0000 Subject: [PATCH] - Support for variant type VT_R8 added. git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353637 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/hpsf/TypeWriter.java | 20 ++++++++++++++++--- .../org/apache/poi/hpsf/VariantSupport.java | 15 ++++++++++++++ .../org/apache/poi/hpsf/basic/TestWrite.java | 1 + 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/poi/hpsf/TypeWriter.java b/src/java/org/apache/poi/hpsf/TypeWriter.java index 3f0f48800..c88e98d07 100644 --- a/src/java/org/apache/poi/hpsf/TypeWriter.java +++ b/src/java/org/apache/poi/hpsf/TypeWriter.java @@ -169,8 +169,22 @@ public class TypeWriter - - - + /** + *

Writes a double value value to an output stream.

+ * + * @param out The stream to write to. + * @param n The value to write. + * @exception IOException if an I/O error occurs + * @return The number of bytes written to the output stream. + */ + public static int writeToStream(final OutputStream out, final double n) + throws IOException + { + final int l = LittleEndian.DOUBLE_SIZE; + final byte[] buffer = new byte[l]; + LittleEndian.putDouble(buffer, 0, n); + out.write(buffer, 0, l); + return l; + } } diff --git a/src/java/org/apache/poi/hpsf/VariantSupport.java b/src/java/org/apache/poi/hpsf/VariantSupport.java index 081e7f4dd..b9ab14ffc 100644 --- a/src/java/org/apache/poi/hpsf/VariantSupport.java +++ b/src/java/org/apache/poi/hpsf/VariantSupport.java @@ -169,6 +169,15 @@ public class VariantSupport extends Variant value = new Long(LittleEndian.getUInt(src, o1)); break; } + case Variant.VT_R8: + { + /* + * Read an eight-byte double value. In Java it is represented as + * a Double object. + */ + value = new Double(LittleEndian.getDouble(src, o1)); + break; + } case Variant.VT_FILETIME: { /* @@ -394,6 +403,12 @@ public class VariantSupport extends Variant ((Long) value).intValue()); break; } + case Variant.VT_R8: + { + length += TypeWriter.writeToStream(out, + ((Double) value).doubleValue()); + break; + } case Variant.VT_FILETIME: { long filetime = Util.dateToFileTime((Date) value); diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java b/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java index bec47c737..3fa12d83f 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java @@ -411,6 +411,7 @@ public class TestWrite extends TestCase check(Variant.VT_CF, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}, codepage); check(Variant.VT_I2, new Integer(27), codepage); check(Variant.VT_I4, new Long(28), codepage); + check(Variant.VT_R8, new Double(29.0), codepage); check(Variant.VT_FILETIME, new Date(), codepage); check(Variant.VT_LPSTR,