Merge remote-tracking branch 'origin/patch'

This commit is contained in:
Ryan Kurtz 2024-01-31 08:11:00 -05:00
commit dbae97450a
5 changed files with 141 additions and 25 deletions

View file

@ -1232,6 +1232,7 @@ public class AddressSet implements AddressSetView {
private class AddressRangeIteratorAdapter implements AddressRangeIterator {
private Iterator<RedBlackEntry<Address, Address>> iterator;
private AddressRange lastReturnedRange;
public AddressRangeIteratorAdapter(Iterator<RedBlackEntry<Address, Address>> iterator) {
this.iterator = iterator;
@ -1248,12 +1249,14 @@ public class AddressSet implements AddressSetView {
if (next == null) {
throw new NoSuchElementException();
}
return new AddressRangeImpl(next.getKey(), next.getValue());
lastReturnedRange = new AddressRangeImpl(next.getKey(), next.getValue());
return lastReturnedRange;
}
@Override
public void remove() {
iterator.remove();
addressCount -= lastReturnedRange.getLength();
}
@Override

View file

@ -762,6 +762,28 @@ public class AddressSetTest extends AbstractGenericTest {
assertTrue(!it.hasNext());
}
@Test
public void testForwardRangeIteratorRemove() {
AddressSet set = set(0x100, 0x110, 0x200, 0x210, 0x300, 0x305);
assertEquals(40, set.getNumAddresses());
assertEquals(3, set.getNumAddressRanges());
Iterator<AddressRange> it = set.iterator(true);
Assert.assertEquals(range(0x100, 0x110), it.next());
Assert.assertEquals(range(0x200, 0x210), it.next());
it.remove();
Assert.assertEquals(range(0x300, 0x305), it.next());
assertTrue(!it.hasNext());
it = set.iterator(true);
Assert.assertEquals(range(0x100, 0x110), it.next());
Assert.assertEquals(range(0x300, 0x305), it.next());
assertTrue(!it.hasNext());
assertEquals(23, set.getNumAddresses());
assertEquals(2, set.getNumAddressRanges());
}
@Test
public void testBackwardRangeIterator() {
AddressSet set = set(0x100, 0x110, 0x200, 0x210, 0x300, 0x305);
@ -772,6 +794,28 @@ public class AddressSetTest extends AbstractGenericTest {
assertTrue(!it.hasNext());
}
@Test
public void testBackwardRangeIteratorRemove() {
AddressSet set = set(0x100, 0x110, 0x200, 0x210, 0x300, 0x305);
assertEquals(40, set.getNumAddresses());
assertEquals(3, set.getNumAddressRanges());
Iterator<AddressRange> it = set.iterator(false);
Assert.assertEquals(range(0x300, 0x305), it.next());
Assert.assertEquals(range(0x200, 0x210), it.next());
it.remove();
Assert.assertEquals(range(0x100, 0x110), it.next());
assertTrue(!it.hasNext());
it = set.iterator(false);
Assert.assertEquals(range(0x300, 0x305), it.next());
Assert.assertEquals(range(0x100, 0x110), it.next());
assertTrue(!it.hasNext());
assertEquals(23, set.getNumAddresses());
assertEquals(2, set.getNumAddressRanges());
}
@Test
public void testGetRangeContaining() {
AddressSet set = set(0x100, 0x110, 0x200, 0x210, 0x300, 0x305);