front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCByteArrayToJavaConverter.java
changeset 10 925b7ee746e3
parent 9 0f44b7360c8d
child 28 9ccef81f02ab
--- a/front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCByteArrayToJavaConverter.java	Thu Mar 22 18:15:53 2012 +0100
+++ b/front_processing/extern/TUIO_JAVA/src/com/illposed/osc/utility/OSCByteArrayToJavaConverter.java	Fri Mar 23 16:24:36 2012 +0100
@@ -1,280 +1,280 @@
-/* $Id: OSCByteArrayToJavaConverter.java,v 1.1.1.1 2006/11/13 14:47:22 modin Exp $
- * Created on 28.10.2003
- */
-package com.illposed.osc.utility;
-
-import java.math.BigInteger;
-import java.util.Date;
-
-import com.illposed.osc.*;
-
-/**
- * @author cramakrishnan
- *
- * Copyright (C) 2003, C. Ramakrishnan / Auracle
- * All rights reserved.
- * 
- * See license.txt (or license.rtf) for license information.
- */
-public class OSCByteArrayToJavaConverter {
-
-    byte[] bytes;
-    int bytesLength;
-    int streamPosition;
-
-    private byte[] intBytes   = new byte[4];
-    private byte[] floatBytes = new byte[4];
-
-    private    byte[] secondBytes = new byte[8];
-    private    byte[] picosecBytes = new byte[8];
-
-    /**
-     * Helper object for converting from a byte array to Java objects
-     */
-    /*public OSCByteArrayToJavaConverter() {
-        super();
-    }*/
-
-    public OSCPacket convert(byte[] byteArray, int bytesLength) {
-        bytes = byteArray;
-        this.bytesLength = bytesLength;
-        streamPosition = 0;
-        if (isBundle())
-            return convertBundle();
-        else
-            return convertMessage();
-    }
-
-    private boolean isBundle() {
-        // only need the first 7 to check if it is a bundle
-        String bytesAsString = new String(bytes, 0, 7);
-        return bytesAsString.startsWith("#bundle");
-    }                               
-                               
-    private OSCBundle convertBundle() {
-        // skip the "#bundle " stuff
-        streamPosition = 8;
-        Date timestamp = readTimeTag();
-        OSCBundle bundle = new OSCBundle(timestamp);
-        OSCByteArrayToJavaConverter myConverter = new OSCByteArrayToJavaConverter();
-        while (streamPosition < bytesLength) {
-            // recursively read through the stream and convert packets you find
-            int packetLength = ((Integer) readInteger()).intValue();
-            byte[] packetBytes = new byte[packetLength];
-            //streamPosition++;
-            System.arraycopy(bytes,streamPosition,packetBytes,0,packetLength);
-            streamPosition+=packetLength;
-            //for (int i = 0; i < packetLength; i++)
-            //    packetBytes[i] = bytes[streamPosition++];
-            OSCPacket packet = myConverter.convert(packetBytes, packetLength);
-            bundle.addPacket(packet);
-        }
-        return bundle;
-    }
-
-    private OSCMessage convertMessage() {
-        OSCMessage message = new OSCMessage();
-        message.setAddress(readString());
-        char[] types = readTypes();
-        if (null == types) {
-            // we are done
-            return message;
-        }
-        moveToFourByteBoundry();
-        for (int i = 0; i < types.length; i++) {
-            if ('[' == types[i]) {
-                // we're looking at an array -- read it in
-                message.addArgument(readArray(types, i));
-                // then increment i to the end of the array
-                while (']' != types[i])
-                    i++;
-            } else
-                message.addArgument(readArgument(types[i]));
-        }
-        return message;
-    }
-
-    private String readString() {
-        int strLen = lengthOfCurrentString();
-        char[] stringChars = new char[strLen];
-        //System.arraycopy(bytes,streamPosition,stringChars,0,strLen);
-        //streamPosition+=strLen;
-        for (int i = 0; i < strLen; i++)
-            stringChars[i] = (char) bytes[streamPosition++];
-        moveToFourByteBoundry();
-        return new String(stringChars);
-    }
-
-    /**
-     * @return a char array with the types of the arguments
-     */
-    private char[] readTypes() {
-        // the next byte should be a ","
-        if (bytes[streamPosition] != 0x2C)
-            return null;
-        streamPosition++;
-        // find out how long the list of types is
-        int typesLen = lengthOfCurrentString();
-        if (0 == typesLen) {
-            return null;
-        }
-        // read in the types
-        char[] typesChars = new char[typesLen];
-        for (int i = 0; i < typesLen; i++) {
-            typesChars[i] = (char) bytes[streamPosition++];
-        }
-        return typesChars;
-    }
-
-    /**
-     * @param c type of argument
-     * @return a Java representation of the argument
-     */
-    private Object readArgument(char c) {
-        switch (c) {
-            case 'i' :
-                return readInteger();
-            case 'h' :
-                return readBigInteger();
-            case 'f' :
-                return readFloat();
-            case 'd' :
-                return readDouble();
-            case 's' :
-                return readString();
-            case 'c' :
-                return readChar();
-            case 'T' :
-                return Boolean.TRUE;
-            case 'F' :
-                return Boolean.FALSE;
-        }
-
-        return null;
-    }
-
-    /**
-     * @return a Character
-     */
-    private Object readChar() {
-        return new Character((char) bytes[streamPosition++]);
-    }
-
-    /**
-     * @return a Double
-     */
-    private Object readDouble() {
-        return readFloat();
-    }
-
-    /**
-     * @return a Float
-     */
-    private Object readFloat() {
-        //byte[] floatBytes = new byte[4];
-        floatBytes[0] = bytes[streamPosition++];
-        floatBytes[1] = bytes[streamPosition++];
-        floatBytes[2] = bytes[streamPosition++];
-        floatBytes[3] = bytes[streamPosition++];
-
-        int floatBits = 
-            ((floatBytes[3] & 0xFF) ) +
-            ((floatBytes[2] & 0xFF) << 8) +
-            ((floatBytes[1] & 0xFF) << 16) +
-            ((floatBytes[0] & 0xFF) << 24);
-        
-        return new Float(Float.intBitsToFloat(floatBits));
-    }
-
-    /**
-     * @return a BigInteger
-     */
-    private Object readBigInteger() {
-        //byte[] intBytes = new byte[4];
-        intBytes[0] = bytes[streamPosition++];
-        intBytes[1] = bytes[streamPosition++];
-        intBytes[2] = bytes[streamPosition++];
-        intBytes[3] = bytes[streamPosition++];
-
-        int intBits = 
-            ((intBytes[3] & 0xFF) ) +
-            ((intBytes[2] & 0xFF) << 8) +
-            ((intBytes[1] & 0xFF) << 16) +
-            ((intBytes[0] & 0xFF) << 24);
-        
-        return new Integer(intBits);
-    }
-
-    /**
-     * @return an Integer
-     */
-    private Object readInteger() {
-        //byte[] intBytes = new byte[4];
-        intBytes[0] = bytes[streamPosition++];
-        intBytes[1] = bytes[streamPosition++];
-        intBytes[2] = bytes[streamPosition++];
-        intBytes[3] = bytes[streamPosition++];
-
-        int intBits = 
-            ((intBytes[3] & 0xFF) ) +
-            ((intBytes[2] & 0xFF) << 8) +
-            ((intBytes[1] & 0xFF) << 16) +
-            ((intBytes[0] & 0xFF) << 24);
-        
-        return new Integer(intBits);
-    }
-    
-    /**
-     * @return a Date
-     */
-    private Date readTimeTag() {
-        //byte[] secondBytes = new byte[8];
-        //byte[] picosecBytes = new byte[8];
-        /*for (int i = 4; i < 8; i++)
-            secondBytes[i] = bytes[streamPosition++];
-        for (int i = 4; i < 8; i++)
-            picosecBytes[i] = bytes[streamPosition++];*/
-        System.arraycopy(bytes,streamPosition,secondBytes,4,4);
-        streamPosition+=4;
-        System.arraycopy(bytes,streamPosition,picosecBytes,4,4);
-        streamPosition+=4;
-        
-        BigInteger secsSince1900 = new BigInteger(secondBytes);
-        long secsSince1970 =  secsSince1900.longValue() - OSCBundle.SECONDS_FROM_1900_to_1970.longValue();
-        if (secsSince1970 < 0) secsSince1970 = 0; // no point maintaining times in the distant past
-        BigInteger picosecs = new BigInteger(picosecBytes);
-        long millisecs = (secsSince1970 * 1000) + (picosecs.longValue() / 1000);
-        return new Date(millisecs);
-    }
-
-    /**
-     * @param types
-     * @param i
-     * @return an Array
-     */
-    private Object[] readArray(char[] types, int i) {
-        int arrayLen = 0;
-        while (types[i + arrayLen] != ']')
-            arrayLen++;
-        Object[] array = new Object[arrayLen];
-        for (int j = 0; i < arrayLen; j++) {
-            array[j] = readArgument(types[i + j]);
-        }
-        return array;
-    }
-
-    private int lengthOfCurrentString() {
-        int i = 0;
-        while (bytes[streamPosition + i] != 0)
-            i++;
-        return i;
-    }
-
-    private void moveToFourByteBoundry() {
-        // If i'm already at a 4 byte boundry, I need to move to the next one
-        int mod = streamPosition % 4;
-        streamPosition += (4 - mod);
-    }
-
-}
-
+/* $Id: OSCByteArrayToJavaConverter.java,v 1.1.1.1 2006/11/13 14:47:22 modin Exp $
+ * Created on 28.10.2003
+ */
+package com.illposed.osc.utility;
+
+import java.math.BigInteger;
+import java.util.Date;
+
+import com.illposed.osc.*;
+
+/**
+ * @author cramakrishnan
+ *
+ * Copyright (C) 2003, C. Ramakrishnan / Auracle
+ * All rights reserved.
+ * 
+ * See license.txt (or license.rtf) for license information.
+ */
+public class OSCByteArrayToJavaConverter {
+
+    byte[] bytes;
+    int bytesLength;
+    int streamPosition;
+
+    private byte[] intBytes   = new byte[4];
+    private byte[] floatBytes = new byte[4];
+
+    private    byte[] secondBytes = new byte[8];
+    private    byte[] picosecBytes = new byte[8];
+
+    /**
+     * Helper object for converting from a byte array to Java objects
+     */
+    /*public OSCByteArrayToJavaConverter() {
+        super();
+    }*/
+
+    public OSCPacket convert(byte[] byteArray, int bytesLength) {
+        bytes = byteArray;
+        this.bytesLength = bytesLength;
+        streamPosition = 0;
+        if (isBundle())
+            return convertBundle();
+        else
+            return convertMessage();
+    }
+
+    private boolean isBundle() {
+        // only need the first 7 to check if it is a bundle
+        String bytesAsString = new String(bytes, 0, 7);
+        return bytesAsString.startsWith("#bundle");
+    }                               
+                               
+    private OSCBundle convertBundle() {
+        // skip the "#bundle " stuff
+        streamPosition = 8;
+        Date timestamp = readTimeTag();
+        OSCBundle bundle = new OSCBundle(timestamp);
+        OSCByteArrayToJavaConverter myConverter = new OSCByteArrayToJavaConverter();
+        while (streamPosition < bytesLength) {
+            // recursively read through the stream and convert packets you find
+            int packetLength = ((Integer) readInteger()).intValue();
+            byte[] packetBytes = new byte[packetLength];
+            //streamPosition++;
+            System.arraycopy(bytes,streamPosition,packetBytes,0,packetLength);
+            streamPosition+=packetLength;
+            //for (int i = 0; i < packetLength; i++)
+            //    packetBytes[i] = bytes[streamPosition++];
+            OSCPacket packet = myConverter.convert(packetBytes, packetLength);
+            bundle.addPacket(packet);
+        }
+        return bundle;
+    }
+
+    private OSCMessage convertMessage() {
+        OSCMessage message = new OSCMessage();
+        message.setAddress(readString());
+        char[] types = readTypes();
+        if (null == types) {
+            // we are done
+            return message;
+        }
+        moveToFourByteBoundry();
+        for (int i = 0; i < types.length; i++) {
+            if ('[' == types[i]) {
+                // we're looking at an array -- read it in
+                message.addArgument(readArray(types, i));
+                // then increment i to the end of the array
+                while (']' != types[i])
+                    i++;
+            } else
+                message.addArgument(readArgument(types[i]));
+        }
+        return message;
+    }
+
+    private String readString() {
+        int strLen = lengthOfCurrentString();
+        char[] stringChars = new char[strLen];
+        //System.arraycopy(bytes,streamPosition,stringChars,0,strLen);
+        //streamPosition+=strLen;
+        for (int i = 0; i < strLen; i++)
+            stringChars[i] = (char) bytes[streamPosition++];
+        moveToFourByteBoundry();
+        return new String(stringChars);
+    }
+
+    /**
+     * @return a char array with the types of the arguments
+     */
+    private char[] readTypes() {
+        // the next byte should be a ","
+        if (bytes[streamPosition] != 0x2C)
+            return null;
+        streamPosition++;
+        // find out how long the list of types is
+        int typesLen = lengthOfCurrentString();
+        if (0 == typesLen) {
+            return null;
+        }
+        // read in the types
+        char[] typesChars = new char[typesLen];
+        for (int i = 0; i < typesLen; i++) {
+            typesChars[i] = (char) bytes[streamPosition++];
+        }
+        return typesChars;
+    }
+
+    /**
+     * @param c type of argument
+     * @return a Java representation of the argument
+     */
+    private Object readArgument(char c) {
+        switch (c) {
+            case 'i' :
+                return readInteger();
+            case 'h' :
+                return readBigInteger();
+            case 'f' :
+                return readFloat();
+            case 'd' :
+                return readDouble();
+            case 's' :
+                return readString();
+            case 'c' :
+                return readChar();
+            case 'T' :
+                return Boolean.TRUE;
+            case 'F' :
+                return Boolean.FALSE;
+        }
+
+        return null;
+    }
+
+    /**
+     * @return a Character
+     */
+    private Object readChar() {
+        return new Character((char) bytes[streamPosition++]);
+    }
+
+    /**
+     * @return a Double
+     */
+    private Object readDouble() {
+        return readFloat();
+    }
+
+    /**
+     * @return a Float
+     */
+    private Object readFloat() {
+        //byte[] floatBytes = new byte[4];
+        floatBytes[0] = bytes[streamPosition++];
+        floatBytes[1] = bytes[streamPosition++];
+        floatBytes[2] = bytes[streamPosition++];
+        floatBytes[3] = bytes[streamPosition++];
+
+        int floatBits = 
+            ((floatBytes[3] & 0xFF) ) +
+            ((floatBytes[2] & 0xFF) << 8) +
+            ((floatBytes[1] & 0xFF) << 16) +
+            ((floatBytes[0] & 0xFF) << 24);
+        
+        return new Float(Float.intBitsToFloat(floatBits));
+    }
+
+    /**
+     * @return a BigInteger
+     */
+    private Object readBigInteger() {
+        //byte[] intBytes = new byte[4];
+        intBytes[0] = bytes[streamPosition++];
+        intBytes[1] = bytes[streamPosition++];
+        intBytes[2] = bytes[streamPosition++];
+        intBytes[3] = bytes[streamPosition++];
+
+        int intBits = 
+            ((intBytes[3] & 0xFF) ) +
+            ((intBytes[2] & 0xFF) << 8) +
+            ((intBytes[1] & 0xFF) << 16) +
+            ((intBytes[0] & 0xFF) << 24);
+        
+        return new Integer(intBits);
+    }
+
+    /**
+     * @return an Integer
+     */
+    private Object readInteger() {
+        //byte[] intBytes = new byte[4];
+        intBytes[0] = bytes[streamPosition++];
+        intBytes[1] = bytes[streamPosition++];
+        intBytes[2] = bytes[streamPosition++];
+        intBytes[3] = bytes[streamPosition++];
+
+        int intBits = 
+            ((intBytes[3] & 0xFF) ) +
+            ((intBytes[2] & 0xFF) << 8) +
+            ((intBytes[1] & 0xFF) << 16) +
+            ((intBytes[0] & 0xFF) << 24);
+        
+        return new Integer(intBits);
+    }
+    
+    /**
+     * @return a Date
+     */
+    private Date readTimeTag() {
+        //byte[] secondBytes = new byte[8];
+        //byte[] picosecBytes = new byte[8];
+        /*for (int i = 4; i < 8; i++)
+            secondBytes[i] = bytes[streamPosition++];
+        for (int i = 4; i < 8; i++)
+            picosecBytes[i] = bytes[streamPosition++];*/
+        System.arraycopy(bytes,streamPosition,secondBytes,4,4);
+        streamPosition+=4;
+        System.arraycopy(bytes,streamPosition,picosecBytes,4,4);
+        streamPosition+=4;
+        
+        BigInteger secsSince1900 = new BigInteger(secondBytes);
+        long secsSince1970 =  secsSince1900.longValue() - OSCBundle.SECONDS_FROM_1900_to_1970.longValue();
+        if (secsSince1970 < 0) secsSince1970 = 0; // no point maintaining times in the distant past
+        BigInteger picosecs = new BigInteger(picosecBytes);
+        long millisecs = (secsSince1970 * 1000) + (picosecs.longValue() / 1000);
+        return new Date(millisecs);
+    }
+
+    /**
+     * @param types
+     * @param i
+     * @return an Array
+     */
+    private Object[] readArray(char[] types, int i) {
+        int arrayLen = 0;
+        while (types[i + arrayLen] != ']')
+            arrayLen++;
+        Object[] array = new Object[arrayLen];
+        for (int j = 0; i < arrayLen; j++) {
+            array[j] = readArgument(types[i + j]);
+        }
+        return array;
+    }
+
+    private int lengthOfCurrentString() {
+        int i = 0;
+        while (bytes[streamPosition + i] != 0)
+            i++;
+        return i;
+    }
+
+    private void moveToFourByteBoundry() {
+        // If i'm already at a 4 byte boundry, I need to move to the next one
+        int mod = streamPosition % 4;
+        streamPosition += (4 - mod);
+    }
+
+}
+