public HollowWriteRecord copy()

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