From 173423c1ddb3a072566597386121f3684cb2c9b7 Mon Sep 17 00:00:00 2001 From: Francesco Nigro Date: Mon, 12 Feb 2024 18:50:41 +0100 Subject: [PATCH] Addressing Nitsan's comment --- .../JavaParsingAtomicQueueGenerator.java | 2 +- ...singAtomicUnpaddedArrayQueueGenerator.java | 10 ++ ...ingAtomicUnpaddedLinkedQueueGenerator.java | 8 + .../queues/atomic/AtomicQueueUtil.java | 41 ++--- .../atomic/AtomicReferenceArrayQueue.java | 4 +- .../queues/atomic/LinkedQueueAtomicNode.java | 7 +- .../SequencedAtomicReferenceArrayQueue.java | 5 +- .../atomic/unpadded/AtomicQueueUtil.java | 101 ----------- .../unpadded/AtomicReferenceArrayQueue.java | 158 ------------------ .../BaseLinkedAtomicUnpaddedQueue.java | 3 +- ...aseMpscLinkedAtomicUnpaddedArrayQueue.java | 3 +- ...aseSpscLinkedAtomicUnpaddedArrayQueue.java | 3 +- .../unpadded/LinkedQueueAtomicNode.java | 69 -------- .../MpmcAtomicUnpaddedArrayQueue.java | 4 +- .../MpscAtomicUnpaddedArrayQueue.java | 4 +- .../MpscChunkedAtomicUnpaddedArrayQueue.java | 3 +- .../MpscGrowableAtomicUnpaddedArrayQueue.java | 3 +- .../MpscLinkedAtomicUnpaddedQueue.java | 3 +- ...MpscUnboundedAtomicUnpaddedArrayQueue.java | 3 +- .../SequencedAtomicReferenceArrayQueue.java | 55 ------ .../SpmcAtomicUnpaddedArrayQueue.java | 4 +- .../SpscAtomicUnpaddedArrayQueue.java | 4 +- .../SpscChunkedAtomicUnpaddedArrayQueue.java | 3 +- .../SpscGrowableAtomicUnpaddedArrayQueue.java | 3 +- .../SpscLinkedAtomicUnpaddedQueue.java | 3 +- ...SpscUnboundedAtomicUnpaddedArrayQueue.java | 3 +- 26 files changed, 87 insertions(+), 422 deletions(-) delete mode 100644 jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicQueueUtil.java delete mode 100644 jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicReferenceArrayQueue.java delete mode 100644 jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/LinkedQueueAtomicNode.java delete mode 100644 jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SequencedAtomicReferenceArrayQueue.java diff --git a/jctools-build/src/main/java/org/jctools/queues/atomic/JavaParsingAtomicQueueGenerator.java b/jctools-build/src/main/java/org/jctools/queues/atomic/JavaParsingAtomicQueueGenerator.java index ac1576e49..ced3961ee 100644 --- a/jctools-build/src/main/java/org/jctools/queues/atomic/JavaParsingAtomicQueueGenerator.java +++ b/jctools-build/src/main/java/org/jctools/queues/atomic/JavaParsingAtomicQueueGenerator.java @@ -245,7 +245,7 @@ public void organiseImports(CompilationUnit cu) { cu.addImport(new ImportDeclaration("java.util.concurrent.atomic", false, true)); cu.addImport(new ImportDeclaration("org.jctools.queues", false, true)); - cu.addImport(staticImportDeclaration(outputPackage() + ".AtomicQueueUtil")); + cu.addImport(staticImportDeclaration("org.jctools.queues.atomic.AtomicQueueUtil")); } protected String capitalise(String s) { diff --git a/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedArrayQueueGenerator.java b/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedArrayQueueGenerator.java index 0d5f77505..64a3b07ae 100644 --- a/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedArrayQueueGenerator.java +++ b/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedArrayQueueGenerator.java @@ -1,6 +1,7 @@ package org.jctools.queues.atomic.unpadded; import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.ImportDeclaration; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import org.jctools.queues.atomic.JavaParsingAtomicArrayQueueGenerator; @@ -23,6 +24,15 @@ public void cleanupComments(CompilationUnit cu) { cleanupPaddingComments(cu); } + @Override + public void organiseImports(CompilationUnit cu) { + super.organiseImports(cu); + cu.addImport(new ImportDeclaration("org.jctools.queues.atomic.AtomicReferenceArrayQueue", + false, false)); + cu.addImport(new ImportDeclaration("org.jctools.queues.atomic.SequencedAtomicReferenceArrayQueue", + false, false)); + } + @Override public void visit(ClassOrInterfaceDeclaration node, Void arg) { super.visit(node, arg); diff --git a/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedLinkedQueueGenerator.java b/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedLinkedQueueGenerator.java index c9a03939e..3e8b8344e 100644 --- a/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedLinkedQueueGenerator.java +++ b/jctools-build/src/main/java/org/jctools/queues/atomic/unpadded/JavaParsingAtomicUnpaddedLinkedQueueGenerator.java @@ -1,6 +1,7 @@ package org.jctools.queues.atomic.unpadded; import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.ImportDeclaration; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import org.jctools.queues.atomic.JavaParsingAtomicLinkedQueueGenerator; @@ -23,6 +24,13 @@ public void cleanupComments(CompilationUnit cu) { cleanupPaddingComments(cu); } + @Override + public void organiseImports(CompilationUnit cu) { + super.organiseImports(cu); + cu.addImport(new ImportDeclaration("org.jctools.queues.atomic.LinkedQueueAtomicNode", + false, false)); + } + @Override public void visit(ClassOrInterfaceDeclaration node, Void arg) { super.visit(node, arg); diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicQueueUtil.java b/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicQueueUtil.java index 63d559ffe..969b06b70 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicQueueUtil.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicQueueUtil.java @@ -1,86 +1,89 @@ package org.jctools.queues.atomic; +import org.jctools.util.InternalAPI; + import java.util.concurrent.atomic.AtomicLongArray; import java.util.concurrent.atomic.AtomicReferenceArray; -final class AtomicQueueUtil +@InternalAPI +public final class AtomicQueueUtil { - static E lvRefElement(AtomicReferenceArray buffer, int offset) + public static E lvRefElement(AtomicReferenceArray buffer, int offset) { return buffer.get(offset); } - static E lpRefElement(AtomicReferenceArray buffer, int offset) + public static E lpRefElement(AtomicReferenceArray buffer, int offset) { return buffer.get(offset); // no weaker form available } - static void spRefElement(AtomicReferenceArray buffer, int offset, E value) + public static void spRefElement(AtomicReferenceArray buffer, int offset, E value) { buffer.lazySet(offset, value); // no weaker form available } - static void soRefElement(AtomicReferenceArray buffer, int offset, Object value) + public static void soRefElement(AtomicReferenceArray buffer, int offset, Object value) { buffer.lazySet(offset, value); } - static void svRefElement(AtomicReferenceArray buffer, int offset, E value) + public static void svRefElement(AtomicReferenceArray buffer, int offset, E value) { buffer.set(offset, value); } - static int calcRefElementOffset(long index) + public static int calcRefElementOffset(long index) { return (int) index; } - static int calcCircularRefElementOffset(long index, long mask) + public static int calcCircularRefElementOffset(long index, long mask) { return (int) (index & mask); } - static AtomicReferenceArray allocateRefArray(int capacity) + public static AtomicReferenceArray allocateRefArray(int capacity) { return new AtomicReferenceArray(capacity); } - static void spLongElement(AtomicLongArray buffer, int offset, long e) + public static void spLongElement(AtomicLongArray buffer, int offset, long e) { buffer.lazySet(offset, e); } - static void soLongElement(AtomicLongArray buffer, int offset, long e) + public static void soLongElement(AtomicLongArray buffer, int offset, long e) { buffer.lazySet(offset, e); } - static long lpLongElement(AtomicLongArray buffer, int offset) + public static long lpLongElement(AtomicLongArray buffer, int offset) { return buffer.get(offset); } - static long lvLongElement(AtomicLongArray buffer, int offset) + public static long lvLongElement(AtomicLongArray buffer, int offset) { return buffer.get(offset); } - static int calcLongElementOffset(long index) + public static int calcLongElementOffset(long index) { return (int) index; } - static int calcCircularLongElementOffset(long index, int mask) + public static int calcCircularLongElementOffset(long index, int mask) { return (int) (index & mask); } - static AtomicLongArray allocateLongArray(int capacity) + public static AtomicLongArray allocateLongArray(int capacity) { return new AtomicLongArray(capacity); } - static int length(AtomicReferenceArray buf) + public static int length(AtomicReferenceArray buf) { return buf.length(); } @@ -88,12 +91,12 @@ static int length(AtomicReferenceArray buf) /** * This method assumes index is actually (index << 1) because lower bit is used for resize hence the >> 1 */ - static int modifiedCalcCircularRefElementOffset(long index, long mask) + public static int modifiedCalcCircularRefElementOffset(long index, long mask) { return (int) (index & mask) >> 1; } - static int nextArrayOffset(AtomicReferenceArray curr) + public static int nextArrayOffset(AtomicReferenceArray curr) { return length(curr) - 1; } diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicReferenceArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicReferenceArrayQueue.java index 5753eda1a..05bf6fd52 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicReferenceArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/AtomicReferenceArrayQueue.java @@ -18,6 +18,7 @@ import org.jctools.queues.MessagePassingQueue; import org.jctools.queues.QueueProgressIndicators; import org.jctools.queues.SupportsIterator; +import org.jctools.util.InternalAPI; import org.jctools.util.Pow2; import java.util.AbstractQueue; @@ -27,7 +28,8 @@ import static org.jctools.queues.atomic.AtomicQueueUtil.*; -abstract class AtomicReferenceArrayQueue extends AbstractQueue implements IndexedQueue, QueueProgressIndicators, MessagePassingQueue, SupportsIterator +@InternalAPI +public abstract class AtomicReferenceArrayQueue extends AbstractQueue implements IndexedQueue, QueueProgressIndicators, MessagePassingQueue, SupportsIterator { protected final AtomicReferenceArray buffer; protected final int mask; diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/LinkedQueueAtomicNode.java b/jctools-core/src/main/java/org/jctools/queues/atomic/LinkedQueueAtomicNode.java index 333868333..e84378eb2 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/LinkedQueueAtomicNode.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/LinkedQueueAtomicNode.java @@ -13,19 +13,22 @@ */ package org.jctools.queues.atomic; +import org.jctools.util.InternalAPI; + import java.util.concurrent.atomic.AtomicReference; +@InternalAPI public final class LinkedQueueAtomicNode extends AtomicReference> { /** */ private static final long serialVersionUID = 2404266111789071508L; private E value; - LinkedQueueAtomicNode() + public LinkedQueueAtomicNode() { } - LinkedQueueAtomicNode(E val) + public LinkedQueueAtomicNode(E val) { spValue(val); } diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/SequencedAtomicReferenceArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/SequencedAtomicReferenceArrayQueue.java index c54eed259..eb0ccfed9 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/SequencedAtomicReferenceArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/SequencedAtomicReferenceArrayQueue.java @@ -13,9 +13,12 @@ */ package org.jctools.queues.atomic; +import org.jctools.util.InternalAPI; + import java.util.concurrent.atomic.AtomicLongArray; -abstract class SequencedAtomicReferenceArrayQueue extends +@InternalAPI +public abstract class SequencedAtomicReferenceArrayQueue extends AtomicReferenceArrayQueue { protected final AtomicLongArray sequenceBuffer; diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicQueueUtil.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicQueueUtil.java deleted file mode 100644 index a12980d23..000000000 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicQueueUtil.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.jctools.queues.atomic.unpadded; - -import java.util.concurrent.atomic.AtomicLongArray; -import java.util.concurrent.atomic.AtomicReferenceArray; - -final class AtomicQueueUtil -{ - static E lvRefElement(AtomicReferenceArray buffer, int offset) - { - return buffer.get(offset); - } - - static E lpRefElement(AtomicReferenceArray buffer, int offset) - { - return buffer.get(offset); // no weaker form available - } - - static void spRefElement(AtomicReferenceArray buffer, int offset, E value) - { - buffer.lazySet(offset, value); // no weaker form available - } - - static void soRefElement(AtomicReferenceArray buffer, int offset, Object value) - { - buffer.lazySet(offset, value); - } - - static void svRefElement(AtomicReferenceArray buffer, int offset, E value) - { - buffer.set(offset, value); - } - - static int calcRefElementOffset(long index) - { - return (int) index; - } - - static int calcCircularRefElementOffset(long index, long mask) - { - return (int) (index & mask); - } - - static AtomicReferenceArray allocateRefArray(int capacity) - { - return new AtomicReferenceArray(capacity); - } - - static void spLongElement(AtomicLongArray buffer, int offset, long e) - { - buffer.lazySet(offset, e); - } - - static void soLongElement(AtomicLongArray buffer, int offset, long e) - { - buffer.lazySet(offset, e); - } - - static long lpLongElement(AtomicLongArray buffer, int offset) - { - return buffer.get(offset); - } - - static long lvLongElement(AtomicLongArray buffer, int offset) - { - return buffer.get(offset); - } - - static int calcLongElementOffset(long index) - { - return (int) index; - } - - static int calcCircularLongElementOffset(long index, int mask) - { - return (int) (index & mask); - } - - static AtomicLongArray allocateLongArray(int capacity) - { - return new AtomicLongArray(capacity); - } - - static int length(AtomicReferenceArray buf) - { - return buf.length(); - } - - /** - * This method assumes index is actually (index << 1) because lower bit is used for resize hence the >> 1 - */ - static int modifiedCalcCircularRefElementOffset(long index, long mask) - { - return (int) (index & mask) >> 1; - } - - static int nextArrayOffset(AtomicReferenceArray curr) - { - return length(curr) - 1; - } - -} diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicReferenceArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicReferenceArrayQueue.java deleted file mode 100644 index 155c1f48a..000000000 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/AtomicReferenceArrayQueue.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jctools.queues.atomic.unpadded; - -import org.jctools.queues.IndexedQueueSizeUtil; -import org.jctools.queues.IndexedQueueSizeUtil.IndexedQueue; -import org.jctools.queues.MessagePassingQueue; -import org.jctools.queues.QueueProgressIndicators; -import org.jctools.queues.SupportsIterator; -import org.jctools.util.Pow2; - -import java.util.AbstractQueue; -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.concurrent.atomic.AtomicReferenceArray; - -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.calcCircularRefElementOffset; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.lvRefElement; - -abstract class AtomicReferenceArrayQueue extends AbstractQueue implements IndexedQueue, QueueProgressIndicators, MessagePassingQueue, SupportsIterator -{ - protected final AtomicReferenceArray buffer; - protected final int mask; - - public AtomicReferenceArrayQueue(int capacity) - { - int actualCapacity = Pow2.roundToPowerOfTwo(capacity); - this.mask = actualCapacity - 1; - this.buffer = new AtomicReferenceArray(actualCapacity); - } - - @Override - public String toString() - { - return this.getClass().getName(); - } - - @Override - public void clear() - { - while (poll() != null) - { - // toss it away - } - } - - @Override - public final int capacity() - { - return (int) (mask + 1); - } - - /** - * {@inheritDoc} - *

- */ - @Override - public final int size() - { - return IndexedQueueSizeUtil.size(this, IndexedQueueSizeUtil.PLAIN_DIVISOR); - } - - @Override - public final boolean isEmpty() - { - return IndexedQueueSizeUtil.isEmpty(this); - } - - @Override - public final long currentProducerIndex() - { - return lvProducerIndex(); - } - - @Override - public final long currentConsumerIndex() - { - return lvConsumerIndex(); - } - - /** - * Get an iterator for this queue. This method is thread safe. - *

- * The iterator provides a best-effort snapshot of the elements in the queue. - * The returned iterator is not guaranteed to return elements in queue order, - * and races with the consumer thread may cause gaps in the sequence of returned elements. - * Like {link #relaxedPoll}, the iterator may not immediately return newly inserted elements. - * - * @return The iterator. - */ - @Override - public final Iterator iterator() { - final long cIndex = lvConsumerIndex(); - final long pIndex = lvProducerIndex(); - - return new WeakIterator(cIndex, pIndex, mask, buffer); - } - - private static class WeakIterator implements Iterator { - - private final long pIndex; - private final int mask; - private final AtomicReferenceArray buffer; - private long nextIndex; - private E nextElement; - - WeakIterator(long cIndex, long pIndex, int mask, AtomicReferenceArray buffer) { - this.nextIndex = cIndex; - this.pIndex = pIndex; - this.mask = mask; - this.buffer = buffer; - nextElement = getNext(); - } - - @Override - public void remove() { - throw new UnsupportedOperationException("remove"); - } - - @Override - public boolean hasNext() { - return nextElement != null; - } - - @Override - public E next() { - final E e = nextElement; - if (e == null) - throw new NoSuchElementException(); - nextElement = getNext(); - return e; - } - - private E getNext() { - final int mask = this.mask; - final AtomicReferenceArray buffer = this.buffer; - while (nextIndex < pIndex) { - int offset = calcCircularRefElementOffset(nextIndex++, mask); - E e = lvRefElement(buffer, offset); - if (e != null) { - return e; - } - } - return null; - } - } -} diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseLinkedAtomicUnpaddedQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseLinkedAtomicUnpaddedQueue.java index 55d0962ac..8dc4abe79 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseLinkedAtomicUnpaddedQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseLinkedAtomicUnpaddedQueue.java @@ -18,7 +18,8 @@ import java.util.Queue; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseMpscLinkedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseMpscLinkedAtomicUnpaddedArrayQueue.java index f78019ad7..d28b11aee 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseMpscLinkedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseMpscLinkedAtomicUnpaddedArrayQueue.java @@ -22,7 +22,8 @@ import java.util.NoSuchElementException; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseSpscLinkedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseSpscLinkedAtomicUnpaddedArrayQueue.java index fd49e5f7f..7f30e4b6e 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseSpscLinkedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/BaseSpscLinkedAtomicUnpaddedArrayQueue.java @@ -19,7 +19,8 @@ import java.util.Iterator; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/LinkedQueueAtomicNode.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/LinkedQueueAtomicNode.java deleted file mode 100644 index fa923e6a7..000000000 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/LinkedQueueAtomicNode.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jctools.queues.atomic.unpadded; - -import java.util.concurrent.atomic.AtomicReference; - -public final class LinkedQueueAtomicNode extends AtomicReference> -{ - /** */ - private static final long serialVersionUID = 2404266111789071508L; - private E value; - - LinkedQueueAtomicNode() - { - } - - LinkedQueueAtomicNode(E val) - { - spValue(val); - } - - /** - * Gets the current value and nulls out the reference to it from this node. - * - * @return value - */ - public E getAndNullValue() - { - E temp = lpValue(); - spValue(null); - return temp; - } - - public E lpValue() - { - return value; - } - - public void spValue(E newValue) - { - value = newValue; - } - - public void soNext(LinkedQueueAtomicNode n) - { - lazySet(n); - } - - public void spNext(LinkedQueueAtomicNode n) - { - lazySet(n); - } - - public LinkedQueueAtomicNode lvNext() - { - return get(); - } -} diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpmcAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpmcAtomicUnpaddedArrayQueue.java index 4f3b8a378..c62f58957 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpmcAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpmcAtomicUnpaddedArrayQueue.java @@ -16,7 +16,9 @@ import org.jctools.util.RangeUtil; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.AtomicReferenceArrayQueue; +import org.jctools.queues.atomic.SequencedAtomicReferenceArrayQueue; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedArrayQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscAtomicUnpaddedArrayQueue.java index 89bb6edd0..999470075 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscAtomicUnpaddedArrayQueue.java @@ -15,7 +15,9 @@ import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.AtomicReferenceArrayQueue; +import org.jctools.queues.atomic.SequencedAtomicReferenceArrayQueue; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedArrayQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscChunkedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscChunkedAtomicUnpaddedArrayQueue.java index a0adb4c16..c22d657ed 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscChunkedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscChunkedAtomicUnpaddedArrayQueue.java @@ -20,7 +20,8 @@ import static org.jctools.util.Pow2.roundToPowerOfTwo; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscGrowableAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscGrowableAtomicUnpaddedArrayQueue.java index 6da2ae7f4..e7093874c 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscGrowableAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscGrowableAtomicUnpaddedArrayQueue.java @@ -17,7 +17,8 @@ import org.jctools.util.RangeUtil; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscLinkedAtomicUnpaddedQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscLinkedAtomicUnpaddedQueue.java index b97418459..4f86d17e1 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscLinkedAtomicUnpaddedQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscLinkedAtomicUnpaddedQueue.java @@ -16,7 +16,8 @@ import java.util.Queue; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscUnboundedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscUnboundedAtomicUnpaddedArrayQueue.java index 7b6e657f2..94a39d079 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscUnboundedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/MpscUnboundedAtomicUnpaddedArrayQueue.java @@ -15,7 +15,8 @@ import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SequencedAtomicReferenceArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SequencedAtomicReferenceArrayQueue.java deleted file mode 100644 index c9a2a5140..000000000 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SequencedAtomicReferenceArrayQueue.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jctools.queues.atomic.unpadded; - -import java.util.concurrent.atomic.AtomicLongArray; - -abstract class SequencedAtomicReferenceArrayQueue extends - AtomicReferenceArrayQueue -{ - protected final AtomicLongArray sequenceBuffer; - - public SequencedAtomicReferenceArrayQueue(int capacity) - { - super(capacity); - int actualCapacity = this.mask + 1; - // pad data on either end with some empty slots. - sequenceBuffer = new AtomicLongArray(actualCapacity); - for (int i = 0; i < actualCapacity; i++) - { - soSequence(sequenceBuffer, i, i); - } - } - - protected final long calcSequenceOffset(long index) - { - return calcSequenceOffset(index, mask); - } - - protected static int calcSequenceOffset(long index, int mask) - { - return (int) index & mask; - } - - protected final void soSequence(AtomicLongArray buffer, int offset, long e) - { - buffer.lazySet(offset, e); - } - - protected final long lvSequence(AtomicLongArray buffer, int offset) - { - return buffer.get(offset); - } - -} diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpmcAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpmcAtomicUnpaddedArrayQueue.java index 1592a2e2c..5d690f7b5 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpmcAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpmcAtomicUnpaddedArrayQueue.java @@ -15,7 +15,9 @@ import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.AtomicReferenceArrayQueue; +import org.jctools.queues.atomic.SequencedAtomicReferenceArrayQueue; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedArrayQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscAtomicUnpaddedArrayQueue.java index 0257de6cf..dfc49189d 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscAtomicUnpaddedArrayQueue.java @@ -16,7 +16,9 @@ import org.jctools.util.SpscLookAheadUtil; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.AtomicReferenceArrayQueue; +import org.jctools.queues.atomic.SequencedAtomicReferenceArrayQueue; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedArrayQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscChunkedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscChunkedAtomicUnpaddedArrayQueue.java index 99016af00..6467bc969 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscChunkedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscChunkedAtomicUnpaddedArrayQueue.java @@ -17,7 +17,8 @@ import org.jctools.util.RangeUtil; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscGrowableAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscGrowableAtomicUnpaddedArrayQueue.java index 60329de62..b08a0d456 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscGrowableAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscGrowableAtomicUnpaddedArrayQueue.java @@ -18,7 +18,8 @@ import org.jctools.util.SpscLookAheadUtil; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscLinkedAtomicUnpaddedQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscLinkedAtomicUnpaddedQueue.java index 4e5fd9c4b..db1c586ae 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscLinkedAtomicUnpaddedQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscLinkedAtomicUnpaddedQueue.java @@ -15,7 +15,8 @@ import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator diff --git a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscUnboundedAtomicUnpaddedArrayQueue.java b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscUnboundedAtomicUnpaddedArrayQueue.java index aaa0bb6da..a47fb1240 100644 --- a/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscUnboundedAtomicUnpaddedArrayQueue.java +++ b/jctools-core/src/main/java/org/jctools/queues/atomic/unpadded/SpscUnboundedAtomicUnpaddedArrayQueue.java @@ -16,7 +16,8 @@ import org.jctools.util.Pow2; import java.util.concurrent.atomic.*; import org.jctools.queues.*; -import static org.jctools.queues.atomic.unpadded.AtomicQueueUtil.*; +import static org.jctools.queues.atomic.AtomicQueueUtil.*; +import org.jctools.queues.atomic.LinkedQueueAtomicNode; /** * NOTE: This class was automatically generated by org.jctools.queues.atomic.unpadded.JavaParsingAtomicUnpaddedLinkedQueueGenerator