public void copy()

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


        public void copy(Object pojo, GenericHollowObject rec) {
            switch (fieldType) {
                case BOOLEAN:
                    unsafe.putBoolean(pojo, fieldOffset, rec.getBoolean(fieldName));
                    break;
                case INT:
                    int intValue = rec.getInt(fieldName);
                    unsafe.putInt(pojo, fieldOffset, intValue);
                    break;
                case SHORT:
                    int shortValue = rec.getInt(fieldName);
                    if (shortValue == Integer.MIN_VALUE) {
                        unsafe.putShort(pojo, fieldOffset, Short.MIN_VALUE);
                    } else {
                        unsafe.putShort(pojo, fieldOffset, (short) shortValue);
                    }
                    break;
                case BYTE:
                    int byteValue = rec.getInt(fieldName);
                    if (byteValue == Integer.MIN_VALUE) {
                        unsafe.putByte(pojo, fieldOffset, Byte.MIN_VALUE);
                    } else {
                        unsafe.putByte(pojo, fieldOffset, (byte) byteValue);
                    }
                    break;
                case CHAR:
                    int charValue = rec.getInt(fieldName);
                    if (charValue == Integer.MIN_VALUE) {
                        unsafe.putChar(pojo, fieldOffset, Character.MIN_VALUE);
                    } else {
                        unsafe.putChar(pojo, fieldOffset, (char) charValue);
                    }
                    break;
                case LONG:
                    long longValue = rec.getLong(fieldName);
                    unsafe.putLong(pojo, fieldOffset, longValue);
                    break;
                case DOUBLE:
                    double doubleValue = rec.getDouble(fieldName);
                    unsafe.putDouble(pojo, fieldOffset, doubleValue);
                    break;
                case FLOAT:
                    float floatValue = rec.getFloat(fieldName);
                    unsafe.putFloat(pojo, fieldOffset, floatValue);
                    break;
                case STRING:
                    unsafe.putObject(pojo, fieldOffset, rec.getString(fieldName));
                    break;
                case BYTES:
                    unsafe.putObject(pojo, fieldOffset, rec.getBytes(fieldName));
                    break;
                case INLINED_BOOLEAN:
                    if (!rec.isNull(fieldName)) {
                        unsafe.putObject(pojo, fieldOffset, Boolean.valueOf(rec.getBoolean(fieldName)));
                    }
                    break;
                case INLINED_INT:
                    int inlinedIntValue = rec.getInt(fieldName);
                    if (inlinedIntValue != Integer.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, Integer.valueOf(inlinedIntValue));
                    }
                    break;
                case INLINED_SHORT:
                    int inlinedShortValue = rec.getInt(fieldName);
                    if (inlinedShortValue != Integer.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, Short.valueOf((short) inlinedShortValue));
                    }
                    break;
                case INLINED_BYTE:
                    int inlinedByteValue = rec.getInt(fieldName);
                    if (inlinedByteValue != Integer.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, Byte.valueOf((byte) inlinedByteValue));
                    }
                    break;
                case INLINED_CHAR:
                    int inlinedCharValue = rec.getInt(fieldName);
                    if (inlinedCharValue != Integer.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, Character.valueOf((char) inlinedCharValue));
                    }
                    break;
                case INLINED_LONG:
                    long inlinedLongValue = rec.getLong(fieldName);
                    if (inlinedLongValue != Long.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, Long.valueOf(inlinedLongValue));
                    }
                    break;
                case INLINED_DOUBLE:
                    double inlinedDoubleValue = rec.getDouble(fieldName);
                    if (!Double.isNaN(inlinedDoubleValue)) {
                        unsafe.putObject(pojo, fieldOffset, Double.valueOf(inlinedDoubleValue));
                    }
                    break;
                case INLINED_FLOAT:
                    float inlinedFloatValue = rec.getFloat(fieldName);
                    if (!Float.isNaN(inlinedFloatValue)) {
                        unsafe.putObject(pojo, fieldOffset, Float.valueOf(inlinedFloatValue));
                    }
                    break;
                case INLINED_STRING:
                    unsafe.putObject(pojo, fieldOffset, rec.getString(fieldName));
                    break;
                case DATE_TIME:
                    long dateValue = rec.getLong(fieldName);
                    if (dateValue != Long.MIN_VALUE) {
                        unsafe.putObject(pojo, fieldOffset, new Date(dateValue));
                    }
                    break;
                case ENUM_NAME:
                    String enumNameValue = rec.getString(fieldName);
                    if (enumNameValue != null) {
                        unsafe.putObject(pojo, fieldOffset, Enum.valueOf((Class<Enum>) type, enumNameValue));
                    }
                    break;
                case REFERENCE:
                    HollowRecord fieldRecord = rec.getReferencedGenericRecord(fieldName);
                    if(fieldRecord != null) {
                        unsafe.putObject(pojo, fieldOffset, subTypeMapper.parseHollowRecord(fieldRecord));
                    }
                    break;
                default:
                    throw new IllegalArgumentException("Unexpected field type " + fieldType + " for field " + fieldName);
            }
        }