Small performance improvement: only sort the storages when needed, #1145
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
- You can now use up and down arrows to scroll through Grid search history (raoulvdberge)
|
||||
- Fixed Grid crash (raoulvdberge)
|
||||
- Fixed Fluid Grid not formatting large quantities correctly (raoulvdberge)
|
||||
- Small performance improvement: only sort the storages when needed (raoulvdberge)
|
||||
|
||||
### 1.4.2
|
||||
- Updated Forge to 2261 (raoulvdberge)
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageDiskProvider;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||
@@ -63,6 +64,12 @@ import java.util.function.Function;
|
||||
public final class RSUtils {
|
||||
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
|
||||
|
||||
public static final Comparator<IStorage> STORAGE_COMPARATOR = (left, right) -> {
|
||||
int compare = Integer.compare(right.getPriority(), left.getPriority());
|
||||
|
||||
return compare != 0 ? compare : Integer.compare(right.getStored(), left.getStored());
|
||||
};
|
||||
|
||||
public static final DecimalFormat QUANTITY_FORMATTER = new DecimalFormat("####0.#", DecimalFormatSymbols.getInstance(Locale.US));
|
||||
|
||||
private static final String NBT_INVENTORY = "Inventory_%d";
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.List;
|
||||
public interface IStorageCache<T> {
|
||||
/**
|
||||
* Invalidates the cache.
|
||||
* Should also call {@link IStorageCache#sort()} to sort the storages correctly.
|
||||
* Typically called when a {@link IStorageProvider} is added or removed from the network.
|
||||
*/
|
||||
void invalidate();
|
||||
@@ -45,6 +46,12 @@ public interface IStorageCache<T> {
|
||||
*/
|
||||
void remove(@Nonnull T stack, int size);
|
||||
|
||||
/**
|
||||
* Resorts the storages in this cache according to their priority. This needs to be called when the priority
|
||||
* of a storage changes.
|
||||
*/
|
||||
void sort();
|
||||
|
||||
/**
|
||||
* @return the list behind this cache
|
||||
*/
|
||||
|
||||
@@ -316,6 +316,10 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage,
|
||||
this.priority = priority;
|
||||
|
||||
markDirty();
|
||||
|
||||
if (network != null) {
|
||||
network.getFluidStorageCache().sort();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -323,5 +323,9 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto
|
||||
this.priority = priority;
|
||||
|
||||
markDirty();
|
||||
|
||||
if (network != null) {
|
||||
network.getItemStorageCache().sort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,6 +338,11 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS
|
||||
this.priority = priority;
|
||||
|
||||
markDirty();
|
||||
|
||||
if (network != null) {
|
||||
network.getItemStorageCache().sort();
|
||||
network.getFluidStorageCache().sort();
|
||||
}
|
||||
}
|
||||
|
||||
public IItemHandler getDisks() {
|
||||
|
||||
@@ -181,6 +181,11 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP
|
||||
this.priority = priority;
|
||||
|
||||
markDirty();
|
||||
|
||||
if (network != null) {
|
||||
network.getItemStorageCache().sort();
|
||||
network.getFluidStorageCache().sort();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStorage(INetworkMaster network) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.storage;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
||||
@@ -33,6 +34,8 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
|
||||
|
||||
list.clear();
|
||||
|
||||
sort();
|
||||
|
||||
for (IStorage<FluidStack> storage : storages) {
|
||||
if (storage.getAccessType() == AccessType.INSERT) {
|
||||
continue;
|
||||
@@ -62,6 +65,11 @@ public class StorageCacheFluid implements IStorageCache<FluidStack> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sort() {
|
||||
storages.sort(RSUtils.STORAGE_COMPARATOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<FluidStack> getList() {
|
||||
return list;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.storage;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
||||
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
||||
@@ -33,6 +34,8 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
|
||||
|
||||
list.clear();
|
||||
|
||||
sort();
|
||||
|
||||
for (IStorage<ItemStack> storage : storages) {
|
||||
if (storage.getAccessType() == AccessType.INSERT) {
|
||||
continue;
|
||||
@@ -64,6 +67,11 @@ public class StorageCacheItem implements IStorageCache<ItemStack> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sort() {
|
||||
storages.sort(RSUtils.STORAGE_COMPARATOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<ItemStack> getList() {
|
||||
return list;
|
||||
|
||||
@@ -142,12 +142,6 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
return (left.getEnergyUsage() > right.getEnergyUsage()) ? -1 : 1;
|
||||
};
|
||||
|
||||
private static final Comparator<IStorage> STORAGE_COMPARATOR = (left, right) -> {
|
||||
int compare = Integer.compare(right.getPriority(), left.getPriority());
|
||||
|
||||
return compare != 0 ? compare : Integer.compare(right.getStored(), left.getStored());
|
||||
};
|
||||
|
||||
private IItemGridHandler itemGridHandler = new ItemGridHandler(this);
|
||||
private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this);
|
||||
|
||||
@@ -222,9 +216,6 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
public void update() {
|
||||
if (!getWorld().isRemote) {
|
||||
if (canRun()) {
|
||||
itemStorage.getStorages().sort(STORAGE_COMPARATOR);
|
||||
fluidStorage.getStorages().sort(STORAGE_COMPARATOR);
|
||||
|
||||
craftingManager.update();
|
||||
|
||||
for (IReaderWriterChannel channel : readerWriterChannels.values()) {
|
||||
|
||||
Reference in New Issue
Block a user