emitter/event improvements
This commit is contained in:
parent
bef8bd1d5c
commit
1be55de0a5
@ -1,7 +1,6 @@
|
|||||||
#include "uvw/async.hpp"
|
#include "uvw/async.hpp"
|
||||||
#include "uvw/check.hpp"
|
#include "uvw/check.hpp"
|
||||||
#include "uvw/dns.hpp"
|
#include "uvw/dns.hpp"
|
||||||
#include "uvw/event.hpp"
|
|
||||||
#include "uvw/fs.hpp"
|
#include "uvw/fs.hpp"
|
||||||
#include "uvw/fs_event.hpp"
|
#include "uvw/fs_event.hpp"
|
||||||
#include "uvw/fs_poll.hpp"
|
#include "uvw/fs_poll.hpp"
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -17,7 +16,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by AsyncHandle according with its functionalities.
|
* It will be emitted by AsyncHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct AsyncEvent: Event<AsyncEvent> {};
|
struct AsyncEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -19,7 +18,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* To create a `CheckHandle` through a `Loop`, no arguments are required.
|
* To create a `CheckHandle` through a `Loop`, no arguments are required.
|
||||||
*/
|
*/
|
||||||
struct CheckEvent: Event<CheckEvent> {};
|
struct CheckEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
@ -19,7 +18,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by GetAddrInfoReq according with its functionalities.
|
* It will be emitted by GetAddrInfoReq according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct AddrInfoEvent: Event<AddrInfoEvent> {
|
struct AddrInfoEvent {
|
||||||
using Deleter = void(*)(addrinfo *);
|
using Deleter = void(*)(addrinfo *);
|
||||||
|
|
||||||
AddrInfoEvent(std::unique_ptr<addrinfo, Deleter> addr)
|
AddrInfoEvent(std::unique_ptr<addrinfo, Deleter> addr)
|
||||||
@ -41,7 +40,7 @@ struct AddrInfoEvent: Event<AddrInfoEvent> {
|
|||||||
*
|
*
|
||||||
* It will be emitted by GetNameInfoReq according with its functionalities.
|
* It will be emitted by GetNameInfoReq according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct NameInfoEvent: Event<NameInfoEvent> {
|
struct NameInfoEvent {
|
||||||
NameInfoEvent(const char *host, const char *serv)
|
NameInfoEvent(const char *host, const char *serv)
|
||||||
: hostname{host}, service{serv}
|
: hostname{host}, service{serv}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -9,12 +9,50 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include "event.hpp"
|
#include <uv.h>
|
||||||
|
|
||||||
|
|
||||||
namespace uvw {
|
namespace uvw {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The ErrorEvent event.
|
||||||
|
*
|
||||||
|
* Custom wrapper around libuv's error constants.
|
||||||
|
*/
|
||||||
|
struct ErrorEvent {
|
||||||
|
template<typename U, typename = std::enable_if_t<std::is_integral<U>::value>>
|
||||||
|
explicit ErrorEvent(U val) noexcept
|
||||||
|
: ec{static_cast<int>(val)}, str{uv_strerror(ec)}
|
||||||
|
{}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the error message for the given error code.
|
||||||
|
*
|
||||||
|
* Leaks a few bytes of memory when you call it with an unknown error code.
|
||||||
|
*
|
||||||
|
* @return The error message for the given error code.
|
||||||
|
*/
|
||||||
|
const char * what() const noexcept { return str; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the underlying error code, that is a libuv's error constant.
|
||||||
|
* @return The underlying error code.
|
||||||
|
*/
|
||||||
|
int code() const noexcept { return ec; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if the event contains a valid error code.
|
||||||
|
* @return True in case of success, false otherwise.
|
||||||
|
*/
|
||||||
|
explicit operator bool() const noexcept { return ec < 0; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const int ec;
|
||||||
|
const char *str;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Event emitter base class.
|
* @brief Event emitter base class.
|
||||||
*
|
*
|
||||||
@ -96,11 +134,20 @@ class Emitter {
|
|||||||
ListenerList onL{};
|
ListenerList onL{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static std::size_t next_type() noexcept {
|
||||||
|
static std::size_t counter = 0;
|
||||||
|
return counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename E>
|
||||||
|
static std::size_t event_type() noexcept {
|
||||||
|
static std::size_t value = next_type();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename E>
|
template<typename E>
|
||||||
Handler<E> & handler() noexcept {
|
Handler<E> & handler() noexcept {
|
||||||
static_assert(std::is_base_of<Event<E>, E>::value, "!");
|
std::size_t type = event_type<E>();
|
||||||
|
|
||||||
std::size_t type = E::type();
|
|
||||||
|
|
||||||
if(!(type < handlers.size())) {
|
if(!(type < handlers.size())) {
|
||||||
handlers.resize(type+1);
|
handlers.resize(type+1);
|
||||||
@ -222,7 +269,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
template<typename E>
|
template<typename E>
|
||||||
bool empty() const noexcept {
|
bool empty() const noexcept {
|
||||||
std::size_t type = E::type();
|
std::size_t type = event_type<E>();
|
||||||
|
|
||||||
return (!(type < handlers.size()) ||
|
return (!(type < handlers.size()) ||
|
||||||
!handlers[type] ||
|
!handlers[type] ||
|
||||||
|
|||||||
@ -1,85 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
#include <memory>
|
|
||||||
#include <uv.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace uvw {
|
|
||||||
|
|
||||||
|
|
||||||
namespace details {
|
|
||||||
|
|
||||||
|
|
||||||
struct BaseEvent {
|
|
||||||
virtual ~BaseEvent() noexcept {}
|
|
||||||
|
|
||||||
static std::size_t next() noexcept {
|
|
||||||
static std::size_t cnt = 0;
|
|
||||||
return cnt++;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Generic event type.
|
|
||||||
*
|
|
||||||
* Events in `uvw` must be associated with an unique numerical identifier. To do
|
|
||||||
* that, they shall inherit from this class.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
struct Event: details::BaseEvent {
|
|
||||||
/**
|
|
||||||
* @brief Gets the unique numerical identifier.
|
|
||||||
* @return An unique numerical identifier for the given event type.
|
|
||||||
*/
|
|
||||||
static std::size_t type() noexcept {
|
|
||||||
static std::size_t val = BaseEvent::next();
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The ErrorEvent event.
|
|
||||||
*
|
|
||||||
* Custom wrapper around libuv's error constants.
|
|
||||||
*/
|
|
||||||
struct ErrorEvent: Event<ErrorEvent> {
|
|
||||||
template<typename U, typename = std::enable_if_t<std::is_integral<U>::value>>
|
|
||||||
explicit ErrorEvent(U val) noexcept
|
|
||||||
: ec{static_cast<int>(val)}, str{uv_strerror(ec)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Returns the error message for the given error code.
|
|
||||||
*
|
|
||||||
* Leaks a few bytes of memory when you call it with an unknown error code.
|
|
||||||
*
|
|
||||||
* @return The error message for the given error code.
|
|
||||||
*/
|
|
||||||
const char * what() const noexcept { return str; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Gets the underlying error code, that is a libuv's error constant.
|
|
||||||
* @return The underlying error code.
|
|
||||||
*/
|
|
||||||
int code() const noexcept { return ec; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Checks if the event contains a valid error code.
|
|
||||||
* @return True in case of success, false otherwise.
|
|
||||||
*/
|
|
||||||
explicit operator bool() const noexcept { return ec < 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
const int ec;
|
|
||||||
const char *str;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -6,7 +6,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
@ -111,7 +110,7 @@ enum class UVDirentTypeT: std::underlying_type_t<uv_dirent_type_t> {
|
|||||||
* for further details.
|
* for further details.
|
||||||
*/
|
*/
|
||||||
template<details::UVFsType e>
|
template<details::UVFsType e>
|
||||||
struct FsEvent: Event<FsEvent<e>> {
|
struct FsEvent {
|
||||||
FsEvent(const char *pathname) noexcept: path{pathname} {}
|
FsEvent(const char *pathname) noexcept: path{pathname} {}
|
||||||
|
|
||||||
const char * path; /*!< The path affecting the request. */
|
const char * path; /*!< The path affecting the request. */
|
||||||
@ -125,9 +124,7 @@ struct FsEvent: Event<FsEvent<e>> {
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::READ>
|
struct FsEvent<details::UVFsType::READ> {
|
||||||
: Event<FsEvent<details::UVFsType::READ>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, std::unique_ptr<const char[]> buf, std::size_t sz) noexcept
|
FsEvent(const char *pathname, std::unique_ptr<const char[]> buf, std::size_t sz) noexcept
|
||||||
: path{pathname}, data{std::move(buf)}, size{sz}
|
: path{pathname}, data{std::move(buf)}, size{sz}
|
||||||
{}
|
{}
|
||||||
@ -145,9 +142,7 @@ struct FsEvent<details::UVFsType::READ>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::WRITE>
|
struct FsEvent<details::UVFsType::WRITE> {
|
||||||
: Event<FsEvent<details::UVFsType::WRITE>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, std::size_t sz) noexcept
|
FsEvent(const char *pathname, std::size_t sz) noexcept
|
||||||
: path{pathname}, size{sz}
|
: path{pathname}, size{sz}
|
||||||
{}
|
{}
|
||||||
@ -164,9 +159,7 @@ struct FsEvent<details::UVFsType::WRITE>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::SENDFILE>
|
struct FsEvent<details::UVFsType::SENDFILE> {
|
||||||
: Event<FsEvent<details::UVFsType::SENDFILE>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, std::size_t sz) noexcept
|
FsEvent(const char *pathname, std::size_t sz) noexcept
|
||||||
: path{pathname}, size{sz}
|
: path{pathname}, size{sz}
|
||||||
{}
|
{}
|
||||||
@ -183,9 +176,7 @@ struct FsEvent<details::UVFsType::SENDFILE>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::STAT>
|
struct FsEvent<details::UVFsType::STAT> {
|
||||||
: Event<FsEvent<details::UVFsType::STAT>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, Stat curr) noexcept
|
FsEvent(const char *pathname, Stat curr) noexcept
|
||||||
: path{pathname}, stat{std::move(curr)}
|
: path{pathname}, stat{std::move(curr)}
|
||||||
{}
|
{}
|
||||||
@ -202,9 +193,7 @@ struct FsEvent<details::UVFsType::STAT>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::FSTAT>
|
struct FsEvent<details::UVFsType::FSTAT> {
|
||||||
: Event<FsEvent<details::UVFsType::FSTAT>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, Stat curr) noexcept
|
FsEvent(const char *pathname, Stat curr) noexcept
|
||||||
: path{pathname}, stat{std::move(curr)}
|
: path{pathname}, stat{std::move(curr)}
|
||||||
{}
|
{}
|
||||||
@ -221,9 +210,7 @@ struct FsEvent<details::UVFsType::FSTAT>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::LSTAT>
|
struct FsEvent<details::UVFsType::LSTAT> {
|
||||||
: Event<FsEvent<details::UVFsType::LSTAT>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, Stat curr) noexcept
|
FsEvent(const char *pathname, Stat curr) noexcept
|
||||||
: path{pathname}, stat{std::move(curr)}
|
: path{pathname}, stat{std::move(curr)}
|
||||||
{}
|
{}
|
||||||
@ -240,9 +227,7 @@ struct FsEvent<details::UVFsType::LSTAT>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::SCANDIR>
|
struct FsEvent<details::UVFsType::SCANDIR> {
|
||||||
: Event<FsEvent<details::UVFsType::SCANDIR>>
|
|
||||||
{
|
|
||||||
FsEvent(const char *pathname, std::size_t sz) noexcept
|
FsEvent(const char *pathname, std::size_t sz) noexcept
|
||||||
: path{pathname}, size{sz}
|
: path{pathname}, size{sz}
|
||||||
{}
|
{}
|
||||||
@ -259,9 +244,7 @@ struct FsEvent<details::UVFsType::SCANDIR>
|
|||||||
* functionalities.
|
* functionalities.
|
||||||
*/
|
*/
|
||||||
template<>
|
template<>
|
||||||
struct FsEvent<details::UVFsType::READLINK>
|
struct FsEvent<details::UVFsType::READLINK> {
|
||||||
: Event<FsEvent<details::UVFsType::READLINK>>
|
|
||||||
{
|
|
||||||
explicit FsEvent(const char *pathname, const char *buf, std::size_t sz) noexcept
|
explicit FsEvent(const char *pathname, const char *buf, std::size_t sz) noexcept
|
||||||
: path{pathname}, data{buf}, size{sz}
|
: path{pathname}, data{buf}, size{sz}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
@ -38,7 +37,7 @@ enum class UVFsEvent: std::underlying_type_t<uv_fs_event> {
|
|||||||
*
|
*
|
||||||
* It will be emitted by FsEventHandle according with its functionalities.
|
* It will be emitted by FsEventHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct FsEventEvent: Event<FsEventEvent> {
|
struct FsEventEvent {
|
||||||
FsEventEvent(const char * pathname, Flags<details::UVFsEvent> events)
|
FsEventEvent(const char * pathname, Flags<details::UVFsEvent> events)
|
||||||
: filename{pathname}, flags{std::move(events)}
|
: filename{pathname}, flags{std::move(events)}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
@ -19,7 +18,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by FsPollHandle according with its functionalities.
|
* It will be emitted by FsPollHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct FsPollEvent: Event<FsPollEvent> {
|
struct FsPollEvent {
|
||||||
explicit FsPollEvent(Stat previous, Stat current) noexcept
|
explicit FsPollEvent(Stat previous, Stat current) noexcept
|
||||||
: prev{std::move(previous)}, curr{std::move(current)}
|
: prev{std::move(previous)}, curr{std::move(current)}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -17,7 +17,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by the handles according with their functionalities.
|
* It will be emitted by the handles according with their functionalities.
|
||||||
*/
|
*/
|
||||||
struct CloseEvent: Event<CloseEvent> {};
|
struct CloseEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -17,7 +16,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by IdleHandle according with its functionalities.
|
* It will be emitted by IdleHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct IdleEvent: Event<IdleEvent> {};
|
struct IdleEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "stream.hpp"
|
#include "stream.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
|
||||||
@ -31,7 +30,7 @@ enum class UVPollEvent: std::underlying_type_t<uv_poll_event> {
|
|||||||
*
|
*
|
||||||
* It will be emitted by PollHandle according with its functionalities.
|
* It will be emitted by PollHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct PollEvent: Event<PollEvent> {
|
struct PollEvent {
|
||||||
explicit PollEvent(Flags<details::UVPollEvent> events) noexcept
|
explicit PollEvent(Flags<details::UVPollEvent> events) noexcept
|
||||||
: flags{std::move(events)}
|
: flags{std::move(events)}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -19,7 +18,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* To create a `PrepareHandle` through a `Loop`, no arguments are required.
|
* To create a `PrepareHandle` through a `Loop`, no arguments are required.
|
||||||
*/
|
*/
|
||||||
struct PrepareEvent: Event<PrepareEvent> {};
|
struct PrepareEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "stream.hpp"
|
#include "stream.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
@ -47,7 +46,7 @@ enum class UVStdIOFlags: std::underlying_type_t<uv_stdio_flags> {
|
|||||||
*
|
*
|
||||||
* It will be emitted by ProcessHandle according with its functionalities.
|
* It will be emitted by ProcessHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct ExitEvent: Event<ExitEvent> {
|
struct ExitEvent {
|
||||||
explicit ExitEvent(int64_t code, int sig) noexcept
|
explicit ExitEvent(int64_t code, int sig) noexcept
|
||||||
: status{code}, signal{sig}
|
: status{code}, signal{sig}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -17,7 +16,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by SignalHandle according with its functionalities.
|
* It will be emitted by SignalHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct SignalEvent: Event<SignalEvent> {
|
struct SignalEvent {
|
||||||
explicit SignalEvent(int sig) noexcept: signum{sig} {}
|
explicit SignalEvent(int sig) noexcept: signum{sig} {}
|
||||||
|
|
||||||
int signum; /*!< The signal being monitored by this handle. */
|
int signum; /*!< The signal being monitored by this handle. */
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
@ -21,7 +20,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct ConnectEvent: Event<ConnectEvent> {};
|
struct ConnectEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,7 +28,7 @@ struct ConnectEvent: Event<ConnectEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct EndEvent: Event<EndEvent> {};
|
struct EndEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,7 +36,7 @@ struct EndEvent: Event<EndEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct ListenEvent: Event<ListenEvent> {};
|
struct ListenEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,7 +44,7 @@ struct ListenEvent: Event<ListenEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct ShutdownEvent: Event<ShutdownEvent> {};
|
struct ShutdownEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,7 +52,7 @@ struct ShutdownEvent: Event<ShutdownEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct WriteEvent: Event<WriteEvent> {};
|
struct WriteEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,7 +60,7 @@ struct WriteEvent: Event<WriteEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by StreamHandle according with its functionalities.
|
* It will be emitted by StreamHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct DataEvent: Event<DataEvent> {
|
struct DataEvent {
|
||||||
explicit DataEvent(std::unique_ptr<char[]> buf, std::size_t len) noexcept
|
explicit DataEvent(std::unique_ptr<char[]> buf, std::size_t len) noexcept
|
||||||
: data{std::move(buf)}, length{len}
|
: data{std::move(buf)}, length{len}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "stream.hpp"
|
#include "stream.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -18,7 +17,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by TimerHandle according with its functionalities.
|
* It will be emitted by TimerHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct TimerEvent: Event<TimerEvent> {};
|
struct TimerEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "stream.hpp"
|
#include "stream.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "handle.hpp"
|
#include "handle.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
@ -23,7 +22,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by UDPHandle according with its functionalities.
|
* It will be emitted by UDPHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct SendEvent: Event<SendEvent> {};
|
struct SendEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,7 +30,7 @@ struct SendEvent: Event<SendEvent> {};
|
|||||||
*
|
*
|
||||||
* It will be emitted by UDPHandle according with its functionalities.
|
* It will be emitted by UDPHandle according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct UDPDataEvent: Event<UDPDataEvent> {
|
struct UDPDataEvent {
|
||||||
explicit UDPDataEvent(Addr sndr, std::unique_ptr<const char[]> buf, std::size_t len, bool part) noexcept
|
explicit UDPDataEvent(Addr sndr, std::unique_ptr<const char[]> buf, std::size_t len, bool part) noexcept
|
||||||
: data{std::move(buf)}, length{len}, sender{std::move(sndr)}, partial{part}
|
: data{std::move(buf)}, length{len}, sender{std::move(sndr)}, partial{part}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include "event.hpp"
|
|
||||||
#include "request.hpp"
|
#include "request.hpp"
|
||||||
#include "loop.hpp"
|
#include "loop.hpp"
|
||||||
|
|
||||||
@ -18,7 +17,7 @@ namespace uvw {
|
|||||||
*
|
*
|
||||||
* It will be emitted by WorkReq according with its functionalities.
|
* It will be emitted by WorkReq according with its functionalities.
|
||||||
*/
|
*/
|
||||||
struct WorkEvent: Event<WorkEvent> {};
|
struct WorkEvent {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -36,7 +36,6 @@ set(TARGET_ASYNC async)
|
|||||||
set(TARGET_CHECK check)
|
set(TARGET_CHECK check)
|
||||||
set(TARGET_DNS dns)
|
set(TARGET_DNS dns)
|
||||||
set(TARGET_EMITTER emitter)
|
set(TARGET_EMITTER emitter)
|
||||||
set(TARGET_EVENT event)
|
|
||||||
set(TARGET_FS_REQ fs_req)
|
set(TARGET_FS_REQ fs_req)
|
||||||
set(TARGET_FILE_REQ file_req)
|
set(TARGET_FILE_REQ file_req)
|
||||||
set(TARGET_HANDLE handle)
|
set(TARGET_HANDLE handle)
|
||||||
@ -91,14 +90,6 @@ target_include_directories(${TARGET_EMITTER} PRIVATE ${COMMON_INCLUDE_DIRS})
|
|||||||
target_link_libraries(${TARGET_EMITTER} PRIVATE ${COMMON_LINK_LIBS})
|
target_link_libraries(${TARGET_EMITTER} PRIVATE ${COMMON_LINK_LIBS})
|
||||||
add_test(NAME ${TARGET_EMITTER} COMMAND ${TARGET_EMITTER})
|
add_test(NAME ${TARGET_EMITTER} COMMAND ${TARGET_EMITTER})
|
||||||
|
|
||||||
# Test TARGET_EVENT
|
|
||||||
|
|
||||||
set(TARGET_EVENT_SOURCES $<TARGET_OBJECTS:odr> uvw/event.cpp)
|
|
||||||
add_executable(${TARGET_EVENT} ${TARGET_EVENT_SOURCES})
|
|
||||||
target_include_directories(${TARGET_EVENT} PRIVATE ${COMMON_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(${TARGET_EVENT} PRIVATE ${COMMON_LINK_LIBS})
|
|
||||||
add_test(NAME ${TARGET_EVENT} COMMAND ${TARGET_EVENT})
|
|
||||||
|
|
||||||
# Test TARGET_FS_REQ
|
# Test TARGET_FS_REQ
|
||||||
|
|
||||||
set(TARGET_FS_REQ_SOURCES $<TARGET_OBJECTS:odr> uvw/fs_req.cpp)
|
set(TARGET_FS_REQ_SOURCES $<TARGET_OBJECTS:odr> uvw/fs_req.cpp)
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <uvw/emitter.hpp>
|
#include <uvw/emitter.hpp>
|
||||||
#include <uvw/event.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
struct FakeEvent: uvw::Event<FakeEvent> { };
|
struct FakeEvent { };
|
||||||
|
|
||||||
struct TestEmitter: uvw::Emitter<TestEmitter> {
|
struct TestEmitter: uvw::Emitter<TestEmitter> {
|
||||||
void emit() { publish(FakeEvent{}); }
|
void emit() { publish(FakeEvent{}); }
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
#include <uvw/event.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
struct EventA: uvw::Event<EventA> {};
|
|
||||||
struct EventB: uvw::Event<EventB> {};
|
|
||||||
|
|
||||||
|
|
||||||
TEST(Event, Uniqueness) {
|
|
||||||
ASSERT_EQ(EventA::type(), EventA::type());
|
|
||||||
ASSERT_EQ(EventA::type(), EventA{}.type());
|
|
||||||
|
|
||||||
ASSERT_NE(EventA::type(), EventB::type());
|
|
||||||
ASSERT_NE(EventA::type(), EventB{}.type());
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user