Skip to content

Commit

Permalink
avoid iterator for first element getting
Browse files Browse the repository at this point in the history
  • Loading branch information
thiakil committed Aug 30, 2024
1 parent 27e8b15 commit bfe0f48
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 16 deletions.
10 changes: 6 additions & 4 deletions src/api/java/mekanism/api/chemical/ChemicalUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,15 @@ public static ChemicalStack insert(ChemicalStack stack, @Nullable Direction side
*
* @since 10.6.0
*/
public static ChemicalStack insert(ChemicalStack stack, Action action, AutomationType automationType, int size, Iterable<IChemicalTank> chemicalTanks) {
public static ChemicalStack insert(ChemicalStack stack, Action action, AutomationType automationType, int size, List<IChemicalTank> chemicalTanks) {
if (stack.isEmpty()) {
//Short circuit if nothing is actually being inserted
return ChemicalStack.EMPTY;
} else if (size == 0) {
return stack;
} else if (size == 1) {
return chemicalTanks.iterator().next().insert(stack, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return chemicalTanks.get(0).insert(stack, action, automationType);
}
ChemicalStack toInsert = stack;
//Start by trying to insert into the tanks that have the same type
Expand Down Expand Up @@ -185,11 +186,12 @@ public static ChemicalStack extract(long amount, @Nullable Direction side, Funct
*
* @since 10.6.0
*/
public static ChemicalStack extract(long amount, Action action, AutomationType automationType, int size, Iterable<IChemicalTank> chemicalTanks) {
public static ChemicalStack extract(long amount, Action action, AutomationType automationType, int size, List<IChemicalTank> chemicalTanks) {
if (amount == 0 || size == 0) {
return ChemicalStack.EMPTY;
} else if (size == 1) {
return chemicalTanks.iterator().next().extract(amount, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return chemicalTanks.get(0).extract(amount, action, automationType);
}
ChemicalStack extracted = ChemicalStack.EMPTY;
long toDrain = amount;
Expand Down
15 changes: 9 additions & 6 deletions src/api/java/mekanism/api/fluid/ExtendedFluidHandlerUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,15 @@ public static FluidStack insert(FluidStack stack, @Nullable Direction side, Func
*
* @since 10.6.0
*/
public static FluidStack insert(FluidStack stack, Action action, AutomationType automationType, int size, Iterable<IExtendedFluidTank> fluidTanks) {
public static FluidStack insert(FluidStack stack, Action action, AutomationType automationType, int size, List<IExtendedFluidTank> fluidTanks) {
if (stack.isEmpty()) {
//Short circuit if nothing is actually being inserted
return FluidStack.EMPTY;
} else if (size == 0) {
return stack;
} else if (size == 1) {
return fluidTanks.iterator().next().insert(stack, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return fluidTanks.get(0).insert(stack, action, automationType);
}
FluidStack toInsert = stack;
//Start by trying to insert into the tanks that have the same type
Expand Down Expand Up @@ -181,11 +182,12 @@ public static FluidStack extract(int amount, @Nullable Direction side, Function<
*
* @since 10.6.0
*/
public static FluidStack extract(int amount, Action action, AutomationType automationType, int size, Iterable<IExtendedFluidTank> fluidTanks) {
public static FluidStack extract(int amount, Action action, AutomationType automationType, int size, List<IExtendedFluidTank> fluidTanks) {
if (amount == 0 || size == 0) {
return FluidStack.EMPTY;
} else if (size == 1) {
return fluidTanks.iterator().next().extract(amount, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return fluidTanks.get(0).extract(amount, action, automationType);
}
FluidStack extracted = FluidStack.EMPTY;
int toDrain = amount;
Expand Down Expand Up @@ -277,11 +279,12 @@ public static FluidStack extract(FluidStack stack, @Nullable Direction side, Fun
*
* @since 10.6.0
*/
public static FluidStack extract(FluidStack stack, Action action, AutomationType automationType, int size, Iterable<IExtendedFluidTank> fluidTanks) {
public static FluidStack extract(FluidStack stack, Action action, AutomationType automationType, int size, List<IExtendedFluidTank> fluidTanks) {
if (stack.isEmpty() || size == 0) {
return FluidStack.EMPTY;
} else if (size == 1) {
IExtendedFluidTank tank = fluidTanks.iterator().next();
//noinspection SequencedCollectionMethodCanBeUsed: we know size
IExtendedFluidTank tank = fluidTanks.get(0);
if (tank.isEmpty() || !tank.isFluidEqual(stack)) {
return FluidStack.EMPTY;
}
Expand Down
10 changes: 6 additions & 4 deletions src/api/java/mekanism/api/math/LongTransferUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,15 @@ public static long insert(long stack, @Nullable Direction side, Function<@Nullab
*
* @since 10.6.0
*/
public static long insert(long stack, Action action, AutomationType automationType, int containerCount, Iterable<IEnergyContainer> energyContainers) {
public static long insert(long stack, Action action, AutomationType automationType, int containerCount, List<IEnergyContainer> energyContainers) {
if (stack <= 0L) {
//Short circuit if no energy is trying to be inserted
return 0L;
} else if (containerCount == 0) {
return stack;
} else if (containerCount == 1) {
return energyContainers.iterator().next().insert(stack, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return energyContainers.get(0).insert(stack, action, automationType);
}
long toInsert = stack;
//Start by trying to insert into the containers that are not empty
Expand Down Expand Up @@ -184,12 +185,13 @@ public static long extract(long amount, @Nullable Direction side, Function<@Null
*
* @since 10.6.0
*/
public static long extract(long amount, Action action, AutomationType automationType, int containerCount, Iterable<IEnergyContainer> energyContainers) {
public static long extract(long amount, Action action, AutomationType automationType, int containerCount, List<IEnergyContainer> energyContainers) {
if (amount <= 0L || containerCount == 0) {
//Short circuit if no energy is trying to be extracted
return 0L;
} else if (containerCount == 1) {
return energyContainers.iterator().next().extract(amount, action, automationType);
//noinspection SequencedCollectionMethodCanBeUsed: we know size
return energyContainers.get(0).extract(amount, action, automationType);
}
long extracted = 0;
long toExtract = amount;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package mekanism.common.attachments.containers;

import java.util.AbstractList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
Expand All @@ -11,7 +12,7 @@
import org.jetbrains.annotations.Nullable;

@NothingNullByDefault
public abstract class ComponentBackedHandler<TYPE, CONTAINER extends INBTSerializable<CompoundTag>, ATTACHED extends IAttachedContainers<TYPE, ATTACHED>>
public abstract class ComponentBackedHandler<TYPE, CONTAINER extends INBTSerializable<CompoundTag>, ATTACHED extends IAttachedContainers<TYPE, ATTACHED>> extends AbstractList<CONTAINER>
implements IContentsListener, Iterable<CONTAINER> {

protected final ItemStack attachedTo;
Expand Down Expand Up @@ -72,10 +73,15 @@ protected CONTAINER getContainer(int index) {
return container == null ? initializeContainer(index) : container;
}

protected int size() {
public int size() {
return totalContainers;
}

@Override
public CONTAINER get(int index) {
return getContainer(index);
}

@Override
public void onContentsChanged() {
}
Expand Down

0 comments on commit bfe0f48

Please sign in to comment.