Skip to content

Commit 68fd66c

Browse files
authored
Merge pull request #125 from rovarga/backport
Backport
2 parents 2284c30 + 1063b6b commit 68fd66c

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

triemap/src/main/java/tech/pantheon/triemap/AbstractKeySet.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,24 @@ public final Spliterator<K> spliterator() {
7878
abstract int spliteratorCharacteristics();
7979

8080
final Iterator<K> immutableIterator() {
81-
return new Iterator<>() {
82-
private final ImmutableIterator<K, ?> itr = map().immutableIterator();
83-
84-
@Override
85-
public boolean hasNext() {
86-
return itr.hasNext();
87-
}
88-
89-
@Override
90-
public K next() {
91-
return itr.next().getKey();
92-
}
93-
};
81+
return new Itr<>(map().immutableIterator());
82+
}
83+
84+
private static final class Itr<K> implements Iterator<K> {
85+
private final ImmutableIterator<K, ?> delegate;
86+
87+
Itr(final ImmutableIterator<K, ?> delegate) {
88+
this.delegate = delegate;
89+
}
90+
91+
@Override
92+
public boolean hasNext() {
93+
return delegate.hasNext();
94+
}
95+
96+
@Override
97+
public K next() {
98+
return delegate.next().getKey();
99+
}
94100
}
95101
}

triemap/src/main/java/tech/pantheon/triemap/INode.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -521,11 +521,9 @@ private void cleanParent(final Object nonlive, final INode<K, V> parent, final T
521521
if (sub == this && nonlive instanceof TNode) {
522522
final var tn = (TNode<?, ?>) nonlive;
523523
final var ncn = cn.updatedAt(pos, tn.copyUntombed(), gen).toContracted(lev - LEVEL_BITS);
524-
if (!parent.gcas(cn, ncn, ct)) {
525-
if (ct.readRoot().gen == startgen) {
526-
// Tail recursion: cleanParent(nonlive, parent, ct, hc, lev, startgen);
527-
continue;
528-
}
524+
if (!parent.gcas(cn, ncn, ct) && ct.readRoot().gen == startgen) {
525+
// Tail recursion: cleanParent(nonlive, parent, ct, hc, lev, startgen);
526+
continue;
529527
}
530528
}
531529
break;

triemap/src/main/java/tech/pantheon/triemap/MutableKeySet.java

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,7 @@ final class MutableKeySet<K> extends AbstractKeySet<K> {
3232

3333
@Override
3434
public Iterator<K> iterator() {
35-
return new Iterator<>() {
36-
private final AbstractIterator<K, ?> itr = map().iterator();
37-
38-
@Override
39-
public boolean hasNext() {
40-
return itr.hasNext();
41-
}
42-
43-
@Override
44-
public K next() {
45-
return itr.next().getKey();
46-
}
47-
48-
@Override
49-
public void remove() {
50-
itr.remove();
51-
}
52-
};
35+
return new Itr<>(map().iterator());
5336
}
5437

5538
@Override
@@ -67,4 +50,27 @@ public boolean remove(final Object o) {
6750
int spliteratorCharacteristics() {
6851
return Spliterator.DISTINCT | Spliterator.CONCURRENT | Spliterator.NONNULL;
6952
}
53+
54+
private static final class Itr<K> implements Iterator<K> {
55+
private final AbstractIterator<K, ?> delegate;
56+
57+
Itr(final AbstractIterator<K, ?> delegate) {
58+
this.delegate = delegate;
59+
}
60+
61+
@Override
62+
public boolean hasNext() {
63+
return delegate.hasNext();
64+
}
65+
66+
@Override
67+
public K next() {
68+
return delegate.next().getKey();
69+
}
70+
71+
@Override
72+
public void remove() {
73+
delegate.remove();
74+
}
75+
}
7076
}

0 commit comments

Comments
 (0)