private int copy(int ordinal) {
if(isOrdinalPopulated(ordinal)) {
if(!ordinalRemapper.ordinalIsMapped(getType(), ordinal)) {
HollowWriteRecord rec = copier.copy(ordinal);
if(hashOrderIndependentOrdinalMap == null) {
int outputOrdinal = writeState.add(rec);
ordinalRemapper.remapOrdinal(getType(), ordinal, outputOrdinal);
return outputOrdinal;
} else {
scratch.reset();
((HollowHashableWriteRecord)rec).writeDataTo(scratch, HashBehavior.IGNORED_HASHES);
int outputOrdinal = hashOrderIndependentOrdinalMap.get(scratch);
if(outputOrdinal != -1)
return outputOrdinal;
synchronized(hashOrderIndependentOrdinalMap) {
outputOrdinal = hashOrderIndependentOrdinalMap.get(scratch);
if(outputOrdinal != -1)
return outputOrdinal;
outputOrdinal = writeState.add(rec);
ordinalRemapper.remapOrdinal(getType(), ordinal, outputOrdinal);
hashOrderIndependentOrdinalMap.put(scratch, outputOrdinal);
}
}
}
return ordinalRemapper.getMappedOrdinal(getType(), ordinal);
}
return -1;
}