diff --git a/src/main/java/teetime/framework/pipe/SpScIntraThreadPipe.java b/src/main/java/teetime/framework/pipe/SpScIntraThreadPipe.java new file mode 100644 index 0000000000000000000000000000000000000000..459ea0f17f276ae33b273b91300b6907c58b7386 --- /dev/null +++ b/src/main/java/teetime/framework/pipe/SpScIntraThreadPipe.java @@ -0,0 +1,48 @@ +package teetime.framework.pipe; + +import java.util.Queue; + +import org.jctools.queues.QueueFactory; +import org.jctools.queues.spec.ConcurrentQueueSpec; + +import teetime.framework.AbstractIntraThreadPipe; +import teetime.framework.InputPort; +import teetime.framework.OutputPort; + +/** + * Represents a less efficient implementation of an intra-thread pipe. + * + * @author Christian Wulf + * + * @param <T> + */ +public final class SpScIntraThreadPipe<T> extends AbstractIntraThreadPipe { + + private final Queue<Object> queue; + + public SpScIntraThreadPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) { + super(sourcePort, targetPort); + queue = QueueFactory.newQueue(ConcurrentQueueSpec.createBoundedSpsc(1)); + } + + @Override + public boolean add(final Object element) { + return queue.offer(element); + } + + @Override + public boolean isEmpty() { + return queue.isEmpty(); + } + + @Override + public int size() { + return queue.size(); + } + + @Override + public Object removeLast() { + return queue.poll(); + } + +} diff --git a/src/site/markdown/wiki b/src/site/markdown/wiki index 63ccbbc87bd2c0e6599ca91502149dba3cfb99de..0e4474577e1f49bc96e734c286b2d9e0363895e8 160000 --- a/src/site/markdown/wiki +++ b/src/site/markdown/wiki @@ -1 +1 @@ -Subproject commit 63ccbbc87bd2c0e6599ca91502149dba3cfb99de +Subproject commit 0e4474577e1f49bc96e734c286b2d9e0363895e8