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);
}
}