Skip to content

Commit 47eb8ad

Browse files
committed
StripedNonBlockingHashMapLong.forEachKey
1 parent 9890995 commit 47eb8ad

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/main/java/com/trivago/fastutilconcurrentwrapper/longkey/StripedNonBlockingHashMapLong.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@
88
import it.unimi.dsi.fastutil.longs.LongSet;
99
import it.unimi.dsi.fastutil.objects.ObjectCollection;
1010
import it.unimi.dsi.fastutil.objects.ObjectSet;
11+
import org.jctools.maps.NonBlockingHashMapLong;
1112
import org.jspecify.annotations.Nullable;
1213

1314
import java.util.Map;
15+
import java.util.concurrent.CancellationException;
1416
import java.util.concurrent.ConcurrentMap;
1517
import java.util.concurrent.locks.Lock;
1618
import java.util.function.BiConsumer;
1719
import java.util.function.BiFunction;
1820
import java.util.function.Function;
21+
import java.util.function.LongConsumer;
1922

2023
/**
2124
Similar to {@link ConcurrentLongObjectMap}, but backed with NonBlockingHashMapLong ⇒ non-blocking reads 🚀
@@ -200,6 +203,14 @@ public long nextLong () {
200203

201204
public StripedLongIterator keys (){ return new StripedLongIterator(this); }
202205

206+
public void forEachKey (LongConsumer action) {
207+
var it = (NonBlockingHashMapLong<E>.IteratorLong) m.keys();
208+
try {
209+
while (it.hasNext())
210+
action.accept(it.nextLong());
211+
} catch (CancellationException ignored){}
212+
}
213+
203214
@Override
204215
public LongSet keySet () {
205216
throw new UnsupportedOperationException("keySet");
@@ -276,6 +287,7 @@ public void defaultReturnValue (E rv) {
276287
public ObjectSet<Long2ObjectMap.Entry<E>> long2ObjectEntrySet () {
277288
throw new UnsupportedOperationException();
278289
}
290+
279291
public <R> R withLock (long key, Function<Long2ObjectMap.Entry<E>,R> withLock) {
280292
try (var __ = write(key)){
281293
Long2ObjectMap.Entry<E> x = new Long2ObjectMap.Entry<E>() {

0 commit comments

Comments
 (0)