From fc83897d0b838b2461d10383840f515053e03eb7 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Mon, 20 Jun 2016 13:54:00 +0200 Subject: [PATCH] WIP: added Stream/Connection --- src/uvw.hpp | 1 + src/uvw/resource.hpp | 7 ++++++- src/uvw/stream.hpp | 19 +++++++++++++++++++ src/uvw/tcp.hpp | 6 +++--- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/uvw/stream.hpp diff --git a/src/uvw.hpp b/src/uvw.hpp index 16f26c56..bedf55f3 100644 --- a/src/uvw.hpp +++ b/src/uvw.hpp @@ -1,5 +1,6 @@ #include "uvw/check.hpp" #include "uvw/error.hpp" #include "uvw/loop.hpp" +#include "uvw/stream.hpp" #include "uvw/tcp.hpp" #include "uvw/timer.hpp" diff --git a/src/uvw/resource.hpp b/src/uvw/resource.hpp index e1aad23b..dda714c3 100644 --- a/src/uvw/resource.hpp +++ b/src/uvw/resource.hpp @@ -26,7 +26,7 @@ protected: public: using Callback = std::function; - ~Resource() { static_assert(std::is_base_of, T>::value, "!"); } + virtual ~Resource() = 0; Resource(const Resource &) = delete; Resource(Resource &&) = delete; @@ -51,5 +51,10 @@ private: Callback callback; }; +template +Resource::~Resource() { + static_assert(std::is_base_of, T>::value, "!"); +} + } diff --git a/src/uvw/stream.hpp b/src/uvw/stream.hpp new file mode 100644 index 00000000..02d48f1f --- /dev/null +++ b/src/uvw/stream.hpp @@ -0,0 +1,19 @@ +#pragma once + + +namespace uvw { + + +template +class Connection: public Resource { + using Resource::Resource; +}; + + +template +class Stream: public Connection { + using Connection::Connection; +}; + + +} diff --git a/src/uvw/tcp.hpp b/src/uvw/tcp.hpp index 4d92cca5..6da6867e 100644 --- a/src/uvw/tcp.hpp +++ b/src/uvw/tcp.hpp @@ -5,14 +5,14 @@ #include #include #include -#include "resource.hpp" +#include "stream.hpp" #include "error.hpp" namespace uvw { -class Tcp final: public Resource { +class Tcp final: public Stream { static void protoConnect(uv_connect_t* req, int status) { auto handle = req->handle; delete req; @@ -25,7 +25,7 @@ public: enum { IPv4, IPv6 }; - explicit Tcp(uv_loop_t *loop): Resource{&handle} { + explicit Tcp(uv_loop_t *loop): Stream{&handle} { uv_tcp_init(loop, &handle); }