From 16d74961488e7e2cbabfe925f70a0f15a2bdce1e Mon Sep 17 00:00:00 2001 From: mrniko <1104661+mrniko@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:14:25 +0300 Subject: [PATCH] missed methods implemented --- .../org/redisson/misc/FastRemovalQueue.java | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/misc/FastRemovalQueue.java b/redisson/src/main/java/org/redisson/misc/FastRemovalQueue.java index f04630278..41e4b0ddf 100644 --- a/redisson/src/main/java/org/redisson/misc/FastRemovalQueue.java +++ b/redisson/src/main/java/org/redisson/misc/FastRemovalQueue.java @@ -15,7 +15,9 @@ */ package org.redisson.misc; +import java.util.Iterator; import java.util.Map; +import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentHashMap; /** @@ -25,7 +27,7 @@ import java.util.concurrent.ConcurrentHashMap; * * @param element type */ -public final class FastRemovalQueue { +public final class FastRemovalQueue implements Iterable { private final Map> index = new ConcurrentHashMap<>(); private final DoublyLinkedList list = new DoublyLinkedList<>(); @@ -54,6 +56,10 @@ public final class FastRemovalQueue { return false; } + public boolean isEmpty() { + return index.isEmpty(); + } + public int size() { return index.size(); } @@ -72,11 +78,16 @@ public final class FastRemovalQueue { list.clear(); } + @Override + public Iterator iterator() { + return list.iterator(); + } + static class Node { private final E value; private Node prev; - private Node next; - private boolean deleted; + private volatile Node next; + private volatile boolean deleted; Node(E value) { this.value = value; @@ -89,9 +100,13 @@ public final class FastRemovalQueue { public boolean isDeleted() { return deleted; } + + public E getValue() { + return value; + } } - static class DoublyLinkedList { + static class DoublyLinkedList implements Iterable { private final WrappedLock lock = new WrappedLock(); private Node head; private Node tail; @@ -184,5 +199,29 @@ public final class FastRemovalQueue { }); } + @Override + public Iterator iterator() { + return new Iterator() { + private Node current = head; + + @Override + public boolean hasNext() { + while (current != null && current.isDeleted()) { + current = current.next; + } + return current != null; + } + + @Override + public E next() { + if (current == null) { + throw new NoSuchElementException(); + } + E value = current.getValue(); + current = current.next; + return value; + } + }; + } } } \ No newline at end of file