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