Browse Source

cmUVHandlePtr: Add uv_timer_ptr

Brad King 8 years ago
parent
commit
dd700e9bfb
3 changed files with 27 additions and 0 deletions
  1. 14 0
      Source/cmUVHandlePtr.cxx
  2. 12 0
      Source/cmUVHandlePtr.h
  3. 1 0
      Tests/CMakeLib/testUVRAII.cxx

+ 14 - 0
Source/cmUVHandlePtr.cxx

@@ -172,6 +172,18 @@ uv_pipe_ptr::operator uv_stream_t*() const
 }
 
 #ifdef CMAKE_BUILD_WITH_CMAKE
+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());
@@ -199,6 +211,8 @@ UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(stream)
 #ifdef CMAKE_BUILD_WITH_CMAKE
 UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(async)
 
+UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(timer)
+
 UV_HANDLE_PTR_INSTANTIATE_EXPLICIT(tty)
 #endif
 }

+ 12 - 0
Source/cmUVHandlePtr.h

@@ -5,6 +5,7 @@
 
 #include <algorithm>
 #include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <type_traits>
 
@@ -164,6 +165,15 @@ struct uv_pipe_ptr : public uv_handle_ptr_<uv_pipe_t>
   int init(uv_loop_t& loop, int ipc, 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>);
@@ -192,6 +202,8 @@ UV_HANDLE_PTR_INSTANTIATE_EXTERN(pipe)
 
 UV_HANDLE_PTR_INSTANTIATE_EXTERN(stream)
 
+UV_HANDLE_PTR_INSTANTIATE_EXTERN(timer)
+
 UV_HANDLE_PTR_INSTANTIATE_EXTERN(tty)
 
 #undef UV_HANDLE_PTR_INSTANTIATE_EXTERN

+ 1 - 0
Tests/CMakeLib/testUVRAII.cxx

@@ -155,6 +155,7 @@ static bool testAllMoves()
   struct allTypes
   {
     uv_stream_ptr _7;
+    uv_timer_ptr _8;
     uv_tty_ptr _9;
     uv_pipe_ptr _12;
     uv_async_ptr _13;