in hollow/src/main/java/com/netflix/hollow/core/write/copy/HollowObjectCopier.java [41:97]
public HollowWriteRecord copy(int ordinal) {
HollowObjectTypeReadState objectReadState = readState();
HollowObjectWriteRecord rec = rec();
rec.reset();
for(int i=0;i<rec.getSchema().numFields();i++) {
String fieldName = rec.getSchema().getFieldName(i);
int readFieldIndex = fieldIndexMapping[i];
if(readFieldIndex != -1) {
switch(rec().getSchema().getFieldType(i)) {
case BOOLEAN:
Boolean bool = objectReadState.readBoolean(ordinal, readFieldIndex);
if(bool != null)
rec.setBoolean(fieldName, bool.booleanValue());
break;
case BYTES:
byte[] bytes = objectReadState.readBytes(ordinal, readFieldIndex);
if(bytes != null)
rec.setBytes(fieldName, bytes);
break;
case STRING:
String str = objectReadState.readString(ordinal, readFieldIndex);
if(str != null)
rec.setString(fieldName, str);
break;
case DOUBLE:
double doubleVal = objectReadState.readDouble(ordinal, readFieldIndex);
if(!Double.isNaN(doubleVal))
rec.setDouble(fieldName, doubleVal);
break;
case FLOAT:
float floatVal = (float)objectReadState.readFloat(ordinal, readFieldIndex);
if(!Float.isNaN(floatVal))
rec.setFloat(fieldName, floatVal);
break;
case INT:
int intVal = objectReadState.readInt(ordinal, readFieldIndex);
if(intVal != Integer.MIN_VALUE)
rec.setInt(fieldName, intVal);
break;
case LONG:
long longVal = objectReadState.readLong(ordinal, readFieldIndex);
if(longVal != Long.MIN_VALUE)
rec.setLong(fieldName, longVal);
break;
case REFERENCE:
int ordinalVal = objectReadState.readOrdinal(ordinal, readFieldIndex);
if(ordinalVal >= 0) {
int remappedOrdinalVal = ordinalRemapper.getMappedOrdinal(readState().getSchema().getReferencedType(readFieldIndex), ordinalVal);
rec.setReference(fieldName, remappedOrdinalVal);
}
break;
}
}
}
return rec;
}