From 2428704239a1ab7ed29490d0d30ce7231d428b94 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Mon, 10 Sep 2018 23:34:34 -0700 Subject: Fix caching --- src/main/java/gregtech/api/enums/OrePrefixes.java | 45 ++++++++++++++--------- 1 file changed, 28 insertions(+), 17 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 31d3046bdb..ff76ed74ad 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -863,38 +863,49 @@ public enum OrePrefixes { public boolean add(ItemStack aStack) { if (aStack == null) return false; - if (!contains(aStack)) mPrefixedItems.add(aStack); + if (!contains(aStack)) { + mPrefixedItems.add(aStack); + // It's now in there... so update the cache + getSet(this.toString().toUpperCase()).put(Objects.hashCode(aStack.getItem(), aStack.getItemDamage()), true); + } while (mPrefixedItems.contains(null)) mPrefixedItems.remove(null); return true; } private static final LinkedHashMap>mCachedResults = new LinkedHashMap>(); + private ObjMap getSet(final String prefix) { + ObjMap foundSet = mCachedResults.get(prefix); + if (foundSet == null){ + foundSet = new ObjMap(512, 0.5f); + mCachedResults.put(prefix, foundSet); + } + + return foundSet; + } + public boolean contains(ItemStack aStack) { - if (aStack == null){ + if (aStack == null) { return false; } - ObjMap aCurrentSet = mCachedResults.get(this.toString().toUpperCase()); - if (aCurrentSet == null){ - aCurrentSet = new ObjMap((mPrefixedItems != null && mPrefixedItems.size() > 0 ? mPrefixedItems.size() : 1000), 0.5f); - mCachedResults.put(this.toString().toUpperCase(), aCurrentSet); - } + final ObjMap aCurrentSet = getSet(this.toString().toUpperCase()); + final Boolean result = aCurrentSet.get(Objects.hashCode(aStack.getItem(), aStack.getItemDamage())); - int mainHash = Objects.hashCode(aStack.getItem(), aStack.getItemDamage()); - Boolean result = aCurrentSet.get(mainHash); - if (result != null){ + if (result != null) { return result; } - else { - for (ItemStack tStack : mPrefixedItems){ - if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())){ - aCurrentSet.put(Objects.hashCode(tStack.getItem(), tStack.getItemDamage()), true); - return true; - } + + return false; + } + + public boolean containsUnCached(ItemStack aStack) { + // In case someone needs this + for (ItemStack tStack : mPrefixedItems){ + if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())){ + return true; } } - aCurrentSet.put(mainHash, false); return false; } -- cgit