Replace Queue with DList

This commit is contained in:
Eugen Wissner 2018-03-09 08:19:17 +01:00
parent 82f41844b1
commit 17cb592b13
7 changed files with 24 additions and 25 deletions

View File

@ -162,7 +162,7 @@ final class EpollLoop : SelectorLoop
}
else if (transport.output.length)
{
pendings.enqueue(transport);
pendings.insertBack(transport);
}
}
if (events[i].events & EPOLLOUT)

View File

@ -273,7 +273,7 @@ final class IOCPLoop : Loop
transport.socket.shutdown();
defaultAllocator.dispose(transport.socket);
transport.exception = exception;
pendings.enqueue(transport);
pendings.insertBack(transport);
}
/**
@ -316,11 +316,11 @@ final class IOCPLoop : Loop
auto socket = listener.endAccept(overlapped);
auto transport = defaultAllocator.make!StreamTransport(socket);
connection.incoming.enqueue(transport);
connection.incoming.insertBack(transport);
reify(transport, EventMask(Event.none), EventMask(Event.read, Event.write));
pendings.enqueue(connection);
pendings.insertBack(connection);
listener.beginAccept(overlapped);
break;
case OverlappedSocketEvent.read:
@ -360,7 +360,7 @@ final class IOCPLoop : Loop
{
transport.socket.beginReceive(transport.output[], overlapped);
}
pendings.enqueue(transport);
pendings.insertBack(transport);
}
break;
case OverlappedSocketEvent.write:

View File

@ -279,7 +279,7 @@ final class KqueueLoop : SelectorLoop
}
else if (transport.output.length)
{
pendings.enqueue(transport);
pendings.insertBack(transport);
}
}
else if (events[i].filter == EVFILT_WRITE)

View File

@ -218,12 +218,12 @@ abstract class SelectorLoop : Loop
this() @nogc
{
super();
connections = Array!SocketWatcher(maxEvents);
this.connections = Array!SocketWatcher(maxEvents);
}
~this() @nogc
{
foreach (ref connection; connections)
foreach (ref connection; this.connections[])
{
// We want to free only the transports. ConnectionWatcher are
// created by the user and should be freed by himself.
@ -266,7 +266,7 @@ abstract class SelectorLoop : Loop
transport.socket.shutdown();
defaultAllocator.dispose(transport.socket);
transport.exception = exception;
pendings.enqueue(transport);
pendings.insertBack(transport);
}
/**
@ -394,12 +394,12 @@ abstract class SelectorLoop : Loop
}
reify(transport, EventMask(Event.none), EventMask(Event.read, Event.write));
connection.incoming.enqueue(transport);
connection.incoming.insertBack(transport);
}
if (!connection.incoming.empty)
{
pendings.enqueue(connection);
pendings.insertBack(connection);
}
}
}

View File

@ -76,7 +76,7 @@ import std.typecons;
import tanya.async.transport;
import tanya.async.watcher;
import tanya.container.buffer;
import tanya.container.queue;
import tanya.container.list;
import tanya.memory;
import tanya.network.socket;
@ -163,7 +163,7 @@ abstract class Loop
private bool done = true;
/// Pending watchers.
protected Queue!Watcher pendings;
protected DList!Watcher pendings;
/**
* Returns: Maximal event count can be got at a time
@ -188,7 +188,6 @@ abstract class Loop
*/
this() @nogc
{
pendings = Queue!Watcher();
}
/**
@ -196,9 +195,9 @@ abstract class Loop
*/
~this() @nogc
{
foreach (w; pendings)
for (; !this.pendings.empty; this.pendings.removeFront())
{
defaultAllocator.dispose(w);
defaultAllocator.dispose(this.pendings.front);
}
}
@ -213,9 +212,9 @@ abstract class Loop
poll();
// Invoke pendings
foreach (ref w; this.pendings)
for (; !this.pendings.empty; this.pendings.removeFront())
{
w.invoke();
this.pendings.front.invoke();
}
}
while (!this.done);
@ -244,7 +243,7 @@ abstract class Loop
{
auto loop = defaultAllocator.make!TestLoop;
auto watcher = defaultAllocator.make!DummyWatcher;
loop.pendings.enqueue(watcher);
loop.pendings.insertBack(watcher);
assert(!watcher.invoked);
loop.run();

View File

@ -20,7 +20,7 @@ import tanya.async.loop;
import tanya.async.protocol;
import tanya.async.transport;
import tanya.container.buffer;
import tanya.container.queue;
import tanya.container.list;
import tanya.memory;
import tanya.network.socket;
@ -91,7 +91,7 @@ abstract class SocketWatcher : Watcher
class ConnectionWatcher : SocketWatcher
{
/// Incoming connection queue.
Queue!DuplexTransport incoming;
DList!DuplexTransport incoming;
private Protocol delegate() @nogc protocolFactory;
@ -102,7 +102,6 @@ class ConnectionWatcher : SocketWatcher
this(Socket socket) @nogc
{
super(socket);
incoming = Queue!DuplexTransport();
}
/**
@ -124,10 +123,10 @@ class ConnectionWatcher : SocketWatcher
}
do
{
foreach (transport; incoming)
for (; !this.incoming.empty; this.incoming.removeFront())
{
transport.protocol = protocolFactory();
transport.protocol.connected(transport);
this.incoming.front.protocol = protocolFactory();
this.incoming.front.protocol.connected(this.incoming.front);
}
}
}

View File

@ -12,6 +12,7 @@
* Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/container/queue.d,
* tanya/container/queue.d)
*/
deprecated("Use tanya.container.list.DList instead")
module tanya.container.queue;
import tanya.algorithm.mutation;