front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCJavaToByteArrayConverter.java
changeset 10 925b7ee746e3
parent 9 0f44b7360c8d
child 28 9ccef81f02ab
--- a/front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCJavaToByteArrayConverter.java	Thu Mar 22 18:15:53 2012 +0100
+++ b/front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCJavaToByteArrayConverter.java	Fri Mar 23 16:24:36 2012 +0100
@@ -1,310 +1,310 @@
-/**
- * @author cramakrishnan
- *
- * Copyright (C) 2003, C. Ramakrishnan / Illposed Software
- * All rights reserved.
- * 
- * See license.txt (or license.rtf) for license information.
- * 
- * 
- * OSCJavaToByteArrayConverter is a helper class that translates
- * from Java types to the format the OSC spec specifies for those
- * types.
- *
- * This implementation is based on Markus Gaelli and
- * Iannis Zannos' OSC implementation in Squeak:
- * http://www.emergent.de/Goodies/
- */
-
-package com.illposed.osc.utility;
-
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import java.math.BigInteger;
-import java.util.Enumeration;
-import java.util.Vector;
-
-
-public class OSCJavaToByteArrayConverter {
-
-    protected ByteArrayOutputStream stream = new ByteArrayOutputStream();
-    private byte[] intBytes = new byte[4];
-
-    /*public OSCJavaToByteArrayConverter() {
-        super();
-    }*/
-
-    /**
-     * Creation date: (2/23/2001 2:43:25 AM)
-     * @param anArray java.lang.Object[]
-     *
-     */
-    public void appendNullCharToAlignStream() {
-        int mod = stream.size() % 4;
-        int pad = 4 - mod;
-        for (int i = 0; i < pad; i++)
-            stream.write(0);
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:21:53 AM)
-     * @return byte[]
-     */
-    public byte[] toByteArray() {
-        return stream.toByteArray();
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:14:23 AM)
-     * @param bytes byte[]
-     */
-    public void write(byte[] bytes) {
-        writeBigEndToFourByteBoundry(bytes);
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:21:04 AM)
-     * @param i int
-     */
-    public void write(int i) {
-        writeIntegerToByteArray(i);
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:03:57 AM)
-     * @param f java.lang.Float
-     */
-    public void write(Float f) {
-        writeIntegerToByteArray(Float.floatToIntBits(f.floatValue()));
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:08:36 AM)
-     * @param i java.lang.Integer
-     */
-    public void write(Integer i) {
-        writeIntegerToByteArray(i.intValue());
-    }
-
-    /**
-     * Creation date: (2/23/2001 1:57:35 AM)
-     * @param str java.lang.String
-     */
-    public void write(String str) {
-        writeLittleEndToFourByteBoundry(str.getBytes());
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:08:36 AM)
-     * @param c char
-     */
-    public void write(char c) {
-        stream.write(c);
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:02:54 AM)
-     * @param anObject java.lang.Object
-     */
-    public void write(Object anObject) {
-        // Can't do switch on class
-        if (null == anObject)
-            return;
-        if (anObject instanceof Float) {
-            write((Float) anObject);
-            return;
-        }
-        if (anObject instanceof String) {
-            write((String) anObject);
-            return;
-        }
-        if (anObject instanceof Integer) {
-            write((Integer) anObject);
-            return;
-        }
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:43:25 AM)
-     * @param aClass Class
-     */
-    public void writeType(Class c) {
-        // A big ol' case statement -- what's polymorphism mean, again?
-        // I really wish I could extend the base classes!
-
-        // use the appropriate flags to tell SuperCollider what kind of 
-        // thing it is looking at
-
-        if (Integer.class.equals(c)) {
-            stream.write('i');
-            return;
-        }
-        if (java.math.BigInteger.class.equals(c)) {
-            stream.write('h');
-            return;
-        }
-        if (Float.class.equals(c)) {
-            stream.write('f');
-            return;
-        }
-        if (Double.class.equals(c)) {
-            stream.write('d');
-            return;
-        }
-        if (String.class.equals(c)) {
-            stream.write('s');
-            return;
-        }
-        if (Character.class.equals(c)) {
-            stream.write('c');
-            return;
-        }
-    }
-
-    /**
-     * Creation date: (2/23/2001 2:43:25 AM)
-     * @param anArray java.lang.Object[]
-     */
-    public void writeTypesArray(Object[] array) {
-        // A big ol' case statement in a for loop -- what's polymorphism mean, again?
-        // I really wish I could extend the base classes!
-
-        for (int i = 0; i < array.length; i++) {
-            if (null == array[i])
-                continue;
-            // if the array at i is a type of array write a [
-            // This is used for nested arguments
-            if (array[i].getClass().isArray()) {
-                stream.write('[');
-                // fill the [] with the SuperCollider types corresponding to the object
-                // (i.e. Object of type String needs -s).
-                writeTypesArray((Object[]) array[i]);
-                // close the array
-                stream.write(']');
-                continue;
-            }
-            // Create a way to deal with Boolean type objects
-            if (Boolean.TRUE.equals(array[i])) {
-                stream.write('T');
-                continue;
-            }
-            if (Boolean.FALSE.equals(array[i])) {
-                stream.write('F');
-                continue;
-            }
-            // go through the array and write the superCollider types as shown in the 
-            // above method. the Classes derived here are used as the arg to the above method
-            writeType(array[i].getClass());
-        }
-        // align the stream with padded bytes
-        appendNullCharToAlignStream();
-    }
-    
-    /**
-     * Same as writeSuperColliderTypes(Object[]), just that it takes a vector (for jdk1.1
-     * compatibility), rather than an array.
-     * @param vector  the collection I am to write out types for
-     */
-    public void writeTypes(Vector vector) {
-        // A big ol' case statement in a for loop -- what's polymorphism mean, again?
-        // I really wish I could extend the base classes!
-
-        Enumeration enm = vector.elements();
-        Object nextObject;
-        while (enm.hasMoreElements()) {
-            nextObject = enm.nextElement();
-            if (null == nextObject)
-                continue;
-            // if the array at i is a type of array write a [
-            // This is used for nested arguments
-            if (nextObject.getClass().isArray()) {
-                stream.write('[');
-                // fill the [] with the SuperCollider types corresponding to the object
-                // (e.g., Object of type String needs -s).
-                writeTypesArray((Object[]) nextObject);
-                // close the array
-                stream.write(']');
-                continue;
-            }
-            // Create a way to deal with Boolean type objects
-            if (Boolean.TRUE.equals(nextObject)) {
-                stream.write('T');
-                continue;
-            }
-            if (Boolean.FALSE.equals(nextObject)) {
-                stream.write('F');
-                continue;
-            }
-            // go through the array and write the superCollider types as shown in the 
-            // above method. the Classes derived here are used as the arg to the above method
-            writeType(nextObject.getClass());
-        }
-        // align the stream with padded bytes
-        appendNullCharToAlignStream();
-    }
-
-    /**
-     * convert an integer to byte array
-     *
-     * @param value int
-     */
-    private void writeIntegerToByteArray(int value) {
-        byte[] intBytes = new byte[4];
-
-        intBytes[3] = (byte)value; value>>>=8;
-        intBytes[2] = (byte)value; value>>>=8;
-        intBytes[1] = (byte)value; value>>>=8;
-        intBytes[0] = (byte)value;
-
-        try {
-            stream.write(intBytes);
-        } catch (IOException e) {
-            throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream");
-        }
-    }
-    
-    /**
-     * Line up the BigEnd of the bytes to a 4 byte boundry
-     *
-     * @param bytes byte[]
-     */
-    private void writeBigEndToFourByteBoundry(byte[] bytes) {
-        int mod = bytes.length % 4;
-        // if the remainder == 0 write the bytes
-        if (mod == 0) {
-            try { stream.write(bytes); } catch (IOException e)
-            { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
-            return;
-        }
-        // pad the bytes to lineup correctly
-        int pad = 4 - mod;
-        byte[] newBytes = new byte[pad + bytes.length];
-        System.arraycopy(bytes,0,newBytes,pad,bytes.length);
-
-        try { stream.write(newBytes); } catch (IOException e)
-        { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
-    }
-
-    /**
-     * Line up the LittleEnd of the bytes to a 4 byte boundry
-     * 
-     * @param bytes byte[]
-     */
-    private void writeLittleEndToFourByteBoundry(byte[] bytes) {
-        int mod = bytes.length % 4;
-        // if the remainder == 0 write the bytes
-        if (mod == 4) {
-            try { stream.write(bytes); } catch (IOException e)
-            { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
-            return;
-        }
-        // pad the bytes to lineup correctly
-        int pad = 4 - mod;
-        byte[] newBytes = new byte[pad + bytes.length];
-        System.arraycopy(bytes,0,newBytes,0,bytes.length);
-
-        try { stream.write(newBytes); } catch (IOException e)
-        { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
-    }
-
-}
+/**
+ * @author cramakrishnan
+ *
+ * Copyright (C) 2003, C. Ramakrishnan / Illposed Software
+ * All rights reserved.
+ * 
+ * See license.txt (or license.rtf) for license information.
+ * 
+ * 
+ * OSCJavaToByteArrayConverter is a helper class that translates
+ * from Java types to the format the OSC spec specifies for those
+ * types.
+ *
+ * This implementation is based on Markus Gaelli and
+ * Iannis Zannos' OSC implementation in Squeak:
+ * http://www.emergent.de/Goodies/
+ */
+
+package com.illposed.osc.utility;
+
+import java.io.IOException;
+import java.io.ByteArrayOutputStream;
+import java.math.BigInteger;
+import java.util.Enumeration;
+import java.util.Vector;
+
+
+public class OSCJavaToByteArrayConverter {
+
+    protected ByteArrayOutputStream stream = new ByteArrayOutputStream();
+    private byte[] intBytes = new byte[4];
+
+    /*public OSCJavaToByteArrayConverter() {
+        super();
+    }*/
+
+    /**
+     * Creation date: (2/23/2001 2:43:25 AM)
+     * @param anArray java.lang.Object[]
+     *
+     */
+    public void appendNullCharToAlignStream() {
+        int mod = stream.size() % 4;
+        int pad = 4 - mod;
+        for (int i = 0; i < pad; i++)
+            stream.write(0);
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:21:53 AM)
+     * @return byte[]
+     */
+    public byte[] toByteArray() {
+        return stream.toByteArray();
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:14:23 AM)
+     * @param bytes byte[]
+     */
+    public void write(byte[] bytes) {
+        writeBigEndToFourByteBoundry(bytes);
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:21:04 AM)
+     * @param i int
+     */
+    public void write(int i) {
+        writeIntegerToByteArray(i);
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:03:57 AM)
+     * @param f java.lang.Float
+     */
+    public void write(Float f) {
+        writeIntegerToByteArray(Float.floatToIntBits(f.floatValue()));
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:08:36 AM)
+     * @param i java.lang.Integer
+     */
+    public void write(Integer i) {
+        writeIntegerToByteArray(i.intValue());
+    }
+
+    /**
+     * Creation date: (2/23/2001 1:57:35 AM)
+     * @param str java.lang.String
+     */
+    public void write(String str) {
+        writeLittleEndToFourByteBoundry(str.getBytes());
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:08:36 AM)
+     * @param c char
+     */
+    public void write(char c) {
+        stream.write(c);
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:02:54 AM)
+     * @param anObject java.lang.Object
+     */
+    public void write(Object anObject) {
+        // Can't do switch on class
+        if (null == anObject)
+            return;
+        if (anObject instanceof Float) {
+            write((Float) anObject);
+            return;
+        }
+        if (anObject instanceof String) {
+            write((String) anObject);
+            return;
+        }
+        if (anObject instanceof Integer) {
+            write((Integer) anObject);
+            return;
+        }
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:43:25 AM)
+     * @param aClass Class
+     */
+    public void writeType(Class c) {
+        // A big ol' case statement -- what's polymorphism mean, again?
+        // I really wish I could extend the base classes!
+
+        // use the appropriate flags to tell SuperCollider what kind of 
+        // thing it is looking at
+
+        if (Integer.class.equals(c)) {
+            stream.write('i');
+            return;
+        }
+        if (java.math.BigInteger.class.equals(c)) {
+            stream.write('h');
+            return;
+        }
+        if (Float.class.equals(c)) {
+            stream.write('f');
+            return;
+        }
+        if (Double.class.equals(c)) {
+            stream.write('d');
+            return;
+        }
+        if (String.class.equals(c)) {
+            stream.write('s');
+            return;
+        }
+        if (Character.class.equals(c)) {
+            stream.write('c');
+            return;
+        }
+    }
+
+    /**
+     * Creation date: (2/23/2001 2:43:25 AM)
+     * @param anArray java.lang.Object[]
+     */
+    public void writeTypesArray(Object[] array) {
+        // A big ol' case statement in a for loop -- what's polymorphism mean, again?
+        // I really wish I could extend the base classes!
+
+        for (int i = 0; i < array.length; i++) {
+            if (null == array[i])
+                continue;
+            // if the array at i is a type of array write a [
+            // This is used for nested arguments
+            if (array[i].getClass().isArray()) {
+                stream.write('[');
+                // fill the [] with the SuperCollider types corresponding to the object
+                // (i.e. Object of type String needs -s).
+                writeTypesArray((Object[]) array[i]);
+                // close the array
+                stream.write(']');
+                continue;
+            }
+            // Create a way to deal with Boolean type objects
+            if (Boolean.TRUE.equals(array[i])) {
+                stream.write('T');
+                continue;
+            }
+            if (Boolean.FALSE.equals(array[i])) {
+                stream.write('F');
+                continue;
+            }
+            // go through the array and write the superCollider types as shown in the 
+            // above method. the Classes derived here are used as the arg to the above method
+            writeType(array[i].getClass());
+        }
+        // align the stream with padded bytes
+        appendNullCharToAlignStream();
+    }
+    
+    /**
+     * Same as writeSuperColliderTypes(Object[]), just that it takes a vector (for jdk1.1
+     * compatibility), rather than an array.
+     * @param vector  the collection I am to write out types for
+     */
+    public void writeTypes(Vector vector) {
+        // A big ol' case statement in a for loop -- what's polymorphism mean, again?
+        // I really wish I could extend the base classes!
+
+        Enumeration enm = vector.elements();
+        Object nextObject;
+        while (enm.hasMoreElements()) {
+            nextObject = enm.nextElement();
+            if (null == nextObject)
+                continue;
+            // if the array at i is a type of array write a [
+            // This is used for nested arguments
+            if (nextObject.getClass().isArray()) {
+                stream.write('[');
+                // fill the [] with the SuperCollider types corresponding to the object
+                // (e.g., Object of type String needs -s).
+                writeTypesArray((Object[]) nextObject);
+                // close the array
+                stream.write(']');
+                continue;
+            }
+            // Create a way to deal with Boolean type objects
+            if (Boolean.TRUE.equals(nextObject)) {
+                stream.write('T');
+                continue;
+            }
+            if (Boolean.FALSE.equals(nextObject)) {
+                stream.write('F');
+                continue;
+            }
+            // go through the array and write the superCollider types as shown in the 
+            // above method. the Classes derived here are used as the arg to the above method
+            writeType(nextObject.getClass());
+        }
+        // align the stream with padded bytes
+        appendNullCharToAlignStream();
+    }
+
+    /**
+     * convert an integer to byte array
+     *
+     * @param value int
+     */
+    private void writeIntegerToByteArray(int value) {
+        byte[] intBytes = new byte[4];
+
+        intBytes[3] = (byte)value; value>>>=8;
+        intBytes[2] = (byte)value; value>>>=8;
+        intBytes[1] = (byte)value; value>>>=8;
+        intBytes[0] = (byte)value;
+
+        try {
+            stream.write(intBytes);
+        } catch (IOException e) {
+            throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream");
+        }
+    }
+    
+    /**
+     * Line up the BigEnd of the bytes to a 4 byte boundry
+     *
+     * @param bytes byte[]
+     */
+    private void writeBigEndToFourByteBoundry(byte[] bytes) {
+        int mod = bytes.length % 4;
+        // if the remainder == 0 write the bytes
+        if (mod == 0) {
+            try { stream.write(bytes); } catch (IOException e)
+            { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
+            return;
+        }
+        // pad the bytes to lineup correctly
+        int pad = 4 - mod;
+        byte[] newBytes = new byte[pad + bytes.length];
+        System.arraycopy(bytes,0,newBytes,pad,bytes.length);
+
+        try { stream.write(newBytes); } catch (IOException e)
+        { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
+    }
+
+    /**
+     * Line up the LittleEnd of the bytes to a 4 byte boundry
+     * 
+     * @param bytes byte[]
+     */
+    private void writeLittleEndToFourByteBoundry(byte[] bytes) {
+        int mod = bytes.length % 4;
+        // if the remainder == 0 write the bytes
+        if (mod == 4) {
+            try { stream.write(bytes); } catch (IOException e)
+            { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
+            return;
+        }
+        // pad the bytes to lineup correctly
+        int pad = 4 - mod;
+        byte[] newBytes = new byte[pad + bytes.length];
+        System.arraycopy(bytes,0,newBytes,0,bytes.length);
+
+        try { stream.write(newBytes); } catch (IOException e)
+        { throw new RuntimeException("You're screwed: IOException writing to a ByteArrayOutputStream"); }
+    }
+
+}