in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/HollowObjectTypeMapper.java [464:587]
public void copy(Object obj, HollowObjectWriteRecord rec, FlatRecordWriter flatRecordWriter) {
Object fieldObject;
switch(fieldType) {
case BOOLEAN:
rec.setBoolean(fieldName, unsafe.getBoolean(obj, fieldOffset));
break;
case INT:
rec.setInt(fieldName, unsafe.getInt(obj, fieldOffset));
break;
case SHORT:
short shortValue = unsafe.getShort(obj, fieldOffset);
if (shortValue == Short.MIN_VALUE) {
rec.setInt(fieldName, Integer.MIN_VALUE);
} else {
rec.setInt(fieldName, shortValue);
}
break;
case BYTE:
byte byteValue = unsafe.getByte(obj, fieldOffset);
if (byteValue == Byte.MIN_VALUE) {
rec.setInt(fieldName, Integer.MIN_VALUE);
} else {
rec.setInt(fieldName, byteValue);
}
break;
case CHAR:
char charValue = unsafe.getChar(obj, fieldOffset);
if (charValue == Character.MIN_VALUE) {
rec.setInt(fieldName, Integer.MIN_VALUE);
} else {
rec.setInt(fieldName, charValue);
}
break;
case LONG:
rec.setLong(fieldName, unsafe.getLong(obj, fieldOffset));
break;
case DOUBLE:
double d = unsafe.getDouble(obj, fieldOffset);
if(!Double.isNaN(d))
rec.setDouble(fieldName, d);
break;
case FLOAT:
float f = unsafe.getFloat(obj, fieldOffset);
if(!Float.isNaN(f))
rec.setFloat(fieldName, f);
break;
case STRING:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setString(fieldName, getStringFromField(obj, fieldObject));
break;
case BYTES:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setBytes(fieldName, (byte[])fieldObject);
break;
case INLINED_BOOLEAN:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setBoolean(fieldName, ((Boolean)fieldObject).booleanValue());
break;
case INLINED_INT:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setInt(fieldName, ((Integer)fieldObject).intValue());
break;
case INLINED_SHORT:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setInt(fieldName, ((Short)fieldObject).intValue());
break;
case INLINED_BYTE:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setInt(fieldName, ((Byte)fieldObject).intValue());
break;
case INLINED_CHAR:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setInt(fieldName, (int)((Character)fieldObject).charValue());
break;
case INLINED_LONG:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setLong(fieldName, ((Long)fieldObject).longValue());
break;
case INLINED_DOUBLE:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setDouble(fieldName, ((Double)fieldObject).doubleValue());
break;
case INLINED_FLOAT:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setFloat(fieldName, ((Float)fieldObject).floatValue());
break;
case INLINED_STRING:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setString(fieldName, (String)fieldObject);
break;
case NULLABLE_PRIMITIVE_BOOLEAN:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null)
rec.setBoolean(fieldName, ((NullablePrimitiveBoolean)fieldObject).getBooleanValue());
break;
case DATE_TIME:
rec.setLong(fieldName, ((Date)obj).getTime());
break;
case ENUM_NAME:
rec.setString(fieldName, ((Enum<?>)obj).name());
break;
case REFERENCE:
fieldObject = unsafe.getObject(obj, fieldOffset);
if(fieldObject != null) {
if(flatRecordWriter == null)
rec.setReference(fieldName, subTypeMapper.write(fieldObject));
else
rec.setReference(fieldName, subTypeMapper.writeFlat(fieldObject, flatRecordWriter));
}
break;
}
}