private void copy()

in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/HollowObjectTypeMapper.java [833:990]


        private void copy(Object obj, FlatRecordTraversalObjectNode node) {
            switch (fieldType) {
                case BOOLEAN: {
                    Boolean value = node.getFieldValueBooleanBoxed(fieldName);
                    if (value != null) {
                        unsafe.putBoolean(obj, fieldOffset, value == Boolean.TRUE);
                    }
                    break;
                }
                case INT: {
                    int value = node.getFieldValueInt(fieldName);
                    unsafe.putInt(obj, fieldOffset, value);
                    break;
                }
                case SHORT: {
                    int value = node.getFieldValueInt(fieldName);
                    if(value == Integer.MIN_VALUE) {
                        unsafe.putShort(obj, fieldOffset, Short.MIN_VALUE);
                    } else {
                        unsafe.putShort(obj, fieldOffset, (short) value);
                    }
                    break;
                }
                case BYTE: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value == Integer.MIN_VALUE) {
                        unsafe.putByte(obj, fieldOffset, Byte.MIN_VALUE);
                    } else {
                        unsafe.putByte(obj, fieldOffset, (byte) value);
                    }
                    break;
                }
                case CHAR: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value == Integer.MIN_VALUE) {
                        unsafe.putChar(obj, fieldOffset, Character.MIN_VALUE);
                    } else {
                        unsafe.putChar(obj, fieldOffset, (char) value);
                    }
                    break;
                }
                case LONG: {
                    long value = node.getFieldValueLong(fieldName);
                    unsafe.putLong(obj, fieldOffset, value);
                    break;
                }
                case FLOAT: {
                    float value = node.getFieldValueFloat(fieldName);
                    unsafe.putFloat(obj, fieldOffset, value);
                    break;
                }
                case DOUBLE: {
                    double value = node.getFieldValueDouble(fieldName);
                    unsafe.putDouble(obj, fieldOffset, value);
                    break;
                }
                case STRING: {
                    String value = node.getFieldValueString(fieldName);
                    if (value != null) {
                        unsafe.putObject(obj, fieldOffset, value);
                    }
                    break;
                }
                case BYTES: {
                    byte[] value = node.getFieldValueBytes(fieldName);
                    if (value != null) {
                        unsafe.putObject(obj, fieldOffset, value);
                    }
                    break;
                }
                case INLINED_BOOLEAN: {
                    Boolean value = node.getFieldValueBooleanBoxed(fieldName);
                    if (value != null) {
                        unsafe.putObject(obj, fieldOffset, value);
                    }
                    break;
                }
                case INLINED_INT: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value != Integer.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, Integer.valueOf(value));
                    }
                    break;
                }
                case INLINED_SHORT: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value != Integer.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, Short.valueOf((short) value));
                    }
                    break;
                }
                case INLINED_BYTE: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value != Integer.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, Byte.valueOf((byte) value));
                    }
                    break;
                }
                case INLINED_CHAR: {
                    int value = node.getFieldValueInt(fieldName);
                    if (value != Integer.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, Character.valueOf((char) value));
                    }
                    break;
                }
                case INLINED_LONG: {
                    long value = node.getFieldValueLong(fieldName);
                    if (value != Long.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, Long.valueOf(value));
                    }
                    break;
                }
                case INLINED_FLOAT: {
                    float value = node.getFieldValueFloat(fieldName);
                    if (!Float.isNaN(value)) {
                        unsafe.putObject(obj, fieldOffset, Float.valueOf(value));
                    }
                    break;
                }
                case INLINED_DOUBLE: {
                    double value = node.getFieldValueDouble(fieldName);
                    if (!Double.isNaN(value)) {
                        unsafe.putObject(obj, fieldOffset, Double.valueOf(value));
                    }
                    break;
                }
                case INLINED_STRING: {
                    String value = node.getFieldValueString(fieldName);
                    if (value != null) {
                        unsafe.putObject(obj, fieldOffset, value);
                    }
                    break;
                }
                case DATE_TIME: {
                    long value = node.getFieldValueLong(fieldName);
                    if (value != Long.MIN_VALUE) {
                        unsafe.putObject(obj, fieldOffset, new Date(value));
                    }
                    break;
                }
                case ENUM_NAME: {
                    String value = node.getFieldValueString(fieldName);
                    if (value != null) {
                        unsafe.putObject(obj, fieldOffset, Enum.valueOf((Class) type, value));
                    }
                    break;
                }
                case REFERENCE: {
                    FlatRecordTraversalNode childNode = node.getFieldNode(fieldName);
                    if (childNode != null) {
                        unsafe.putObject(obj, fieldOffset, subTypeMapper.parseFlatRecord(childNode));
                    }
                    break;
                }
                default:
                    throw new IllegalArgumentException("Unknown field type: " + fieldType);
            }
        }