hollow/src/main/java/com/netflix/hollow/tools/history/HollowHistoricalStateCreator.java
public HollowHistoricalStateDataAccess createHistoricalStateFromDoubleSnapshot(long version, HollowReadStateEngine previous, HollowReadStateEngine current, DiffEqualityMappingOrdinalRemapper ordinalRemapper) {
        HollowWriteStateEngine writeEngine = HollowWriteStateCreator.createWithSchemas(schemasWithoutKeys(previous.getSchemas()));
        IntMapOrdinalRemapper typeRemovedOrdinalLookupMaps = new IntMapOrdinalRemapper();

        for(HollowSchema previousSchema : HollowSchemaSorter.dependencyOrderedSchemaList(previous)) {
            HollowTypeReadState previousTypeState = previous.getTypeState(previousSchema.getName());
            String typeName = previousTypeState.getSchema().getName();
            IntMap ordinalLookupMap;

            if(current.getTypeState(typeName) == null) {
                ordinalLookupMap = copyAllRecords(previousTypeState, ordinalRemapper, writeEngine);
            } else {
                HollowTypeReadState currentTypeState = current.getTypeState(typeName);
                BitSet currentlyPopulatedOrdinals = currentTypeState.getListener(PopulatedOrdinalListener.class).getPopulatedOrdinals();
                ordinalLookupMap = copyUnmatchedRecords(previousTypeState, ordinalRemapper, currentlyPopulatedOrdinals, writeEngine);
            }
            typeRemovedOrdinalLookupMaps.addOrdinalRemapping(typeName, ordinalLookupMap);
        }

        Map<String, HollowHistoricalSchemaChange> schemaChanges = calculateSchemaChanges(previous, current, ordinalRemapper.getDiffEqualityMapping());

        return new HollowHistoricalStateDataAccess(totalHistory, version, roundTripStateEngine(writeEngine), typeRemovedOrdinalLookupMaps, schemaChanges);
    }
public HollowHistoricalStateDataAccess createHistoricalStateFromDoubleSnapshot(long version, HollowReadStateEngine previous, HollowReadStateEngine current, DiffEqualityMappingOrdinalRemapper ordinalRemapper) {
        HollowWriteStateEngine writeEngine = HollowWriteStateCreator.createWithSchemas(schemasWithoutKeys(previous.getSchemas()));
        IntMapOrdinalRemapper typeRemovedOrdinalLookupMaps = new IntMapOrdinalRemapper();

        for(HollowSchema previousSchema : HollowSchemaSorter.dependencyOrderedSchemaList(previous)) {
            HollowTypeReadState previousTypeState = previous.getTypeState(previousSchema.getName());
            String typeName = previousTypeState.getSchema().getName();
            IntMap ordinalLookupMap;

            if(current.getTypeState(typeName) == null) {
                ordinalLookupMap = copyAllRecords(previousTypeState, ordinalRemapper, writeEngine);
            } else {
                HollowTypeReadState currentTypeState = current.getTypeState(typeName);
                BitSet currentlyPopulatedOrdinals = currentTypeState.getListener(PopulatedOrdinalListener.class).getPopulatedOrdinals();
                ordinalLookupMap = copyUnmatchedRecords(previousTypeState, ordinalRemapper, currentlyPopulatedOrdinals, writeEngine);
            }
            typeRemovedOrdinalLookupMaps.addOrdinalRemapping(typeName, ordinalLookupMap);
        }

        Map<String, HollowHistoricalSchemaChange> schemaChanges = calculateSchemaChanges(previous, current, ordinalRemapper.getDiffEqualityMapping());

        return new HollowHistoricalStateDataAccess(totalHistory, version, roundTripStateEngine(writeEngine), typeRemovedOrdinalLookupMaps, schemaChanges);
    }
Create a {@link HollowDataAccess} for a historical state after a double snapshot occurs, without a {@link HollowHistory}.

@param version the version
@param previous the previous state
@param current the current state
@param ordinalRemapper the ordinal remapper
@return the data access for a history