diff options
author | Glease <4586901+Glease@users.noreply.github.com> | 2021-12-23 23:20:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-23 16:20:22 +0100 |
commit | 7b8e03613eb71eac397f7d9c4a7f47d494eaf9d0 (patch) | |
tree | 7f4c4a44a3b09ed391ac733aa0c592651c031b37 /src/main/java/gregtech/api/objects | |
parent | df95cf0e851bc3b0a8a5969bff1613c464761fe7 (diff) | |
download | GT5-Unofficial-7b8e03613eb71eac397f7d9c4a7f47d494eaf9d0.tar.gz GT5-Unofficial-7b8e03613eb71eac397f7d9c4a7f47d494eaf9d0.tar.bz2 GT5-Unofficial-7b8e03613eb71eac397f7d9c4a7f47d494eaf9d0.zip |
Optimize OrePrefixes.contains and OrePrefixes.add (#832)
1. Convert global map mCachedResults to an instance field.
2. Convert the post add null check to a builtin null check via GT_ArrayList
3. Use new GT_ItemStack2 (which has a slightly better hash function than stackToInt)
Diffstat (limited to 'src/main/java/gregtech/api/objects')
-rw-r--r-- | src/main/java/gregtech/api/objects/GT_ArrayList.java | 11 | ||||
-rw-r--r-- | src/main/java/gregtech/api/objects/GT_ItemStack2.java | 38 |
2 files changed, 43 insertions, 6 deletions
diff --git a/src/main/java/gregtech/api/objects/GT_ArrayList.java b/src/main/java/gregtech/api/objects/GT_ArrayList.java index 8c491e86c4..a9efd8d0a0 100644 --- a/src/main/java/gregtech/api/objects/GT_ArrayList.java +++ b/src/main/java/gregtech/api/objects/GT_ArrayList.java @@ -1,8 +1,11 @@ package gregtech.api.objects; +import com.google.common.collect.Collections2; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Objects; public class GT_ArrayList<E> extends ArrayList<E> { private static final long serialVersionUID = 1L; @@ -46,15 +49,11 @@ public class GT_ArrayList<E> extends ArrayList<E> { @Override public boolean addAll(Collection<? extends E> aList) { - boolean rReturn = super.addAll(aList); - if (!mAllowNulls) {size_sS=size(); for (int i = 0; i < size_sS; i++) if (get(i) == null) {remove(i--);size_sS=size();}} - return rReturn; + return super.addAll(Collections2.filter(aList, Objects::nonNull)); } @Override public boolean addAll(int aIndex, Collection<? extends E> aList) { - boolean rReturn = super.addAll(aIndex, aList); - if (!mAllowNulls) {size_sS=size(); for (int i = 0; i < size_sS; i++) if (get(i) == null) {remove(i--);size_sS=size();}} - return rReturn; + return super.addAll(aIndex, Collections2.filter(aList, Objects::nonNull)); } } diff --git a/src/main/java/gregtech/api/objects/GT_ItemStack2.java b/src/main/java/gregtech/api/objects/GT_ItemStack2.java new file mode 100644 index 0000000000..93f2da6d6b --- /dev/null +++ b/src/main/java/gregtech/api/objects/GT_ItemStack2.java @@ -0,0 +1,38 @@ +package gregtech.api.objects; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * GT_ItemStack, but with a better hashCode(). Due to this change, it should not be placed in the same hash based + * data structure with GT_ItemStack. It also shouldn't be used to construct search query into a hash based data structure + * that contains GT_ItemStack. + */ +public class GT_ItemStack2 extends GT_ItemStack { + + public GT_ItemStack2(Item aItem, long aStackSize, long aMetaData) { + super(aItem, aStackSize, aMetaData); + } + + public GT_ItemStack2(ItemStack aStack) { + super(aStack); + } + + public GT_ItemStack2(ItemStack aStack, boolean wildcard) { + super(aStack, wildcard); + } + + @Override + public boolean equals(Object aStack) { + if (aStack == this) return true; + if (aStack instanceof GT_ItemStack) { + return ((GT_ItemStack) aStack).mItem == mItem && ((GT_ItemStack) aStack).mMetaData == mMetaData; + } + return false; + } + + @Override + public int hashCode() { + return mItem.hashCode() * 38197 + mMetaData; + } +} |