@Override public boolean ordinalIsMapped(String type, int originalOrdinal) { return baseRemappers[stateEngineIdx].ordinalIsMapped(type, originalOrdinal); }
@Override public HollowTypeDataAccess getTypeDataAccess(String typeName, int ordinal) { HollowDataAccess state = this; while(state instanceof HollowHistoricalStateDataAccess) { HollowHistoricalStateDataAccess historicalState = (HollowHistoricalStateDataAccess)state; if(historicalState.getOrdinalMapping().ordinalIsMapped(typeName, ordinal)) return state.getTypeDataAccess(typeName); state = historicalState.getNextState(); } return state.getTypeDataAccess(typeName); }
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; }