changeset 16542:45fff0246a43

extract methods in (de)serializer
author Christian Wirth <christian.wirth@oracle.com>
date Thu, 17 Jul 2014 11:13:31 +0200
parents 62773598c55d
children eb3209d37c50
files graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java
diffstat 2 files changed, 88 insertions(+), 76 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java	Thu Jul 17 11:05:11 2014 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java	Thu Jul 17 11:13:31 2014 +0200
@@ -171,66 +171,74 @@
 
                 int cpi = buffer.get();
                 if (cpi == VariableLengthIntBuffer.NULL) {
-                    if (fieldClass == int.class) {
-                        unsafe.putInt(nodeInstance, offset, 0);
-                    } else if (fieldClass == long.class) {
-                        unsafe.putLong(nodeInstance, offset, 0L);
-                    } else if (fieldClass == float.class) {
-                        unsafe.putFloat(nodeInstance, offset, 0.0F);
-                    } else if (fieldClass == double.class) {
-                        unsafe.putDouble(nodeInstance, offset, 0.0D);
-                    } else if (fieldClass == byte.class) {
-                        unsafe.putByte(nodeInstance, offset, (byte) 0);
-                    } else if (fieldClass == short.class) {
-                        unsafe.putShort(nodeInstance, offset, (short) 0);
-                    } else if (fieldClass == char.class) {
-                        unsafe.putChar(nodeInstance, offset, (char) 0);
-                    } else if (fieldClass == boolean.class) {
-                        unsafe.putBoolean(nodeInstance, offset, false);
-                    } else {
-                        unsafe.putObject(nodeInstance, offset, null);
-                    }
+                    deserializeDataFieldsLengthNull(nodeInstance, fieldClass, offset);
                 } else {
-                    if (fieldClass == int.class) {
-                        unsafe.putInt(nodeInstance, offset, cp.getInt(cpi));
-                    } else if (fieldClass == long.class) {
-                        unsafe.putLong(nodeInstance, offset, cp.getLong(cpi));
-                    } else if (fieldClass == float.class) {
-                        unsafe.putFloat(nodeInstance, offset, cp.getFloat(cpi));
-                    } else if (fieldClass == double.class) {
-                        unsafe.putDouble(nodeInstance, offset, cp.getDouble(cpi));
-                    } else if (fieldClass == byte.class) {
-                        unsafe.putByte(nodeInstance, offset, (byte) cp.getInt(cpi));
-                    } else if (fieldClass == short.class) {
-                        unsafe.putShort(nodeInstance, offset, (short) cp.getInt(cpi));
-                    } else if (fieldClass == char.class) {
-                        unsafe.putChar(nodeInstance, offset, (char) cp.getInt(cpi));
-                    } else if (fieldClass == boolean.class) {
-                        unsafe.putBoolean(nodeInstance, offset, cp.getInt(cpi) == 1 ? true : false);
-                    } else if (fieldClass == Integer.class) {
-                        unsafe.putObject(nodeInstance, offset, cp.getInt(cpi));
-                    } else if (fieldClass == Long.class) {
-                        unsafe.putObject(nodeInstance, offset, cp.getLong(cpi));
-                    } else if (fieldClass == Float.class) {
-                        unsafe.putObject(nodeInstance, offset, cp.getFloat(cpi));
-                    } else if (fieldClass == Double.class) {
-                        unsafe.putObject(nodeInstance, offset, cp.getDouble(cpi));
-                    } else if (fieldClass == Byte.class) {
-                        unsafe.putObject(nodeInstance, offset, (byte) cp.getInt(cpi));
-                    } else if (fieldClass == Short.class) {
-                        unsafe.putObject(nodeInstance, offset, (short) cp.getInt(cpi));
-                    } else if (fieldClass == Character.class) {
-                        unsafe.putObject(nodeInstance, offset, (char) cp.getInt(cpi));
-                    } else if (fieldClass == Boolean.class) {
-                        unsafe.putObject(nodeInstance, offset, cp.getInt(cpi) == 1 ? Boolean.TRUE : Boolean.FALSE);
-                    } else {
-                        unsafe.putObject(nodeInstance, offset, cp.getObject(fieldClass, cpi));
-                    }
+                    deserializeDataFieldsDefault(nodeInstance, fieldClass, offset, cpi);
                 }
             }
         }
     }
 
+    private void deserializeDataFieldsDefault(Node nodeInstance, Class<?> fieldClass, long offset, int cpi) {
+        if (fieldClass == int.class) {
+            unsafe.putInt(nodeInstance, offset, cp.getInt(cpi));
+        } else if (fieldClass == long.class) {
+            unsafe.putLong(nodeInstance, offset, cp.getLong(cpi));
+        } else if (fieldClass == float.class) {
+            unsafe.putFloat(nodeInstance, offset, cp.getFloat(cpi));
+        } else if (fieldClass == double.class) {
+            unsafe.putDouble(nodeInstance, offset, cp.getDouble(cpi));
+        } else if (fieldClass == byte.class) {
+            unsafe.putByte(nodeInstance, offset, (byte) cp.getInt(cpi));
+        } else if (fieldClass == short.class) {
+            unsafe.putShort(nodeInstance, offset, (short) cp.getInt(cpi));
+        } else if (fieldClass == char.class) {
+            unsafe.putChar(nodeInstance, offset, (char) cp.getInt(cpi));
+        } else if (fieldClass == boolean.class) {
+            unsafe.putBoolean(nodeInstance, offset, cp.getInt(cpi) == 1 ? true : false);
+        } else if (fieldClass == Integer.class) {
+            unsafe.putObject(nodeInstance, offset, cp.getInt(cpi));
+        } else if (fieldClass == Long.class) {
+            unsafe.putObject(nodeInstance, offset, cp.getLong(cpi));
+        } else if (fieldClass == Float.class) {
+            unsafe.putObject(nodeInstance, offset, cp.getFloat(cpi));
+        } else if (fieldClass == Double.class) {
+            unsafe.putObject(nodeInstance, offset, cp.getDouble(cpi));
+        } else if (fieldClass == Byte.class) {
+            unsafe.putObject(nodeInstance, offset, (byte) cp.getInt(cpi));
+        } else if (fieldClass == Short.class) {
+            unsafe.putObject(nodeInstance, offset, (short) cp.getInt(cpi));
+        } else if (fieldClass == Character.class) {
+            unsafe.putObject(nodeInstance, offset, (char) cp.getInt(cpi));
+        } else if (fieldClass == Boolean.class) {
+            unsafe.putObject(nodeInstance, offset, cp.getInt(cpi) == 1 ? Boolean.TRUE : Boolean.FALSE);
+        } else {
+            unsafe.putObject(nodeInstance, offset, cp.getObject(fieldClass, cpi));
+        }
+    }
+
+    private static void deserializeDataFieldsLengthNull(Node nodeInstance, Class<?> fieldClass, long offset) {
+        if (fieldClass == int.class) {
+            unsafe.putInt(nodeInstance, offset, 0);
+        } else if (fieldClass == long.class) {
+            unsafe.putLong(nodeInstance, offset, 0L);
+        } else if (fieldClass == float.class) {
+            unsafe.putFloat(nodeInstance, offset, 0.0F);
+        } else if (fieldClass == double.class) {
+            unsafe.putDouble(nodeInstance, offset, 0.0D);
+        } else if (fieldClass == byte.class) {
+            unsafe.putByte(nodeInstance, offset, (byte) 0);
+        } else if (fieldClass == short.class) {
+            unsafe.putShort(nodeInstance, offset, (short) 0);
+        } else if (fieldClass == char.class) {
+            unsafe.putChar(nodeInstance, offset, (char) 0);
+        } else if (fieldClass == boolean.class) {
+            unsafe.putBoolean(nodeInstance, offset, false);
+        } else {
+            unsafe.putObject(nodeInstance, offset, null);
+        }
+    }
+
     private void deserializeChildFields(Node parent, NodeField[] nodeFields) {
         for (int i = nodeFields.length - 1; i >= 0; i--) {
             NodeField field = nodeFields[i];
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java	Thu Jul 17 11:05:11 2014 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java	Thu Jul 17 11:13:31 2014 +0200
@@ -115,28 +115,7 @@
                 } else if (fieldClass == boolean.class) {
                     cpi = cp.putInt(unsafe.getBoolean(node, offset) ? 1 : 0);
                 } else {
-                    Object value = unsafe.getObject(node, offset);
-                    if (value == null) {
-                        cpi = VariableLengthIntBuffer.NULL;
-                    } else if (fieldClass == Integer.class) {
-                        cpi = cp.putInt((Integer) value);
-                    } else if (fieldClass == Long.class) {
-                        cpi = cp.putLong((Long) value);
-                    } else if (fieldClass == Float.class) {
-                        cpi = cp.putFloat((Float) value);
-                    } else if (fieldClass == Double.class) {
-                        cpi = cp.putDouble((Double) value);
-                    } else if (fieldClass == Byte.class) {
-                        cpi = cp.putInt((Byte) value);
-                    } else if (fieldClass == Short.class) {
-                        cpi = cp.putInt((Short) value);
-                    } else if (fieldClass == Character.class) {
-                        cpi = cp.putInt((Character) value);
-                    } else if (fieldClass == Boolean.class) {
-                        cpi = cp.putInt((Boolean) value ? 1 : 0);
-                    } else {
-                        cpi = cp.putObject(fieldClass, value);
-                    }
+                    cpi = serializeDataFieldsObject(node, fieldClass, offset);
                 }
 
                 buffer.put(cpi);
@@ -144,6 +123,31 @@
         }
     }
 
+    private int serializeDataFieldsObject(Node node, Class<?> fieldClass, long offset) {
+        Object value = unsafe.getObject(node, offset);
+        if (value == null) {
+            return VariableLengthIntBuffer.NULL;
+        } else if (fieldClass == Integer.class) {
+            return cp.putInt((Integer) value);
+        } else if (fieldClass == Long.class) {
+            return cp.putLong((Long) value);
+        } else if (fieldClass == Float.class) {
+            return cp.putFloat((Float) value);
+        } else if (fieldClass == Double.class) {
+            return cp.putDouble((Double) value);
+        } else if (fieldClass == Byte.class) {
+            return cp.putInt((Byte) value);
+        } else if (fieldClass == Short.class) {
+            return cp.putInt((Short) value);
+        } else if (fieldClass == Character.class) {
+            return cp.putInt((Character) value);
+        } else if (fieldClass == Boolean.class) {
+            return cp.putInt((Boolean) value ? 1 : 0);
+        } else {
+            return cp.putObject(fieldClass, value);
+        }
+    }
+
     private void serializeChildrenFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeField[] nodeFields) throws UnsupportedConstantPoolTypeException {
         for (int i = 0; i < nodeFields.length; i++) {
             NodeField field = nodeFields[i];