From e0f001acce44277a1e4eb0ccf79b801aa25ed216 Mon Sep 17 00:00:00 2001 From: Thomas Guillemard Date: Wed, 26 Oct 2016 17:34:06 +0200 Subject: Rework saving system to improve saving time (Fix #35) --- src/main/java/cuchaz/enigma/mapping/Mappings.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/main/java/cuchaz/enigma/mapping/Mappings.java') diff --git a/src/main/java/cuchaz/enigma/mapping/Mappings.java b/src/main/java/cuchaz/enigma/mapping/Mappings.java index 7061be7..912a57a 100644 --- a/src/main/java/cuchaz/enigma/mapping/Mappings.java +++ b/src/main/java/cuchaz/enigma/mapping/Mappings.java @@ -30,6 +30,7 @@ public class Mappings { protected Map classesByObf; protected Map classesByDeobf; private final FormatType originMapping; + private Mappings previousState; public Mappings() { @@ -40,6 +41,7 @@ public class Mappings { this.originMapping = originMapping; this.classesByObf = Maps.newHashMap(); this.classesByDeobf = Maps.newHashMap(); + this.previousState = null; } public Collection classes() { @@ -204,9 +206,19 @@ public class Mappings { return originMapping; } + public void savePreviousState() + { + this.previousState = new Mappings(this.originMapping); + this.previousState.classesByDeobf = Maps.newHashMap(this.classesByDeobf); + this.previousState.classesByObf = Maps.newHashMap(this.classesByObf); + classesByDeobf.values().forEach(ClassMapping::resetDirty); + classesByObf.values().forEach(ClassMapping::resetDirty); + } + public void saveEnigmaMappings(File file, boolean isDirectoryFormat) throws IOException { new MappingsEnigmaWriter().write(file, this, isDirectoryFormat); + this.savePreviousState(); } public void saveSRGMappings(File file) throws IOException @@ -214,6 +226,10 @@ public class Mappings { new MappingsSRGWriter().write(file, this); } + public Mappings getPreviousState() { + return previousState; + } + public enum FormatType { ENIGMA_FILE, ENIGMA_DIRECTORY, SRG_FILE -- cgit v1.2.3