diff options
author | Brad King <brad.king@kitware.com> | 2017-12-01 13:22:43 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2017-12-01 13:22:49 (GMT) |
commit | e61c1cf64c4f39b00e0f8ed81466e85c773d9ba2 (patch) | |
tree | 2e020cf1ea4068a61309929ca8df77df07e2f5a6 /Source | |
parent | 47c326c36bff1669f17ea2d89c49dc9152f8268a (diff) | |
parent | 3bcaa870078d875b65f17d82661a133f6d5cbdfc (diff) | |
download | CMake-e61c1cf64c4f39b00e0f8ed81466e85c773d9ba2.zip CMake-e61c1cf64c4f39b00e0f8ed81466e85c773d9ba2.tar.gz CMake-e61c1cf64c4f39b00e0f8ed81466e85c773d9ba2.tar.bz2 |
Merge topic 'libuv-raii'
3bcaa870 cmUVHandlePtr: Add uv_process_ptr
dd700e9b cmUVHandlePtr: Add uv_timer_ptr
32cfa7b3 cmUVHandlePtr: Move to CMakeLib to make it available everywhere
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1541
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Source/cmUVHandlePtr.cxx | 33 | ||||
-rw-r--r-- | Source/cmUVHandlePtr.h | 22 |
3 files changed, 55 insertions, 3 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 88c63e1..5611e55 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -348,6 +348,8 @@ set(SRCS cmTestGenerator.cxx cmTestGenerator.h cmUuid.cxx + cmUVHandlePtr.cxx + cmUVHandlePtr.h cmVariableWatch.cxx cmVariableWatch.h cmVersion.cxx @@ -1029,7 +1031,6 @@ list(APPEND _tools cmake) target_link_libraries(cmake CMakeLib) add_library(CMakeServerLib - cmUVHandlePtr.h cmUVHandlePtr.cxx cmConnection.h cmConnection.cxx cmFileMonitor.cxx cmFileMonitor.h cmPipeConnection.cxx cmPipeConnection.h diff --git a/Source/cmUVHandlePtr.cxx b/Source/cmUVHandlePtr.cxx index 214c7b2..d7e38c3 100644 --- a/Source/cmUVHandlePtr.cxx +++ b/Source/cmUVHandlePtr.cxx @@ -82,6 +82,7 @@ uv_handle_ptr_<T>::operator T*() const return this->handle.get(); } +#ifdef CMAKE_BUILD_WITH_CMAKE template <> struct uv_handle_deleter<uv_async_t> { @@ -126,6 +127,7 @@ int uv_async_ptr::init(uv_loop_t& loop, uv_async_cb async_cb, void* data) allocate(data); return uv_async_init(&loop, handle.get(), async_cb); } +#endif template <> struct uv_handle_deleter<uv_signal_t> @@ -169,6 +171,26 @@ uv_pipe_ptr::operator uv_stream_t*() const return reinterpret_cast<uv_stream_t*>(handle.get()); } +#ifdef CMAKE_BUILD_WITH_CMAKE +int uv_process_ptr::spawn(uv_loop_t& loop, uv_process_options_t const& options, + void* data) +{ + allocate(data); + return uv_spawn(&loop, *this, &options); +} + +int uv_timer_ptr::init(uv_loop_t& loop, void* data) +{ + allocate(data); + return uv_timer_init(&loop, *this); +} + +int uv_timer_ptr::start(uv_timer_cb cb, uint64_t timeout, uint64_t repeat) +{ + assert(handle); + return uv_timer_start(*this, cb, timeout, repeat); +} + uv_tty_ptr::operator uv_stream_t*() const { return reinterpret_cast<uv_stream_t*>(handle.get()); @@ -179,6 +201,7 @@ int uv_tty_ptr::init(uv_loop_t& loop, int fd, int readable, void* data) allocate(data); return uv_tty_init(&loop, *this, fd, readable); } +#endif template class uv_handle_ptr_base_<uv_handle_t>; @@ -186,13 +209,19 @@ template class uv_handle_ptr_base_<uv_handle_t>; template class uv_handle_ptr_base_<uv_##NAME##_t>; \ template class uv_handle_ptr_<uv_##NAME##_t>; -UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(async) - UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(signal) UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(pipe) UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(stream) +#ifdef CMAKE_BUILD_WITH_CMAKE +UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(async) + +UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(process) + +UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(timer) + UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(tty) +#endif } diff --git a/Source/cmUVHandlePtr.h b/Source/cmUVHandlePtr.h index a251c5f..a6ce565 100644 --- a/Source/cmUVHandlePtr.h +++ b/Source/cmUVHandlePtr.h @@ -5,6 +5,7 @@ #include <algorithm> #include <cstddef> +#include <cstdint> #include <memory> #include <type_traits> @@ -164,6 +165,23 @@ struct uv_pipe_ptr : public uv_handle_ptr_<uv_pipe_t> int init(uv_loop_t& loop, int ipc, void* data = nullptr); }; +struct uv_process_ptr : public uv_handle_ptr_<uv_process_t> +{ + CM_PERFECT_FWD_CTOR(uv_process_ptr, uv_handle_ptr_<uv_process_t>); + + int spawn(uv_loop_t& loop, uv_process_options_t const& options, + void* data = nullptr); +}; + +struct uv_timer_ptr : public uv_handle_ptr_<uv_timer_t> +{ + CM_PERFECT_FWD_CTOR(uv_timer_ptr, uv_handle_ptr_<uv_timer_t>); + + int init(uv_loop_t& loop, void* data = nullptr); + + int start(uv_timer_cb cb, uint64_t timeout, uint64_t repeat); +}; + struct uv_tty_ptr : public uv_handle_ptr_<uv_tty_t> { CM_PERFECT_FWD_CTOR(uv_tty_ptr, uv_handle_ptr_<uv_tty_t>); @@ -190,8 +208,12 @@ UV_HANDLE_PTR_INSTANTIATE_EXTERN(signal) UV_HANDLE_PTR_INSTANTIATE_EXTERN(pipe) +UV_HANDLE_PTR_INSTANTIATE_EXTERN(process) + UV_HANDLE_PTR_INSTANTIATE_EXTERN(stream) +UV_HANDLE_PTR_INSTANTIATE_EXTERN(timer) + UV_HANDLE_PTR_INSTANTIATE_EXTERN(tty) #undef UV_HANDLE_PTR_INSTANTIATE_EXTERN |