--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2010 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.util.binary;
+
+import java.io.IOException;\r
+import java.io.OutputStream;\r
+import java.nio.ByteBuffer;\r
+
+public class OutputStreamWriteable implements BinaryWriteable {
+
+ OutputStream out;
+
+ public OutputStreamWriteable(OutputStream out)
+ {
+ if (out==null) throw new IllegalArgumentException("null arg");
+ this.out = out;
+ }
+
+ public OutputStream getStream()
+ {
+ return out;
+ }
+
+ void _put(int value)
+ throws IOException
+ {
+ out.write(value);
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ _put(b);
+ }\r
+ \r
+ @Override\r
+ public void writeByte(int b) throws IOException {\r
+ _put(b);\r
+ } \r
+ @Override\r
+ public void writeBoolean(boolean v) throws IOException {\r
+ _put( v ? 1 : 0);\r
+ }
+
+ @Override
+ public void writeFully(ByteBuffer src) throws IOException {
+ if (src.hasArray()) {
+ byte array[] = src.array();
+ write(array, src.position(), src.remaining());
+ src.position(src.limit());
+ } else
+ for (;src.hasRemaining();)
+ _put(src.get());
+ }
+
+ @Override
+ public void writeFully(ByteBuffer src, int length) throws IOException {
+ if (src.hasArray()) {
+ byte array[] = src.array();
+ write(array, src.position(), length);
+ src.position(length);
+ } else {
+ for (int i=0; i<length; i++)
+ _put(src.get());
+ }
+ }
+
+ @Override
+ public void write(byte[] src, int offset, int length) throws IOException {
+ out.write(src, offset, length);
+ }
+
+ @Override
+ public void write(byte[] src) throws IOException {
+ out.write(src);
+ }
+
+ @Override
+ public void writeDouble(double value) throws IOException {
+ writeLong(Double.doubleToLongBits(value));
+ }
+
+ @Override
+ public void writeFloat(float value) throws IOException {
+ writeInt(Float.floatToIntBits(value));
+ }
+
+ @Override
+ public void writeInt(int value) throws IOException {
+ _put(value >> 24);
+ _put(value >> 16);
+ _put(value >> 8);
+ _put(value);
+ }
+
+ @Override
+ public void writeLong(long value) throws IOException {
+ _put((int) (value >> 56));
+ _put((int) (value >> 48));
+ _put((int) (value >> 40));
+ _put((int) (value >> 32));
+ _put((int) (value >> 24));
+ _put((int) (value >> 16));
+ _put((int) (value >> 8));
+ _put((int) (value));
+ }
+
+ @Override
+ public void writeShort(int value) throws IOException {
+ _put(value >> 8);
+ _put(value);
+ }\r
+ \r
+ @Override\r
+ public void writeChar(int value) throws IOException {\r
+ _put(value >> 8);\r
+ _put(value);\r
+ } \r
+ \r
+ @Override\r
+ public void writeBytes(String s) throws IOException {\r
+ int len = s.length();\r
+ for (int i = 0 ; i < len ; i++) {\r
+ _put((byte)s.charAt(i));\r
+ }\r
+ }\r
+
+ @Override\r
+ public void writeChars(String s) throws IOException {\r
+ int len = s.length();\r
+ for (int i = 0 ; i < len ; i++) {\r
+ int v = s.charAt(i);\r
+ _put((v >>> 8) & 0xFF); \r
+ _put((v >>> 0) & 0xFF); \r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void writeUTF(String s) throws IOException {\r
+ int len = UTF8.getModifiedUTF8EncodingByteLength(s);\r
+ writeShort(len);\r
+ UTF8.writeModifiedUTF(this, s);\r
+ }\r
+
+ @Override
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+}
+
+