From 9a31bb81bfe903af44d55fb2870ae996a42f32bd Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Tue, 21 Aug 2018 07:58:41 +0200 Subject: alkalus' fix to improve performance on the typefilter... --- src/main/java/gregtech/api/enums/OrePrefixes.java | 34 +++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/main/java/gregtech/api/enums') diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 5a776b60c4..2dbeabf5c9 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -865,10 +865,38 @@ public enum OrePrefixes { return true; } + private static final HashMap>mCachedResults = new HashMap>(); + public boolean contains(ItemStack aStack) { - if (aStack == null) return false; - for (ItemStack tStack : mPrefixedItems) - if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) return true; + + if (aStack == null){ + return false; + } + + HashMap aCurrentSet; + if (mCachedResults.get(this.toString()) != null){ + aCurrentSet = mCachedResults.get(this.toString()); + } + + else { + aCurrentSet = new HashMap(); + mCachedResults.put(this.toString(), aCurrentSet); + } + + if (aCurrentSet.get(aStack) != null){ + return aCurrentSet.get(aStack); + } + else { + for (ItemStack tStack : mPrefixedItems){ + if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())){ + aCurrentSet.put(aStack, true); + return true; + } + } + } + + aCurrentSet.put(aStack, false); + return false; } -- cgit From 2c989cac10dbcf516adc63e57e0557803df95da6 Mon Sep 17 00:00:00 2001 From: Richard Hendricks Date: Sat, 25 Aug 2018 23:43:11 -0500 Subject: Change to use an ObjMap --- src/main/java/gregtech/api/enums/OrePrefixes.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'src/main/java/gregtech/api/enums') diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 2dbeabf5c9..3edb12ed25 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -8,6 +8,7 @@ import gregtech.api.interfaces.IOreRecipeRegistrator; import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.objects.ItemData; import gregtech.api.objects.MaterialStack; +import gregtech.api.objects.ObjMap; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; import gregtech.loaders.materialprocessing.ProcessingModSupport; @@ -865,38 +866,34 @@ public enum OrePrefixes { return true; } - private static final HashMap>mCachedResults = new HashMap>(); - + private static final LinkedHashMap>mCachedResults = new LinkedHashMap>(); + public boolean contains(ItemStack aStack) { - if (aStack == null){ return false; } - - HashMap aCurrentSet; + ObjMap aCurrentSet; if (mCachedResults.get(this.toString()) != null){ aCurrentSet = mCachedResults.get(this.toString()); } else { - aCurrentSet = new HashMap(); + aCurrentSet = new ObjMap(mPrefixedItems.size(), 0.5f); mCachedResults.put(this.toString(), aCurrentSet); } - if (aCurrentSet.get(aStack) != null){ - return aCurrentSet.get(aStack); + if (aCurrentSet.get(aStack.hashCode()) != null){ + return aCurrentSet.get(aStack.hashCode()); } else { for (ItemStack tStack : mPrefixedItems){ if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())){ - aCurrentSet.put(aStack, true); + aCurrentSet.put(aStack.hashCode(), true); return true; } } } - - aCurrentSet.put(aStack, false); - + aCurrentSet.put(aStack.hashCode(), false); return false; } -- cgit From 453becda075fa68fccacdb069544a8c95c96ecfa Mon Sep 17 00:00:00 2001 From: Richard Hendricks Date: Sun, 26 Aug 2018 02:24:24 -0500 Subject: Final version of Alkalus's type filter fix. #3367 --- src/main/java/gregtech/api/enums/OrePrefixes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/gregtech/api/enums') diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 3edb12ed25..72f04dd7c9 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -878,7 +878,7 @@ public enum OrePrefixes { } else { - aCurrentSet = new ObjMap(mPrefixedItems.size(), 0.5f); + aCurrentSet = new ObjMap((mPrefixedItems != null && mPrefixedItems.size() > 0 ? mPrefixedItems.size() : 1000), 0.5f); mCachedResults.put(this.toString(), aCurrentSet); } -- cgit