Skip to content

Commit 15b46f7

Browse files
committed
merge slot index for loop
use methods instead of field access improve immutable tests
1 parent d09ad8f commit 15b46f7

File tree

2 files changed

+20
-25
lines changed

2 files changed

+20
-25
lines changed

src/main/java/gregtech/api/capability/impl/ItemHandlerList.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -178,32 +178,33 @@ public IItemHandler get(int index) {
178178
public IItemHandler remove(int index) {
179179
if (invalidIndex(index)) throw new IndexOutOfBoundsException();
180180

181-
IItemHandler handler = get(index);
181+
IItemHandler removed = get(index);
182+
int removedSlots = removed.getSlots();
182183

183184
// remove handler
184-
int lower = baseIndexOffset.removeInt(handler);
185+
int lower = baseIndexOffset.removeInt(removed);
185186

187+
// update slot indices ahead of the removed handler and
186188
// remove slot indices
187-
int upper = lower + handler.getSlots();
188-
for (int i = lower; i < upper; i++) {
189-
handlerBySlotIndex.remove(i);
190-
}
191-
192-
// update slot indices ahead of the removed handler
193-
for (int slot = upper; slot < getSlots() + handler.getSlots(); slot++) {
194-
IItemHandler remove = handlerBySlotIndex.remove(slot);
195-
handlerBySlotIndex.put(slot - upper, remove);
189+
int upper = lower + removedSlots;
190+
int size = getSlots(); // slot size will be mutated
191+
for (int i = lower; i < size; i++) {
192+
if (i < upper) {
193+
handlerBySlotIndex.put(i, getHandlerBySlot(i + removedSlots));
194+
} else {
195+
handlerBySlotIndex.remove(i);
196+
}
196197
}
197198

198199
// update handlers ahead of the removed handler
199-
for (IItemHandler h : baseIndexOffset.keySet()) {
200-
int offset = baseIndexOffset.getInt(h);
200+
for (IItemHandler h : this) {
201+
int offset = getIndexOffset(h);
201202
if (offset > lower) {
202-
baseIndexOffset.put(h, offset - handler.getSlots());
203+
baseIndexOffset.put(h, offset - removedSlots);
203204
}
204205
}
205206

206-
return handler;
207+
return removed;
207208
}
208209

209210
@Override

src/test/java/gregtech/api/capability/impl/ItemHandlerListTest.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,14 @@ public void testListOperations() {
5555
// test immutable
5656
ItemHandlerList immutable = list.toImmutable();
5757

58-
boolean testRemove = false;
5958
try {
6059
immutable.remove(0);
61-
} catch (UnsupportedOperationException ignored) {
62-
testRemove = true;
63-
}
64-
assertThat("list was modified!", testRemove);
60+
assertThat("list was modified!", false);
61+
} catch (UnsupportedOperationException ignored) {}
6562

66-
boolean testAdd = false;
6763
try {
6864
immutable.add(firstHandler);
69-
} catch (UnsupportedOperationException ignored) {
70-
testAdd = true;
71-
}
72-
assertThat("list was modified!", testAdd);
65+
assertThat("list was modified!", false);
66+
} catch (UnsupportedOperationException ignored) {}
7367
}
7468
}

0 commit comments

Comments
 (0)