5#include <boost/assert.hpp>
24void allocator(uv_handle_t * ,
size_t sugg, uv_buf_t *buf);
31template <
typename R,
typename F>
32 requires std::is_invocable_r_v<R, F, std::string_view>
34 if (view.data()[view.size()] ==
'\0') {
35 return f(view.data());
37 std::string str(view);
38 return f(str.c_str());
42template <
typename Into,
typename Handle> Into *
getData(
const Handle *handle) {
43 BOOST_ASSERT(handle !=
nullptr);
44 const void *data = uv_handle_get_data((
const uv_handle_t *)handle);
45 BOOST_ASSERT(
nullptr != data);
50template <
typename Into,
typename Handle>
52 BOOST_ASSERT(handle !=
nullptr);
53 const void *data = uv_handle_get_data((
const uv_handle_t *)handle);
58template <
typename Into,
typename Request>
60 BOOST_ASSERT(req !=
nullptr);
61 const void *data = uv_req_get_data((
const uv_req_t *)req);
62 BOOST_ASSERT(
nullptr != data);
68template <
typename Into,
typename Request>
70 BOOST_ASSERT(req !=
nullptr);
71 const void *data = uv_req_get_data((
const uv_req_t *)req);
76template <
typename Handle,
typename Data>
78 BOOST_ASSERT(handle !=
nullptr);
79 uv_handle_set_data((uv_handle_t *)handle, (
void *)data);
83template <
typename Handle>
void resetData(Handle *handle) {
84 BOOST_ASSERT(handle !=
nullptr);
85 uv_handle_set_data((uv_handle_t *)handle,
nullptr);
89template <
typename Request,
typename Data>
91 BOOST_ASSERT(req !=
nullptr);
92 uv_req_set_data((uv_req_t *)req, (
void *)data);
96 BOOST_ASSERT(req !=
nullptr);
97 uv_req_set_data((uv_req_t *)req, (
void *)
nullptr);
102 BOOST_ASSERT(handle !=
nullptr);
103 return nullptr == uv_handle_get_data((
const uv_handle_t *)handle);
108 return nullptr == uv_req_get_data((
const uv_req_t *)req);
116 static void del(uv_handle_t *handle);
118 del((uv_handle_t *)handle);
130 fmt::print(
"ctor {}()#{}\n",
typeid(T).name(),
id_);
135 fmt::print(
"ctor {}()#{}\n",
typeid(T).name(),
id_);
140 fmt::print(
"operator={}()#{}\n",
typeid(T).name(),
id_);
144 if (
this == &other) {
148 fmt::print(
"operator={}({})#{}\n",
typeid(T).name(), other.
id_,
id_);
150 id_ = fmt::format(
"{}/copy", other.
id_);
153 :
id_{fmt::format(
"{}/copy", other.
id_)} {
155 fmt::print(
"operator={}({})#{}\n",
typeid(T).name(), other.
id_,
id_);
160 fmt::print(
"dtor ~{}()\n",
typeid(T).name());
193 if (
ptr_ !=
nullptr) {
~FlagGuard()
Definition internal_utils.cc:91
FlagGuard(FlagGuard &&)=delete
FlagGuard & operator=(FlagGuard &&)=delete
FlagGuard & operator=(const FlagGuard &)=delete
FlagGuard(const FlagGuard &)=delete
bool & flag_
Definition internal_utils.h:182
LifetimeTracker(LifetimeTracker &&) noexcept
Definition internal_utils.h:133
LifetimeTracker(const LifetimeTracker< T > &other)
Definition internal_utils.h:152
LifetimeTracker< T > & operator=(const LifetimeTracker< T > &other)
Definition internal_utils.h:143
LifetimeTracker & operator=(LifetimeTracker &&) noexcept
Definition internal_utils.h:138
std::string id_
Definition internal_utils.h:165
~LifetimeTracker()
Definition internal_utils.h:158
LifetimeTracker(std::string name="")
Definition internal_utils.h:128
~ZeroAtExit()
Definition internal_utils.h:192
ZeroAtExit & operator=(ZeroAtExit &&)=delete
ZeroAtExit(const ZeroAtExit &)=delete
ZeroAtExit(T **pointer)
Definition internal_utils.h:187
ZeroAtExit & operator=(const ZeroAtExit &)=delete
T ** ptr_
Definition internal_utils.h:199
ZeroAtExit(ZeroAtExit &&)=delete
const bool TRACK_LIFETIMES
Definition internal_utils.cc:15
void setData(Handle *handle, Data *data)
Obtain data pointer set on request with type cast. Data may be nullptr.
Definition internal_utils.h:77
void resetRequestData(Request *req)
Definition internal_utils.h:95
bool requestDataIsNull(Request *req)
Check if request data is null.
Definition internal_utils.h:107
Into * getDataOrNull(const Handle *handle)
Definition internal_utils.h:51
Into * getRequestData(const Request *req)
Obtain data pointer set on request with nullptr check and type cast.
Definition internal_utils.h:59
Into * getData(const Handle *handle)
Obtain data pointer set on handle with nullptr check and type cast.
Definition internal_utils.h:42
void freeUvBuf(const uv_buf_t *buf)
Definition internal_utils.cc:26
void setRequestData(Request *req, Data *data)
Set data pointer on request.
Definition internal_utils.h:90
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
void allocator(uv_handle_t *, size_t sugg, uv_buf_t *buf)
libuv allocator.
Definition internal_utils.cc:18
bool dataIsNull(Handle *handle)
Check if handle data is null.
Definition internal_utils.h:101
R callWithNullTerminated(std::string_view view, F &&f)
Definition internal_utils.h:33
Into * getRequestDataOrNull(const Request *req)
Definition internal_utils.h:69
void resetData(Handle *handle)
Reset data pointer on handle to nullptr.
Definition internal_utils.h:83
Definition async_work.cc:18
Definition internal_utils.h:115
void operator()(Handle *handle)
Definition internal_utils.h:117
static void del(uv_handle_t *handle)
Definition internal_utils.cc:32