Make event loop implementations final

This commit is contained in:
Eugen Wissner 2017-02-10 19:19:37 +01:00
parent 44ac15ab78
commit b74e5aa4ee
5 changed files with 5 additions and 82 deletions

View File

@ -34,7 +34,7 @@ extern (C) nothrow @nogc
int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout);
}
class EpollLoop : SelectorLoop
final class EpollLoop : SelectorLoop
{
protected int fd;
private Vector!epoll_event events;

View File

@ -26,7 +26,7 @@ import core.sys.windows.winbase;
import core.sys.windows.windef;
import core.sys.windows.winsock2;
class IOCPStreamTransport : StreamTransport
final class IOCPStreamTransport : StreamTransport
{
private WriteBuffer!ubyte input;
@ -106,7 +106,7 @@ class IOCPStreamTransport : StreamTransport
}
}
class IOCPLoop : Loop
final class IOCPLoop : Loop
{
protected HANDLE completionPort;

View File

@ -113,7 +113,7 @@ extern(C) int kevent(int kq, const kevent_t *changelist, int nchanges,
kevent_t *eventlist, int nevents, const timespec *timeout)
nothrow @nogc;
class KqueueLoop : SelectorLoop
final class KqueueLoop : SelectorLoop
{
protected int fd;
private Vector!kevent_t events;

View File

@ -25,7 +25,7 @@ import tanya.network.socket;
/**
* Transport for stream sockets.
*/
class SelectorStreamTransport : IOWatcher, StreamTransport
final class SelectorStreamTransport : IOWatcher, StreamTransport
{
/// Input buffer.
package WriteBuffer!ubyte input;

View File

@ -1,77 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* Copyright: Eugene Wissner 2016-2017.
* License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
* Mozilla Public License, v. 2.0).
* Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
*/
module tanya.container.string;
import core.exception;
import core.stdc.string;
import tanya.memory;
/**
* UTF-8 string.
*/
struct String
{
private char[] data;
private size_t length_;
invariant
{
assert(length_ <= data.length);
}
/// Ditto.
this(const(char)[] str, shared Allocator allocator = defaultAllocator)
nothrow @trusted @nogc
{
this(allocator);
data = cast(char[]) allocator.allocate(str.length);
if (str.length > 0 && data is null)
{
onOutOfMemoryErrorNoGC();
}
memcpy(data.ptr, str.ptr, str.length);
}
/// Ditto.
this(const(wchar)[] str, shared Allocator allocator = defaultAllocator)
nothrow @trusted @nogc
{
this(allocator);
}
/// Ditto.
this(const(dchar)[] str, shared Allocator allocator = defaultAllocator)
nothrow @trusted @nogc
{
this(allocator);
}
/// Ditto.
this(shared Allocator allocator) pure nothrow @safe @nogc
in
{
assert(allocator !is null);
}
body
{
allocator_ = allocator;
}
~this() nothrow @trusted @nogc
{
allocator.deallocate(data);
}
mixin DefaultAllocator;
}