diff --git a/src/uvw.hpp b/src/uvw.hpp index 04956d08..263cec47 100644 --- a/src/uvw.hpp +++ b/src/uvw.hpp @@ -1,5 +1,6 @@ #include "uvw/check.hpp" #include "uvw/loop.hpp" +#include "uvw/prepare.hpp" #include "uvw/stream.hpp" #include "uvw/tcp.hpp" #include "uvw/timer.hpp" diff --git a/src/uvw/prepare.hpp b/src/uvw/prepare.hpp new file mode 100644 index 00000000..b2802a46 --- /dev/null +++ b/src/uvw/prepare.hpp @@ -0,0 +1,47 @@ +#pragma once + + +#include +#include +#include +#include "resource.hpp" +#include "util.hpp" + + +namespace uvw { + + +class Prepare final: public Resource { + static void startCallback(Prepare &prepare, std::function &cb, uv_prepare_t *) { + cb(UVWError{}, prepare); + } + + explicit Prepare(std::shared_ptr ref) + : Resource{HandleType{}, std::move(ref)} + { + initialized = (uv_prepare_init(parent(), get()) == 0); + } + +public: + template + static std::shared_ptr create(Args&&... args) { + return std::shared_ptr{new Prepare{std::forward(args)...}}; + } + + void start(std::function cb) noexcept { + using CBF = CallbackFactory; + auto func = CBF::on<&Prepare::startCallback>(*this, cb); + auto err = uv_prepare_start(get(), func); + if(err) { error(err); } + } + + UVWError stop() noexcept { return UVWError{uv_prepare_stop(get())}; } + + explicit operator bool() const noexcept { return initialized; } + +private: + bool initialized; +}; + + +}