From 20ddb355a947c78f80fe0bfdbe1b6d474f6ca6a1 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sun, 9 Apr 2017 11:56:22 +0200 Subject: [PATCH] add writeFloat() and writeDouble() --- .../jwebassembly/binary/WasmOutputStream.java | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/binary/WasmOutputStream.java b/src/de/inetsoftware/jwebassembly/binary/WasmOutputStream.java index 36772fa..b9db175 100644 --- a/src/de/inetsoftware/jwebassembly/binary/WasmOutputStream.java +++ b/src/de/inetsoftware/jwebassembly/binary/WasmOutputStream.java @@ -54,10 +54,10 @@ class WasmOutputStream extends FilterOutputStream { * if an I/O error occurs. */ void writeInt32( int value ) throws IOException { - write( (value >>> 0) & 0xFF ); - write( (value >>> 8) & 0xFF ); - write( (value >>> 16) & 0xFF ); - write( (value >>> 24) & 0xFF ); + write( value >>> 0 ); + write( value >>> 8 ); + write( value >>> 16 ); + write( value >>> 24 ); } /** @@ -105,6 +105,48 @@ class WasmOutputStream extends FilterOutputStream { } } + /** + * Write an float value. + * + * @param value + * the value + * @throws IOException + * if an I/O error occurs. + */ + void writeFloat( float value ) throws IOException { + int i = Float.floatToIntBits( value ); + writeInt( i ); + } + + /** + * Write an integer value as big endian (ever 4 bytes). + * + * @param value + * the value + * @throws IOException + * if an I/O error occurs. + */ + void writeInt( int value ) throws IOException { + write( value >>> 24 ); + write( value >>> 16 ); + write( value >>> 8 ); + write( value >>> 0 ); + } + + /** + * Write an double value. + * + * @param value + * the value + * @throws IOException + * if an I/O error occurs. + */ + void writeDouble( double value ) throws IOException { + long l = Double.doubleToLongBits(value); + writeInt( (int)(l >>> l) ); + writeInt( (int)l ); + } + /** * Write a section with header and data. *