improve GameDataCategory lookup time

by changing it to something backed by a HashMap with
 the id as key things can be found without looping over every element.
 This reduced the startup time on my machine to about half of the original time
This commit is contained in:
OMGeeky
2025-08-31 19:18:30 +02:00
parent 297bff84db
commit 703b723322
9 changed files with 147 additions and 103 deletions

View File

@@ -290,7 +290,7 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
public void linkAll() {
for (ProjectTreeNode node : baseContent.gameData.v.getNonEmptyIterable()) {
if (node instanceof GameDataCategory<?>) {
for (GameDataElement e : ((GameDataCategory<?>) node)) {
for (GameDataElement e : ((GameDataCategory<?>) node).toList()) {
e.link();
}
}
@@ -300,7 +300,7 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
}
for (ProjectTreeNode node : alteredContent.gameData.v.getNonEmptyIterable()) {
if (node instanceof GameDataCategory<?>) {
for (GameDataElement e : ((GameDataCategory<?>) node)) {
for (GameDataElement e : ((GameDataCategory<?>) node).toList()) {
e.link();
}
}
@@ -310,7 +310,7 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
}
for (ProjectTreeNode node : createdContent.gameData.v.getNonEmptyIterable()) {
if (node instanceof GameDataCategory<?>) {
for (GameDataElement e : ((GameDataCategory<?>) node)) {
for (GameDataElement e : ((GameDataCategory<?>) node).toList()) {
e.link();
}
}
@@ -937,14 +937,14 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
public void moveToCreated(JSONElement target) {
target.childrenRemoved(new ArrayList<ProjectTreeNode>());
((GameDataCategory<?>) target.getParent()).remove(target);
((GameDataCategory<?>) target.getParent()).removeGeneric(target);
target.state = GameDataElement.State.created;
createdContent.gameData.addElement(target);
}
public void moveToAltered(JSONElement target) {
target.childrenRemoved(new ArrayList<ProjectTreeNode>());
((GameDataCategory<?>) target.getParent()).remove(target);
((GameDataCategory<?>) target.getParent()).removeGeneric(target);
target.state = GameDataElement.State.created;
((JSONElement) target).jsonFile = new File(baseContent.gameData.getGameDataElement(((JSONElement) target).getClass(), target.id).jsonFile.getAbsolutePath());
alteredContent.gameData.addElement((JSONElement) target);
@@ -1202,18 +1202,18 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
List<String> filenamesToWrite = new LinkedList<String>();
Map<String, List<Map>> dataToWritePerFilename = new LinkedHashMap<String, List<Map>>();
for (JSONElement gde : altered) {
for (JSONElement gde : altered.toList()) {
if (!filenamesToWrite.contains(gde.jsonFile.getName())) {
filenamesToWrite.add(gde.jsonFile.getName());
}
}
for (JSONElement gde : created) {
for (JSONElement gde : created.toList()) {
if (!filenamesToWrite.contains(gde.jsonFile.getName())) {
filenamesToWrite.add(gde.jsonFile.getName());
}
}
for (String fName : filenamesToWrite) {
for (JSONElement gde : source) {
for (JSONElement gde : source.toList()) {
if (gde.jsonFile.getName().equals(fName)) {
if (dataToWritePerFilename.get(fName) == null) {
dataToWritePerFilename.put(fName, new ArrayList<Map>());
@@ -1222,7 +1222,7 @@ public class Project implements ProjectTreeNode, Serializable, JsonSerializable
dataToWritePerFilename.get(fName).add(getGameDataElement(gdeClass, gde.id).toJson());
}
}
for (JSONElement gde : created) {
for (JSONElement gde : created.toList()) {
if (gde.jsonFile.getName().equals(fName)) {
if (dataToWritePerFilename.get(fName) == null) {
dataToWritePerFilename.put(fName, new ArrayList<Map>());