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());
41template <
typename Into,
typename Handle> Into *
getData(
const Handle *handle) {
42 const void *data = uv_handle_get_data((
const uv_handle_t *)handle);
43 BOOST_ASSERT(
nullptr != data);
47template <
typename Into,
typename Request>
49 const void *data = uv_req_get_data((
const uv_req_t *)req);
50 BOOST_ASSERT(
nullptr != data);
54template <
typename Handle,
typename Data>
56 BOOST_ASSERT(handle !=
nullptr);
57 uv_handle_set_data((uv_handle_t *)handle, (
void *)data);
60template <
typename Request,
typename Data>
62 BOOST_ASSERT(req !=
nullptr);
63 uv_req_set_data((uv_req_t *)req, (
void *)data);
66template <
typename Handle>
bool dataIsNull(Handle *handle) {
67 return nullptr == uv_handle_get_data((
const uv_handle_t *)handle);
71 return nullptr == uv_req_get_data((
const uv_req_t *)req);
79 static void del(uv_handle_t *handle);
80 template <
typename Handle>
void operator()(Handle *handle) {
81 del((uv_handle_t *)handle);
111 return static_cast<T *
>(
this);
120 delete static_cast<T *
>(
this);
132template <
typename T,
typename... Args>
134 requires std::derived_from<T, RefCounted<T>>
136 if constexpr (
sizeof...(args) == 0) {
139 return new T{std::forward<Args...>(args...)};
151 fmt::print(
"ctor {}()#{}\n",
typeid(T).name(),
id_);
156 fmt::print(
"ctor {}()#{}\n",
typeid(T).name(),
id_);
161 fmt::print(
"operator={}()#{}\n",
typeid(T).name(),
id_);
165 if (
this == &other) {
169 fmt::print(
"operator={}({})#{}\n",
typeid(T).name(), other.
id_,
id_);
171 id_ = fmt::format(
"{}/copy", other.
id_);
174 :
id_{fmt::format(
"{}/copy", other.
id_)} {
176 fmt::print(
"operator={}({})#{}\n",
typeid(T).name(), other.
id_,
id_);
181 fmt::print(
"dtor ~{}()\n",
typeid(T).name());
214 if (
ptr_ !=
nullptr) {
Definition internal_utils.h:191
~FlagGuard()
Definition internal_utils.cc:53
FlagGuard(FlagGuard &&)=delete
FlagGuard & operator=(FlagGuard &&)=delete
FlagGuard & operator=(const FlagGuard &)=delete
FlagGuard(const FlagGuard &)=delete
bool & flag_
Definition internal_utils.h:203
Definition internal_utils.h:147
LifetimeTracker(LifetimeTracker &&) noexcept
Definition internal_utils.h:154
LifetimeTracker(const LifetimeTracker< T > &other)
Definition internal_utils.h:173
LifetimeTracker< T > & operator=(const LifetimeTracker< T > &other)
Definition internal_utils.h:164
LifetimeTracker & operator=(LifetimeTracker &&) noexcept
Definition internal_utils.h:159
std::string id_
Definition internal_utils.h:186
~LifetimeTracker()
Definition internal_utils.h:179
LifetimeTracker(std::string name="")
Definition internal_utils.h:149
Definition internal_utils.h:98
RefCounted(RefCounted &&other) noexcept
Definition internal_utils.h:103
virtual T * addRef()
Definition internal_utils.h:109
virtual ~RefCounted()=default
RefCounted(const RefCounted &other)=default
RefCounted & operator=(RefCounted &&other) noexcept
Definition internal_utils.h:104
RefCounted & operator=(const RefCounted &other)=default
virtual void delRef()
Definition internal_utils.h:117
size_t count_
Definition internal_utils.h:128
Definition internal_utils.h:206
~ZeroAtExit()
Definition internal_utils.h:213
ZeroAtExit & operator=(ZeroAtExit &&)=delete
ZeroAtExit(const ZeroAtExit &)=delete
ZeroAtExit(T **pointer)
Definition internal_utils.h:208
ZeroAtExit & operator=(const ZeroAtExit &)=delete
T ** ptr_
Definition internal_utils.h:220
ZeroAtExit(ZeroAtExit &&)=delete
const bool TRACK_LIFETIMES
Definition internal_utils.cc:15
void setData(Handle *handle, Data *data)
Definition internal_utils.h:55
bool requestDataIsNull(Request *req)
Definition internal_utils.h:70
Into * getRequestData(const Request *req)
Definition internal_utils.h:48
Into * getData(const Handle *handle)
Definition internal_utils.h:41
void freeUvBuf(const uv_buf_t *buf)
Definition internal_utils.cc:26
void setRequestData(Request *req, Data *data)
Definition internal_utils.h:61
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)
Definition internal_utils.h:66
R callWithNullTerminated(std::string_view view, F &&f)
Definition internal_utils.h:33
T * makeRefCounted(Args... args)
Create a new refcounted value. T must derive from RefCounted<T>.
Definition internal_utils.h:133
Definition async_work.cc:17
Definition internal_utils.h:78
void operator()(Handle *handle)
Definition internal_utils.h:80
static void del(uv_handle_t *handle)
Definition internal_utils.cc:31