From 814af4610f062c71a998aab2703d77cf07a84a3f Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 5 Aug 2023 03:07:25 +0200 Subject: Performance++: ModelVersion.equals is fast and simple and ModelVersion.hash cached. --- .../refinery/store/model/internal/ModelImpl.java | 8 ++------ .../store/model/internal/ModelVersion.java | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) (limited to 'subprojects') diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java index 92694af4..2b12d5a6 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java @@ -105,7 +105,7 @@ public class ModelImpl implements Model { // Doing the commit on the interpretations Version[] interpretationVersions = new Version[interpretations.size()]; int j = 0; - for(var interpretationEntry : interpretations.entrySet()) { + for (var interpretationEntry : interpretations.entrySet()) { interpretationVersions[j++] = interpretationEntry.getValue().commit(); } ModelVersion modelVersion = new ModelVersion(interpretationVersions); @@ -140,7 +140,7 @@ public class ModelImpl implements Model { } int j = 0; for (var interpretation : interpretations.values()) { - interpretation.restore(ModelVersion.getInternalVersion(version,j++)); + interpretation.restore(ModelVersion.getInternalVersion(version, j++)); } setState(version); @@ -187,8 +187,4 @@ public class ModelImpl implements Model { public void removeListener(ModelListener listener) { listeners.remove(listener); } - - public Map> getInterpretations() { - return interpretations; - } } diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelVersion.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelVersion.java index cf3b7fc6..f81386f1 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelVersion.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelVersion.java @@ -9,25 +9,27 @@ import tools.refinery.store.map.Version; import java.util.Arrays; -public record ModelVersion(Version[] mapVersions) implements Version{ +public class ModelVersion implements Version { + final Version[] mapVersions; + final int hash; + + public ModelVersion(Version[] mapVersions) { + this.mapVersions = mapVersions; + this.hash = Arrays.hashCode(mapVersions); + } public static Version getInternalVersion(Version modelVersion, int interpretationIndex) { - return ((ModelVersion)modelVersion).mapVersions()[interpretationIndex]; + return ((ModelVersion) modelVersion).mapVersions[interpretationIndex]; } @Override public int hashCode() { - return Arrays.hashCode(mapVersions); + return hash; } @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ModelVersion that = (ModelVersion) o; - - return Arrays.equals(mapVersions, that.mapVersions); + public boolean equals(Object obj) { + return super.equals(obj); } @Override -- cgit v1.2.3-70-g09d2