]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraph1Serializer.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.graph / src / org / simantics / graph / representation / TransferableGraph1Serializer.java
index e900c322aae220267a64267e71b9c9fdc26c3f42..770d6c6cab10b5844d7f9485e7476cac1e97cb4e 100644 (file)
-package org.simantics.graph.representation;\r
-\r
-\r
-import gnu.trove.map.hash.TObjectIntHashMap;\r
-\r
-import java.io.DataInput;\r
-import java.io.DataOutput;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.UTFDataFormatException;\r
-import java.util.List;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.serialization.Serializer;\r
-\r
-public class TransferableGraph1Serializer extends Serializer {\r
-\r
-    public static final TransferableGraph1Serializer INSTANCE = \r
-            new TransferableGraph1Serializer();\r
-    \r
-    private TransferableGraph1Serializer() {}\r
-    \r
-       static int writeUTF(String str, byte[] bytearr, int byteIndex) throws IOException {\r
-               \r
-               int strlen = str.length();\r
-               int utflen = 0;\r
-               int c;\r
-               int count = byteIndex;\r
-\r
-               /* use charAt instead of copying String to char array */\r
-               for (int i = 0; i < strlen; i++) {\r
-                       c = str.charAt(i);\r
-                       if ((c >= 0x0001) && (c <= 0x007F)) {\r
-                               utflen++;\r
-                       } else if (c > 0x07FF) {\r
-                               utflen += 3;\r
-                       } else {\r
-                               utflen += 2;\r
-                       }\r
-               }\r
-\r
-               if (utflen > 65535)\r
-                       throw new UTFDataFormatException(\r
-                                       "encoded string too long: " + utflen + " bytes");\r
-\r
-               if(utflen < 0x80) {\r
-                       bytearr[count++] = ((byte)utflen);\r
-               }\r
-               else {\r
-                       utflen -= 0x80;\r
-                       if(utflen < 0x4000) {\r
-                               bytearr[count++] = (byte)( ((utflen&0x3f) | 0x80) );\r
-                               bytearr[count++] = (byte)( (utflen>>>6) );\r
-                       }\r
-                       else {\r
-                               utflen -= 0x4000;\r
-                               if(utflen < 0x200000) {\r
-                                       bytearr[count++] = (byte)( ((utflen&0x1f) | 0xc0) );\r
-                                       bytearr[count++] = (byte)( ((utflen>>>5)&0xff) );\r
-                                       bytearr[count++] = (byte)( ((utflen>>>13)&0xff) );      \r
-                               }\r
-                               else {\r
-                                       utflen -= 0x200000;\r
-                                       if(utflen < 0x10000000) {\r
-                                               bytearr[count++] = (byte)( ((utflen&0x0f) | 0xe0) );\r
-                                               bytearr[count++] = (byte)( ((utflen>>>4)&0xff) );\r
-                                               bytearr[count++] = (byte)( ((utflen>>>12)&0xff) );      \r
-                                               bytearr[count++] = (byte)( ((utflen>>>20)&0xff) );\r
-                                       }\r
-                                       else {\r
-                                               utflen -= 0x10000000;\r
-                                               bytearr[count++] = (byte)( ((utflen&0x07) | 0xf0) );\r
-                                               bytearr[count++] = (byte)( ((utflen>>>3)&0xff) );\r
-                                               bytearr[count++] = (byte)( ((utflen>>>11)&0xff) );      \r
-                                               bytearr[count++] = (byte)( ((utflen>>>19)&0xff) );\r
-                                               bytearr[count++] = (byte)( ((utflen>>>27)&0xff) );\r
-                                       }\r
-                               }                               \r
-                       }\r
-               }       \r
-\r
-               int i=0;\r
-               for (i=0; i<strlen; i++) {\r
-                       c = str.charAt(i);\r
-                       if (!((c >= 0x0001) && (c <= 0x007F))) break;\r
-                       bytearr[count++] = (byte) c;\r
-               }\r
-\r
-               for (;i < strlen; i++){\r
-                       c = str.charAt(i);\r
-                       if ((c >= 0x0001) && (c <= 0x007F)) {\r
-                               bytearr[count++] = (byte) c;\r
-\r
-                       } else if (c > 0x07FF) {\r
-                               bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));\r
-                               bytearr[count++] = (byte) (0x80 | ((c >>  6) & 0x3F));\r
-                               bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));\r
-                       } else {\r
-                               bytearr[count++] = (byte) (0xC0 | ((c >>  6) & 0x1F));\r
-                               bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));\r
-                       }\r
-               }\r
-               \r
-               return count - byteIndex;\r
-               \r
-       }\r
-       \r
-       @Override\r
-       public Object deserialize(File file) throws IOException {\r
-               TransferableGraphFileReader reader = new TransferableGraphFileReader(file);\r
-               try {\r
-                       return reader.readTG();\r
-               } finally {\r
-                       reader.close();\r
-               }\r
-       }\r
-       \r
-       public Object deserialize(InputStream in) throws IOException {\r
-               TransferableGraphFileReader reader = new TransferableGraphFileReader(in);\r
-               try {\r
-                       return reader.readTG();\r
-               } finally {\r
-                       reader.close();\r
-               }\r
-       }\r
-       \r
-       @Override\r
-       public byte[] serialize(Object obj) throws IOException {\r
-               \r
-               TransferableGraph1 tg = (TransferableGraph1)obj;\r
-\r
-               Extensions ex = new Extensions(tg.extensions);\r
-               byte[] extensions = Bindings.getSerializerUnchecked(Bindings.getBindingUnchecked(Extensions.class)).serialize(ex);\r
-\r
-               Serializer variantSerializer = Bindings.getSerializerUnchecked(Bindings.VARIANT);\r
-               \r
-               int actualSize = 16 + 4*tg.values.length + 4*tg.statements.length + 5*tg.identities.length + extensions.length;\r
-               for(Value v : tg.values) actualSize += variantSerializer.getSize(v.value);\r
-               for(Identity id : tg.identities) { \r
-                       if(id.definition instanceof Internal) actualSize += (4 + ((Internal)id.definition).name.length() + 5);\r
-                       else if(id.definition instanceof External) actualSize += (4 + ((External)id.definition).name.length() + 5);\r
-                       else if(id.definition instanceof Root) actualSize += (((Root)id.definition).name.length() + ((Root)id.definition).type.length() + 10);\r
-                       else if(id.definition instanceof Optional) actualSize += (4 + ((Optional)id.definition).name.length() + 5);\r
-               }\r
-               \r
-               byte[] bytes = new byte[actualSize];\r
-               int byteIndex = 0;\r
-\r
-               int i = tg.resourceCount;\r
-               \r
-               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-               byteIndex+=4;\r
-               \r
-               i = tg.identities.length;\r
-\r
-               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-               byteIndex+=4;\r
-               \r
-               for(Identity id : tg.identities) {\r
-\r
-                       i = id.resource;\r
-                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                       byteIndex+=4;\r
-                       \r
-                       if(id.definition instanceof Internal) {\r
-\r
-                               Internal r = (Internal)id.definition;\r
-\r
-                               bytes[byteIndex++] = 3;\r
-\r
-                               i = r.parent;\r
-                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                               byteIndex+=4;\r
-                               \r
-                               byteIndex += writeUTF(r.name, bytes, byteIndex);\r
-\r
-                       } else if(id.definition instanceof External) {\r
-\r
-                               External r = (External)id.definition;\r
-\r
-                               bytes[byteIndex++] = 1;\r
-\r
-                               i = r.parent;\r
-                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                               byteIndex+=4;\r
-                               \r
-                               byteIndex += writeUTF(r.name, bytes, byteIndex);\r
-                               \r
-                       } else if(id.definition instanceof Root) {\r
-                               \r
-                               bytes[byteIndex++] = 0;\r
-                               \r
-                               Root r = (Root)id.definition;\r
-                               byteIndex += writeUTF(r.name, bytes, byteIndex);\r
-                               byteIndex += writeUTF(r.type, bytes, byteIndex);\r
-                               \r
-                       } else if(id.definition instanceof Optional) {\r
-\r
-                               Optional r = (Optional)id.definition;\r
-\r
-                               bytes[byteIndex++] = 2;\r
-\r
-                               i = r.parent;\r
-                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                               byteIndex+=4;\r
-                               \r
-                               byteIndex += writeUTF(r.name, bytes, byteIndex);\r
-                               \r
-                       }\r
-                       \r
-               }\r
-               \r
-               i = tg.statements.length;\r
-               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-               byteIndex+=4;\r
-               \r
-               for(int s : tg.statements) {\r
-                       i = s;\r
-                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                       byteIndex+=4;\r
-               }\r
-\r
-               i = tg.values.length;\r
-               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-               byteIndex+=4;\r
-               \r
-               for(Value v : tg.values) {\r
-                       \r
-                       i = v.resource;\r
-                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;\r
-                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;\r
-                       byteIndex+=4;\r
-\r
-                       byte[] temp = variantSerializer.serialize(v.value);\r
-                       System.arraycopy(temp, 0, bytes, byteIndex, temp.length);\r
-                       byteIndex += temp.length;                       \r
-               }\r
-\r
-               System.arraycopy(extensions, 0, bytes, byteIndex, extensions.length);\r
-               \r
-               return bytes; \r
-               \r
-       }\r
-       \r
-       @Override\r
-       public void serialize(DataOutput out, TObjectIntHashMap<Object> identities,\r
-                       Object obj) throws IOException {\r
-               TransferableGraph1.SERIALIZER.serialize(out, identities, obj);\r
-       }\r
-\r
-       @Override\r
-       public void serialize(DataOutput out, Object obj) throws IOException {\r
-               TransferableGraph1.SERIALIZER.serialize(out, obj);\r
-       }\r
-\r
-       @Override\r
-       public Object deserialize(DataInput in, List<Object> identities)\r
-                       throws IOException {\r
-               return TransferableGraph1.SERIALIZER.deserialize(in, identities);\r
-       }\r
-\r
-       @Override\r
-       public Object deserialize(DataInput in) throws IOException {\r
-               return TransferableGraph1.SERIALIZER.deserialize(in);\r
-       }\r
-\r
-       @Override\r
-       public void deserializeTo(DataInput in, List<Object> identities, Object obj)\r
-                       throws IOException {\r
-               TransferableGraph1.SERIALIZER.deserializeTo(in, identities, obj);\r
-       }\r
-\r
-       @Override\r
-       public void deserializeTo(DataInput in, Object obj) throws IOException {\r
-               TransferableGraph1.SERIALIZER.deserializeTo(in, obj);\r
-       }\r
-\r
-       @Override\r
-       public void skip(DataInput in, List<Object> identities) throws IOException {\r
-               TransferableGraph1.SERIALIZER.skip(in, identities);\r
-       }\r
-\r
-       @Override\r
-       public void skip(DataInput in) throws IOException {\r
-               TransferableGraph1.SERIALIZER.skip(in);\r
-       }\r
-\r
-       @Override\r
-       public Integer getConstantSize() {\r
-               return TransferableGraph1.SERIALIZER.getConstantSize();\r
-       }\r
-\r
-       @Override\r
-       public int getSize(Object obj, TObjectIntHashMap<Object> identities)\r
-                       throws IOException {\r
-               return TransferableGraph1.SERIALIZER.getSize(obj, identities);\r
-       }\r
-\r
-       @Override\r
-       public int getSize(Object obj) throws IOException {\r
-               return TransferableGraph1.SERIALIZER.getSize(obj);\r
-       }\r
-\r
-       @Override\r
-       public int getMinSize() {\r
-               return TransferableGraph1.SERIALIZER.getMinSize();\r
-       }\r
-\r
-}\r
+package org.simantics.graph.representation;
+
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UTFDataFormatException;
+import java.util.List;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.serialization.Serializer;
+
+public class TransferableGraph1Serializer extends Serializer {
+
+    public static final TransferableGraph1Serializer INSTANCE = 
+            new TransferableGraph1Serializer();
+    
+    private TransferableGraph1Serializer() {}
+    
+       static int writeUTF(String str, byte[] bytearr, int byteIndex) throws IOException {
+               
+               int strlen = str.length();
+               int utflen = 0;
+               int c;
+               int count = byteIndex;
+
+               /* use charAt instead of copying String to char array */
+               for (int i = 0; i < strlen; i++) {
+                       c = str.charAt(i);
+                       if ((c >= 0x0001) && (c <= 0x007F)) {
+                               utflen++;
+                       } else if (c > 0x07FF) {
+                               utflen += 3;
+                       } else {
+                               utflen += 2;
+                       }
+               }
+
+               if (utflen > 65535)
+                       throw new UTFDataFormatException(
+                                       "encoded string too long: " + utflen + " bytes");
+
+               if(utflen < 0x80) {
+                       bytearr[count++] = ((byte)utflen);
+               }
+               else {
+                       utflen -= 0x80;
+                       if(utflen < 0x4000) {
+                               bytearr[count++] = (byte)( ((utflen&0x3f) | 0x80) );
+                               bytearr[count++] = (byte)( (utflen>>>6) );
+                       }
+                       else {
+                               utflen -= 0x4000;
+                               if(utflen < 0x200000) {
+                                       bytearr[count++] = (byte)( ((utflen&0x1f) | 0xc0) );
+                                       bytearr[count++] = (byte)( ((utflen>>>5)&0xff) );
+                                       bytearr[count++] = (byte)( ((utflen>>>13)&0xff) );      
+                               }
+                               else {
+                                       utflen -= 0x200000;
+                                       if(utflen < 0x10000000) {
+                                               bytearr[count++] = (byte)( ((utflen&0x0f) | 0xe0) );
+                                               bytearr[count++] = (byte)( ((utflen>>>4)&0xff) );
+                                               bytearr[count++] = (byte)( ((utflen>>>12)&0xff) );      
+                                               bytearr[count++] = (byte)( ((utflen>>>20)&0xff) );
+                                       }
+                                       else {
+                                               utflen -= 0x10000000;
+                                               bytearr[count++] = (byte)( ((utflen&0x07) | 0xf0) );
+                                               bytearr[count++] = (byte)( ((utflen>>>3)&0xff) );
+                                               bytearr[count++] = (byte)( ((utflen>>>11)&0xff) );      
+                                               bytearr[count++] = (byte)( ((utflen>>>19)&0xff) );
+                                               bytearr[count++] = (byte)( ((utflen>>>27)&0xff) );
+                                       }
+                               }                               
+                       }
+               }       
+
+               int i=0;
+               for (i=0; i<strlen; i++) {
+                       c = str.charAt(i);
+                       if (!((c >= 0x0001) && (c <= 0x007F))) break;
+                       bytearr[count++] = (byte) c;
+               }
+
+               for (;i < strlen; i++){
+                       c = str.charAt(i);
+                       if ((c >= 0x0001) && (c <= 0x007F)) {
+                               bytearr[count++] = (byte) c;
+
+                       } else if (c > 0x07FF) {
+                               bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
+                               bytearr[count++] = (byte) (0x80 | ((c >>  6) & 0x3F));
+                               bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
+                       } else {
+                               bytearr[count++] = (byte) (0xC0 | ((c >>  6) & 0x1F));
+                               bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
+                       }
+               }
+               
+               return count - byteIndex;
+               
+       }
+       
+       @Override
+       public Object deserialize(File file) throws IOException {
+               TransferableGraphFileReader reader = new TransferableGraphFileReader(file);
+               try {
+                       return reader.readTG();
+               } finally {
+                       reader.close();
+               }
+       }
+       
+       public Object deserialize(InputStream in) throws IOException {
+               TransferableGraphFileReader reader = new TransferableGraphFileReader(in);
+               try {
+                       return reader.readTG();
+               } finally {
+                       reader.close();
+               }
+       }
+       
+       @Override
+       public byte[] serialize(Object obj) throws IOException {
+               
+               TransferableGraph1 tg = (TransferableGraph1)obj;
+
+               Extensions ex = new Extensions(tg.extensions);
+               byte[] extensions = Bindings.getSerializerUnchecked(Bindings.getBindingUnchecked(Extensions.class)).serialize(ex);
+
+               Serializer variantSerializer = Bindings.getSerializerUnchecked(Bindings.VARIANT);
+               
+               int actualSize = 16 + 4*tg.values.length + 4*tg.statements.length + 5*tg.identities.length + extensions.length;
+               for(Value v : tg.values) actualSize += variantSerializer.getSize(v.value);
+               for(Identity id : tg.identities) { 
+                       if(id.definition instanceof Internal) actualSize += (4 + ((Internal)id.definition).name.length() + 5);
+                       else if(id.definition instanceof External) actualSize += (4 + ((External)id.definition).name.length() + 5);
+                       else if(id.definition instanceof Root) actualSize += (((Root)id.definition).name.length() + ((Root)id.definition).type.length() + 10);
+                       else if(id.definition instanceof Optional) actualSize += (4 + ((Optional)id.definition).name.length() + 5);
+               }
+               
+               byte[] bytes = new byte[actualSize];
+               int byteIndex = 0;
+
+               int i = tg.resourceCount;
+               
+               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+               byteIndex+=4;
+               
+               i = tg.identities.length;
+
+               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+               byteIndex+=4;
+               
+               for(Identity id : tg.identities) {
+
+                       i = id.resource;
+                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                       byteIndex+=4;
+                       
+                       if(id.definition instanceof Internal) {
+
+                               Internal r = (Internal)id.definition;
+
+                               bytes[byteIndex++] = 3;
+
+                               i = r.parent;
+                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                               byteIndex+=4;
+                               
+                               byteIndex += writeUTF(r.name, bytes, byteIndex);
+
+                       } else if(id.definition instanceof External) {
+
+                               External r = (External)id.definition;
+
+                               bytes[byteIndex++] = 1;
+
+                               i = r.parent;
+                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                               byteIndex+=4;
+                               
+                               byteIndex += writeUTF(r.name, bytes, byteIndex);
+                               
+                       } else if(id.definition instanceof Root) {
+                               
+                               bytes[byteIndex++] = 0;
+                               
+                               Root r = (Root)id.definition;
+                               byteIndex += writeUTF(r.name, bytes, byteIndex);
+                               byteIndex += writeUTF(r.type, bytes, byteIndex);
+                               
+                       } else if(id.definition instanceof Optional) {
+
+                               Optional r = (Optional)id.definition;
+
+                               bytes[byteIndex++] = 2;
+
+                               i = r.parent;
+                               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                               byteIndex+=4;
+                               
+                               byteIndex += writeUTF(r.name, bytes, byteIndex);
+                               
+                       }
+                       
+               }
+               
+               i = tg.statements.length;
+               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+               byteIndex+=4;
+               
+               for(int s : tg.statements) {
+                       i = s;
+                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                       byteIndex+=4;
+               }
+
+               i = tg.values.length;
+               bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+               bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+               byteIndex+=4;
+               
+               for(Value v : tg.values) {
+                       
+                       i = v.resource;
+                       bytes[byteIndex+3] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+2] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex+1] = (byte)(i & 0xFF);i >>>= 8;
+                       bytes[byteIndex] = (byte)(i & 0xFF);i >>>= 8;
+                       byteIndex+=4;
+
+                       byte[] temp = variantSerializer.serialize(v.value);
+                       System.arraycopy(temp, 0, bytes, byteIndex, temp.length);
+                       byteIndex += temp.length;                       
+               }
+
+               System.arraycopy(extensions, 0, bytes, byteIndex, extensions.length);
+               
+               return bytes; 
+               
+       }
+       
+       @Override
+       public void serialize(DataOutput out, TObjectIntHashMap<Object> identities,
+                       Object obj) throws IOException {
+               TransferableGraph1.SERIALIZER.serialize(out, identities, obj);
+       }
+
+       @Override
+       public void serialize(DataOutput out, Object obj) throws IOException {
+               TransferableGraph1.SERIALIZER.serialize(out, obj);
+       }
+
+       @Override
+       public Object deserialize(DataInput in, List<Object> identities)
+                       throws IOException {
+               return TransferableGraph1.SERIALIZER.deserialize(in, identities);
+       }
+
+       @Override
+       public Object deserialize(DataInput in) throws IOException {
+               return TransferableGraph1.SERIALIZER.deserialize(in);
+       }
+
+       @Override
+       public void deserializeTo(DataInput in, List<Object> identities, Object obj)
+                       throws IOException {
+               TransferableGraph1.SERIALIZER.deserializeTo(in, identities, obj);
+       }
+
+       @Override
+       public void deserializeTo(DataInput in, Object obj) throws IOException {
+               TransferableGraph1.SERIALIZER.deserializeTo(in, obj);
+       }
+
+       @Override
+       public void skip(DataInput in, List<Object> identities) throws IOException {
+               TransferableGraph1.SERIALIZER.skip(in, identities);
+       }
+
+       @Override
+       public void skip(DataInput in) throws IOException {
+               TransferableGraph1.SERIALIZER.skip(in);
+       }
+
+       @Override
+       public Integer getConstantSize() {
+               return TransferableGraph1.SERIALIZER.getConstantSize();
+       }
+
+       @Override
+       public int getSize(Object obj, TObjectIntHashMap<Object> identities)
+                       throws IOException {
+               return TransferableGraph1.SERIALIZER.getSize(obj, identities);
+       }
+
+       @Override
+       public int getSize(Object obj) throws IOException {
+               return TransferableGraph1.SERIALIZER.getSize(obj);
+       }
+
+       @Override
+       public int getMinSize() {
+               return TransferableGraph1.SERIALIZER.getMinSize();
+       }
+
+}