0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-16 01:43:49 +02:00

Add noexcept to various lambdas (gcc-11).

This commit is contained in:
Jason Volk 2022-06-23 19:18:05 -07:00
parent b677eeb4b7
commit 5a4a395fc2
52 changed files with 170 additions and 124 deletions

View file

@ -56,7 +56,7 @@ template<class value>
void void
ircd::ctx::concurrent<value>::wait() ircd::ctx::concurrent<value>::wait()
{ {
d.wait([this] d.wait([this]() noexcept
{ {
return snd == fin; return snd == fin;
}); });
@ -68,7 +68,7 @@ void
ircd::ctx::concurrent<value>::operator()(V&& v) ircd::ctx::concurrent<value>::operator()(V&& v)
{ {
++snd; ++snd;
p([this, v(std::move(v))] p([this, v(std::move(v))]() noexcept
{ {
++rcv; try ++rcv; try
{ {

View file

@ -125,7 +125,7 @@ struct ircd::json::value
value(const json::object &); value(const json::object &);
value(const json::array &); value(const json::array &);
value(const nullptr_t &); value(const nullptr_t &);
value(); value() noexcept;
value(value &&) noexcept; value(value &&) noexcept;
value(const value &); value(const value &);
value &operator=(value &&) noexcept; value &operator=(value &&) noexcept;
@ -137,6 +137,7 @@ static_assert(sizeof(ircd::json::value) == 16, "");
inline inline
ircd::json::value::value() ircd::json::value::value()
noexcept
:string{nullptr} :string{nullptr}
,len{0} ,len{0}
,type{STRING} ,type{STRING}

View file

@ -68,7 +68,8 @@ ircd::m::event::auth::ids(event::id (&out)[N])
const const
{ {
size_t i(0); size_t i(0);
m::for_each(*this, [&i, &out](const event::id &event_id) m::for_each(*this, [&i, &out]
(const event::id &event_id) noexcept
{ {
out[i++] = event_id; out[i++] = event_id;
return i < N; return i < N;

View file

@ -18,15 +18,15 @@ namespace ircd
// to allocate and copy the token with null termination. // to allocate and copy the token with null termination.
using token_view = closure_bool<std::function, const string_view &>; using token_view = closure_bool<std::function, const string_view &>;
bool tokens(const string_view &str, const char sep, const token_view &); bool tokens(const string_view &, const char sep, const token_view &) noexcept;
bool tokens(const string_view &str, const string_view &sep, const token_view &); bool tokens(const string_view &, const string_view &sep, const token_view &) noexcept;
size_t tokens(const string_view &str, const char sep, const size_t limit, const token_view &); size_t tokens(const string_view &, const char sep, const size_t lim, const token_view &) noexcept;
size_t tokens(const string_view &str, const string_view &sep, const size_t limit, const token_view &); size_t tokens(const string_view &, const string_view &sep, const size_t lim, const token_view &) noexcept;
// Copies tokens into your buffer and null terminates strtok() style. Returns BYTES of buf consumed. // Copies tokens into your buffer and null terminates strtok() style. Returns BYTES of buf consumed.
size_t tokens(const string_view &str, const char sep, const mutable_buffer &buf, const token_view &); size_t tokens(const string_view &, const char sep, const mutable_buffer &, const token_view &) noexcept;
size_t tokens(const string_view &str, const string_view &sep, const mutable_buffer &buf, const token_view &); size_t tokens(const string_view &, const string_view &sep, const mutable_buffer &, const token_view &) noexcept;
// Receive token view into iterator range // Receive token view into iterator range
template<class it, template<class it,
@ -81,17 +81,17 @@ namespace ircd
// Tools // Tools
namespace ircd namespace ircd
{ {
size_t token_count(const string_view &str, const char sep); size_t token_count(const string_view &str, const char sep) noexcept;
size_t token_count(const string_view &str, const string_view &sep); size_t token_count(const string_view &str, const string_view &sep) noexcept;
bool token_exists(const string_view &str, const char sep, const string_view &token); bool token_exists(const string_view &str, const char sep, const string_view &token) noexcept;
bool token_exists(const string_view &str, const string_view &sep, const string_view &token); bool token_exists(const string_view &str, const string_view &sep, const string_view &token) noexcept;
string_view token(const string_view &str, const char sep, const size_t at); string_view token(const string_view &str, const char sep, const size_t at);
string_view token(const string_view &str, const string_view &sep, const size_t at); string_view token(const string_view &str, const string_view &sep, const size_t at);
string_view token(const string_view &str, const char sep, const size_t at, const string_view &def); string_view token(const string_view &str, const char sep, const size_t at, const string_view &def) noexcept;
string_view token(const string_view &str, const string_view &sep, const size_t at, const string_view &def); string_view token(const string_view &str, const string_view &sep, const size_t at, const string_view &def) noexcept;
string_view token_last(const string_view &str, const char sep); string_view token_last(const string_view &str, const char sep);
string_view token_last(const string_view &str, const string_view &sep); string_view token_last(const string_view &str, const string_view &sep);
@ -99,11 +99,11 @@ namespace ircd
string_view token_first(const string_view &str, const char sep); string_view token_first(const string_view &str, const char sep);
string_view token_first(const string_view &str, const string_view &sep); string_view token_first(const string_view &str, const string_view &sep);
string_view tokens_after(const string_view &str, const char sep, const ssize_t at = 0); string_view tokens_after(const string_view &str, const char sep, const ssize_t at = 0) noexcept;
string_view tokens_after(const string_view &str, const string_view &sep, const ssize_t at = 0); string_view tokens_after(const string_view &str, const string_view &sep, const ssize_t at = 0) noexcept;
string_view tokens_before(const string_view &str, const char sep, const size_t at = 0); string_view tokens_before(const string_view &str, const char sep, const size_t at = 0) noexcept;
string_view tokens_before(const string_view &str, const string_view &sep, const size_t at = 0); string_view tokens_before(const string_view &str, const string_view &sep, const size_t at = 0) noexcept;
} }
template<size_t N, template<size_t N,

View file

@ -204,7 +204,7 @@ const
size_t j{i}; size_t j{i};
string_view ret; string_view ret;
for_each_posarg([&ret, &j] for_each_posarg([&ret, &j]
(const string_view &token) (const string_view &token) noexcept
{ {
if(j-- == 0) if(j-- == 0)
{ {
@ -225,7 +225,7 @@ const
{ {
string_view ret; string_view ret;
for_each_pararg([&ret, &arg] for_each_pararg([&ret, &arg]
(const string_view &token) (const string_view &token) noexcept
{ {
if(startswith(token, arg)) if(startswith(token, arg))
{ {
@ -246,7 +246,7 @@ const
{ {
if(prefix && startswith(arg, prefix)) if(prefix && startswith(arg, prefix))
return !for_each_pararg([&arg] return !for_each_pararg([&arg]
(const string_view &token) (const string_view &token) noexcept
{ {
return !startswith(token, arg); return !startswith(token, arg);
}); });
@ -259,7 +259,8 @@ ircd::util::params::count()
const const
{ {
size_t ret{0}; size_t ret{0};
for_each_posarg([&ret](const string_view &) for_each_posarg([&ret]
(const string_view &) noexcept
{ {
++ret; ++ret;
return true; return true;
@ -273,7 +274,8 @@ ircd::util::params::count_pararg()
const const
{ {
size_t ret{0}; size_t ret{0};
for_each_pararg([&ret](const string_view &) for_each_pararg([&ret]
(const string_view &) noexcept
{ {
++ret; ++ret;
return true; return true;

View file

@ -2486,7 +2486,8 @@ ircd::cl::wait_event_callback(work &work,
}; };
// Completion condition closure to be satisfied. // Completion condition closure to be satisfied.
const auto condition{[&c, &desired]() -> bool const auto condition{[&c, &desired]
() noexcept -> bool
{ {
return !c.event || c.status <= desired; return !c.event || c.status <= desired;
}}; }};

View file

@ -184,7 +184,7 @@ ircd::client::wait_all()
static const auto is_empty static const auto is_empty
{ {
[] { return client::map.empty(); } []() noexcept { return client::map.empty(); }
}; };
while(!dock.wait_for(seconds(3), is_empty)) while(!dock.wait_for(seconds(3), is_empty))

View file

@ -106,6 +106,7 @@ ircd::ctx::ole::offload::offload(const opts &opts,
// synchronization we need to hit the latch from this thread. // synchronization we need to hit the latch from this thread.
assert(context); assert(context);
signal(*context, [&latch] signal(*context, [&latch]
() noexcept
{ {
assert(!latch.is_ready()); assert(!latch.is_ready());
latch.count_down(); latch.count_down();

View file

@ -579,7 +579,7 @@ noexcept
queue.size(), queue.size(),
}; };
dock.wait_for(seconds(5), [this] dock.wait_for(seconds(5), [this]() noexcept
{ {
return queue.empty(); return queue.empty();
}); });
@ -640,7 +640,7 @@ size_t
ircd::db::prefetcher::cancel(column &c) ircd::db::prefetcher::cancel(column &c)
{ {
return cancel([&c] return cancel([&c]
(const auto &request) (const auto &request) noexcept
{ {
return request.cid == id(c); return request.cid == id(c);
}); });
@ -650,7 +650,7 @@ size_t
ircd::db::prefetcher::cancel(database &d) ircd::db::prefetcher::cancel(database &d)
{ {
return cancel([&d] return cancel([&d]
(const auto &request) (const auto &request) noexcept
{ {
return request.d == std::addressof(d); return request.d == std::addressof(d);
}); });
@ -693,7 +693,7 @@ try
{ {
while(1) while(1)
{ {
dock.wait([this] dock.wait([this]() noexcept
{ {
if(queue.empty()) if(queue.empty())
return false; return false;
@ -893,7 +893,7 @@ ircd::db::prefetcher::wait_pending()
fetched_counter + request_workers fetched_counter + request_workers
}; };
dock.wait([this, &fetched_target] dock.wait([this, &fetched_target]() noexcept
{ {
return this->ticker->fetched >= fetched_target; return this->ticker->fetched >= fetched_target;
}); });
@ -1415,7 +1415,7 @@ ircd::db::txn::has(const op &op,
const const
{ {
return !for_each(*this, delta_closure_bool{[&op, &col] return !for_each(*this, delta_closure_bool{[&op, &col]
(const auto &delta) (const auto &delta) noexcept
{ {
return std::get<delta::OP>(delta) != op && return std::get<delta::OP>(delta) != op &&
std::get<delta::COL>(delta) != col; std::get<delta::COL>(delta) != col;
@ -1463,7 +1463,7 @@ ircd::db::txn::has(const op &op,
const const
{ {
return !for_each(*this, delta_closure_bool{[&op, &col, &key] return !for_each(*this, delta_closure_bool{[&op, &col, &key]
(const auto &delta) (const auto &delta) noexcept
{ {
return std::get<delta::OP>(delta) != op && return std::get<delta::OP>(delta) != op &&
std::get<delta::COL>(delta) != col && std::get<delta::COL>(delta) != col &&
@ -3009,7 +3009,7 @@ ircd::db::bytes_value(column &column,
{ {
size_t ret{0}; size_t ret{0};
column(key, std::nothrow, gopts, [&ret] column(key, std::nothrow, gopts, [&ret]
(const string_view &value) (const string_view &value) noexcept
{ {
ret = value.size(); ret = value.size();
}); });
@ -4057,7 +4057,7 @@ ircd::db::count(const rocksdb::Cache &cache)
{ {
size_t ret(0); size_t ret(0);
for_each(cache, [&ret] for_each(cache, [&ret]
(const const_buffer &) (const const_buffer &) noexcept
{ {
++ret; ++ret;
}); });

View file

@ -297,7 +297,7 @@ ircd::db::database::mergeop final
bool Merge(const rocksdb::Slice &, const rocksdb::Slice *, const rocksdb::Slice &, std::string *, rocksdb::Logger *) const noexcept override; bool Merge(const rocksdb::Slice &, const rocksdb::Slice *, const rocksdb::Slice &, std::string *, rocksdb::Logger *) const noexcept override;
const char *Name() const noexcept override; const char *Name() const noexcept override;
mergeop(database *const &d, merge_closure merger = nullptr); mergeop(database *const &d, merge_closure merger = nullptr) noexcept;
~mergeop() noexcept; ~mergeop() noexcept;
}; };
@ -506,7 +506,7 @@ ircd::db::database::logger final
rocksdb::Status Close() noexcept override; rocksdb::Status Close() noexcept override;
logger(database *const &d); logger(database *const &d) noexcept;
~logger() noexcept override; ~logger() noexcept override;
}; };

View file

@ -2144,6 +2144,7 @@ noexcept
// //
ircd::db::database::logger::logger(database *const &d) ircd::db::database::logger::logger(database *const &d)
noexcept
:rocksdb::Logger{} :rocksdb::Logger{}
,d{d} ,d{d}
{ {
@ -2248,6 +2249,7 @@ noexcept
ircd::db::database::mergeop::mergeop(database *const &d, ircd::db::database::mergeop::mergeop(database *const &d,
merge_closure merger) merge_closure merger)
noexcept
:d{d} :d{d}
,merger ,merger
{ {

View file

@ -84,7 +84,7 @@ ircd::exec::~exec()
noexcept try noexcept try
{ {
join(SIGKILL); join(SIGKILL);
dock.wait([this] dock.wait([this]() noexcept
{ {
return this->pid <= 0; return this->pid <= 0;
}); });
@ -150,7 +150,7 @@ try
}; };
//child->wait(); //child->wait();
dock.wait([this] dock.wait([this]() noexcept
{ {
return this->pid <= 0; return this->pid <= 0;
}); });

View file

@ -648,7 +648,7 @@ ircd::fs::aio::request::queued()
const const
{ {
return !for_each_queued([this] return !for_each_queued([this]
(const auto &request) (const auto &request) noexcept
{ {
return &request != this; // true to continue and return true return &request != this; // true to continue and return true
}); });
@ -853,7 +853,7 @@ ircd::fs::aio::system::wait()
log, "Waiting for AIO context %p", this log, "Waiting for AIO context %p", this
}; };
dock.wait([this] dock.wait([this]() noexcept
{ {
return ecount == uint64_t(-1); return ecount == uint64_t(-1);
}); });

View file

@ -478,7 +478,7 @@ ircd::fs::iou::system::wait()
log, "Waiting for iou context %p", this log, "Waiting for iou context %p", this
}; };
dock.wait([this] dock.wait([this]() noexcept
{ {
return ev_count == uint64_t(-1); return ev_count == uint64_t(-1);
}); });

View file

@ -914,7 +914,7 @@ ircd::gpt::samp::tokenize()
} }
ircd::tokens(str, delim, [this, &count, &p, &phrases] ircd::tokens(str, delim, [this, &count, &p, &phrases]
(const string_view &phrase) -> bool (const string_view &phrase) noexcept -> bool
{ {
assert(!empty(phrase)); assert(!empty(phrase));
const vector_view<u16> buf const vector_view<u16> buf

View file

@ -590,7 +590,7 @@ ircd::ios::dispatch::dispatch(descriptor &descriptor,
yield_t) yield_t)
:dispatch :dispatch
{ {
descriptor, defer, yield, [] descriptor, defer, yield, []() noexcept
{ {
} }
} }

View file

@ -258,7 +258,7 @@ noexcept
}; };
call_ready = false; call_ready = false;
call_dock.wait([] call_dock.wait([]() noexcept
{ {
return !call_mutex.locked(); return !call_mutex.locked();
}); });

View file

@ -172,7 +172,8 @@ size_t
ircd::mods::ldso::count() ircd::mods::ldso::count()
{ {
size_t ret(0); size_t ret(0);
for_each([&ret](const struct link_map &) for_each([&ret]
(const struct link_map &) noexcept
{ {
++ret; ++ret;
return true; return true;

View file

@ -643,7 +643,7 @@ const ircd::net::close_opts_default
/// of close(). This callback does nothing. /// of close(). This callback does nothing.
ircd::net::close_callback ircd::net::close_callback
const ircd::net::close_ignore{[] const ircd::net::close_ignore{[]
(std::exception_ptr eptr) (std::exception_ptr eptr) noexcept
{ {
return; return;
}}; }};
@ -1550,7 +1550,7 @@ try
{ {
assert(!fini); assert(!fini);
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->cancel(); this->cancel();
}}; }};
@ -1742,7 +1742,7 @@ try
assert(!fini); assert(!fini);
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->cancel(); this->cancel();
}}; }};
@ -1781,7 +1781,7 @@ try
{ {
assert(!fini); assert(!fini);
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->cancel(); this->cancel();
}}; }};
@ -1887,7 +1887,7 @@ try
assert(!fini); assert(!fini);
assert(!blocking(*this)); assert(!blocking(*this));
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->cancel(); this->cancel();
}}; }};
@ -1921,7 +1921,7 @@ try
assert(!fini); assert(!fini);
assert(!blocking(*this)); assert(!blocking(*this));
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->cancel(); this->cancel();
}}; }};

View file

@ -15,7 +15,8 @@ bool
ircd::net::addrs::has_usable_ipv6_interface() ircd::net::addrs::has_usable_ipv6_interface()
try try
{ {
return !for_each([](const addr &a) return !for_each([]
(const addr &a) noexcept
{ {
if(a.family != AF_INET6) if(a.family != AF_INET6)
return true; return true;

View file

@ -126,7 +126,7 @@ ircd::net::dns::resolver::~resolver()
noexcept noexcept
{ {
const ctx::uninterruptible::nothrow ui; const ctx::uninterruptible::nothrow ui;
done.wait([this] done.wait([this]() noexcept
{ {
if(!tags.empty()) if(!tags.empty())
log::warning log::warning
@ -231,7 +231,7 @@ ircd::net::dns::resolver::sendq_worker()
{ {
while(1) while(1)
{ {
dock.wait([this] dock.wait([this]() noexcept
{ {
assert(sendq.empty() || !tags.empty()); assert(sendq.empty() || !tags.empty());
return !sendq.empty() && !server.empty(); return !sendq.empty() && !server.empty();
@ -289,7 +289,7 @@ ircd::net::dns::resolver::timeout_worker()
// Dock here until somebody submits a request into the tag map. Also // Dock here until somebody submits a request into the tag map. Also
// wait until recv_idle is asserted which indicates the UDP queue has // wait until recv_idle is asserted which indicates the UDP queue has
// been exhausted. // been exhausted.
dock.wait([this] dock.wait([this]() noexcept
{ {
return !tags.empty() && recv_idle; return !tags.empty() && recv_idle;
}); });

View file

@ -439,7 +439,7 @@ noexcept try
if(!ctx::current) if(!ctx::current)
return; return;
joining.wait([this] joining.wait([this]() noexcept
{ {
return !accepting && handshaking.empty(); return !accepting && handshaking.empty();
}); });

View file

@ -153,7 +153,7 @@ ircd::net::acceptor_udp::join()
noexcept try noexcept try
{ {
interrupt(); interrupt();
joining.wait([this] joining.wait([this]() noexcept
{ {
return waiting == 0; return waiting == 0;
}); });
@ -194,7 +194,7 @@ ircd::net::acceptor_udp::operator()(datagram &datagram)
}; };
const auto interruption{[this] const auto interruption{[this]
(ctx::ctx *const &) (ctx::ctx *const &) noexcept
{ {
this->interrupt(); this->interrupt();
}}; }};

View file

@ -256,7 +256,8 @@ const
char allow_methods_buf[48]; char allow_methods_buf[48];
const string_view &allow_methods const string_view &allow_methods
{ {
method_list(allow_methods_buf, [&](const method &method) method_list(allow_methods_buf, [&]
(const method &method) noexcept
{ {
return true; return true;
}) })
@ -281,7 +282,7 @@ ircd::resource::method_list(const mutable_buffer &buf)
const const
{ {
return method_list(buf, [] return method_list(buf, []
(const method &) (const method &) noexcept
{ {
return true; return true;
}); });
@ -474,7 +475,7 @@ noexcept
}; };
const ctx::uninterruptible::nothrow ui; const ctx::uninterruptible::nothrow ui;
idle_dock.wait([this] idle_dock.wait([this]() noexcept
{ {
return !stats || stats->pending == 0; return !stats || stats->pending == 0;
}); });

View file

@ -637,7 +637,8 @@ try
return {}; return {};
parse::buffer pb{request.in.head}; parse::buffer pb{request.in.head};
parse::capstan pc{pb, [](char *&read, char *stop) parse::capstan pc{pb, []
(char *&read, char *stop) noexcept
{ {
read = stop; read = stop;
}}; }};
@ -670,7 +671,8 @@ try
return {}; return {};
parse::buffer pb{request.out.head}; parse::buffer pb{request.out.head};
parse::capstan pc{pb, [](char *&read, char *stop) parse::capstan pc{pb, []
(char *&read, char *stop) noexcept
{ {
read = stop; read = stop;
}}; }};
@ -759,7 +761,8 @@ ircd::server::peer::only_ipv6
{ {
{ "name", "ircd.server.peer.ipv6.only" }, { "name", "ircd.server.peer.ipv6.only" },
{ "default", net::sock_opts::IGN }, { "default", net::sock_opts::IGN },
}, [] },
[]() noexcept
{ {
sock_opts.v6only = ssize_t(only_ipv6); sock_opts.v6only = ssize_t(only_ipv6);
} }
@ -771,7 +774,8 @@ ircd::server::peer::sock_nodelay
{ {
{ "name", "ircd.server.peer.sock.nodelay" }, { "name", "ircd.server.peer.sock.nodelay" },
{ "default", true }, { "default", true },
}, [] },
[]() noexcept
{ {
sock_opts.nodelay = ssize_t(sock_nodelay); sock_opts.nodelay = ssize_t(sock_nodelay);
} }
@ -783,7 +787,8 @@ ircd::server::peer::sock_read_bufsz
{ {
{ "name", "ircd.server.peer.sock.read.bufsz" }, { "name", "ircd.server.peer.sock.read.bufsz" },
{ "default", net::sock_opts::IGN }, { "default", net::sock_opts::IGN },
}, [] },
[]() noexcept
{ {
sock_opts.read_bufsz = ssize_t(sock_read_bufsz); sock_opts.read_bufsz = ssize_t(sock_read_bufsz);
} }
@ -795,7 +800,8 @@ ircd::server::peer::sock_read_lowat
{ {
{ "name", "ircd.server.peer.sock.read.lowat" }, { "name", "ircd.server.peer.sock.read.lowat" },
{ "default", net::sock_opts::IGN }, { "default", net::sock_opts::IGN },
}, [] },
[]() noexcept
{ {
sock_opts.read_lowat = ssize_t(sock_read_lowat); sock_opts.read_lowat = ssize_t(sock_read_lowat);
} }
@ -807,7 +813,8 @@ ircd::server::peer::sock_write_bufsz
{ {
{ "name", "ircd.server.peer.sock.write.bufsz" }, { "name", "ircd.server.peer.sock.write.bufsz" },
{ "default", net::sock_opts::IGN }, { "default", net::sock_opts::IGN },
}, [] },
[]() noexcept
{ {
sock_opts.write_bufsz = ssize_t(sock_write_bufsz); sock_opts.write_bufsz = ssize_t(sock_write_bufsz);
} }
@ -819,7 +826,8 @@ ircd::server::peer::sock_write_lowat
{ {
{ "name", "ircd.server.peer.sock.write.lowat" }, { "name", "ircd.server.peer.sock.write.lowat" },
{ "default", net::sock_opts::IGN }, { "default", net::sock_opts::IGN },
}, [] },
[]() noexcept
{ {
sock_opts.write_lowat = ssize_t(sock_write_lowat); sock_opts.write_lowat = ssize_t(sock_write_lowat);
} }

View file

@ -52,6 +52,7 @@ ircd::string_view
ircd::tokens_before(const string_view &str, ircd::tokens_before(const string_view &str,
const char sep, const char sep,
const size_t i) const size_t i)
noexcept
{ {
assert(sep != '\0'); assert(sep != '\0');
const char _sep[2] const char _sep[2]
@ -66,6 +67,7 @@ ircd::string_view
ircd::tokens_before(const string_view &str, ircd::tokens_before(const string_view &str,
const string_view &sep, const string_view &sep,
const size_t i) const size_t i)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -92,6 +94,7 @@ ircd::string_view
ircd::tokens_after(const string_view &str, ircd::tokens_after(const string_view &str,
const char sep, const char sep,
const ssize_t i) const ssize_t i)
noexcept
{ {
assert(sep != '\0'); assert(sep != '\0');
const char _sep[2] const char _sep[2]
@ -106,6 +109,7 @@ ircd::string_view
ircd::tokens_after(const string_view &str, ircd::tokens_after(const string_view &str,
const string_view &sep, const string_view &sep,
const ssize_t i) const ssize_t i)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -191,7 +195,7 @@ ircd::token(const string_view &str,
const char sep, const char sep,
const size_t i, const size_t i,
const string_view &def) const string_view &def)
try noexcept try
{ {
return token(str, sep, i); return token(str, sep, i);
} }
@ -205,7 +209,7 @@ ircd::token(const string_view &str,
const string_view &sep, const string_view &sep,
const size_t i, const size_t i,
const string_view &def) const string_view &def)
try noexcept try
{ {
return token(str, sep, i); return token(str, sep, i);
} }
@ -254,6 +258,7 @@ bool
ircd::token_exists(const string_view &str, ircd::token_exists(const string_view &str,
const char sep, const char sep,
const string_view &tok) const string_view &tok)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -272,6 +277,7 @@ bool
ircd::token_exists(const string_view &str, ircd::token_exists(const string_view &str,
const string_view &sep, const string_view &sep,
const string_view &tok) const string_view &tok)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -289,6 +295,7 @@ ircd::token_exists(const string_view &str,
size_t size_t
ircd::token_count(const string_view &str, ircd::token_count(const string_view &str,
const char sep) const char sep)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -306,6 +313,7 @@ ircd::token_count(const string_view &str,
size_t size_t
ircd::token_count(const string_view &str, ircd::token_count(const string_view &str,
const string_view &sep) const string_view &sep)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -325,6 +333,7 @@ ircd::tokens(const string_view &str,
const char sep_, const char sep_,
const mutable_buffer &buf, const mutable_buffer &buf,
const token_view &closure) const token_view &closure)
noexcept
{ {
assert(sep_ != '\0'); assert(sep_ != '\0');
const char _sep[2] const char _sep[2]
@ -345,6 +354,7 @@ ircd::tokens(const string_view &str,
const string_view &sep, const string_view &sep,
const mutable_buffer &buf, const mutable_buffer &buf,
const token_view &closure) const token_view &closure)
noexcept
{ {
char *ptr(data(buf)); char *ptr(data(buf));
char *const stop(data(buf) + size(buf)); char *const stop(data(buf) + size(buf));
@ -369,6 +379,7 @@ ircd::tokens(const string_view &str,
const char sep, const char sep,
const size_t limit, const size_t limit,
const token_view &closure) const token_view &closure)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -393,6 +404,7 @@ ircd::tokens(const string_view &str,
const string_view &sep, const string_view &sep,
const size_t limit, const size_t limit,
const token_view &closure) const token_view &closure)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -416,6 +428,7 @@ bool
ircd::tokens(const string_view &str, ircd::tokens(const string_view &str,
const char sep, const char sep,
const token_view &closure) const token_view &closure)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;
@ -438,6 +451,7 @@ bool
ircd::tokens(const string_view &str, ircd::tokens(const string_view &str,
const string_view &sep, const string_view &sep,
const token_view &closure) const token_view &closure)
noexcept
{ {
using type = string_view; using type = string_view;
using iter = typename type::const_iterator; using iter = typename type::const_iterator;

View file

@ -81,12 +81,12 @@ const ircd::db::prefix_transform
ircd::m::dbs::desc::event_refs__pfx ircd::m::dbs::desc::event_refs__pfx
{ {
"_event_refs", "_event_refs",
[](const string_view &key) [](const string_view &key) noexcept
{ {
return size(key) >= sizeof(event::idx) * 2; return size(key) >= sizeof(event::idx) * 2;
}, },
[](const string_view &key) [](const string_view &key) noexcept
{ {
assert(size(key) >= sizeof(event::idx)); assert(size(key) >= sizeof(event::idx));
return string_view return string_view

View file

@ -83,7 +83,7 @@ const
{ {
size_t ret(0); size_t ret(0);
for_each([&ret] for_each([&ret]
(const auto &, const auto &) (const auto &, const auto &) noexcept
{ {
++ret; ++ret;
return true; return true;
@ -97,7 +97,7 @@ ircd::m::event::horizon::has(const event::idx &event_idx)
const const
{ {
return !for_each([&event_idx] return !for_each([&event_idx]
(const auto &, const auto &_event_idx) (const auto &, const auto &_event_idx) noexcept
{ {
// false to break; true to continue. // false to break; true to continue.
return _event_idx == event_idx? false : true; return _event_idx == event_idx? false : true;

View file

@ -117,7 +117,7 @@ ircd::m::fed::well_known::worker_context
decltype(ircd::m::fed::well_known::handle_quit) decltype(ircd::m::fed::well_known::handle_quit)
ircd::m::fed::well_known::handle_quit ircd::m::fed::well_known::handle_quit
{ {
run::level::QUIT, [] run::level::QUIT, []() noexcept
{ {
worker_dock.notify_all(); worker_dock.notify_all();
} }
@ -316,7 +316,7 @@ try
run::barrier<ctx::interrupted>{}; run::barrier<ctx::interrupted>{};
while(!request::list.empty() || run::level == run::level::RUN) while(!request::list.empty() || run::level == run::level::RUN)
{ {
worker_dock.wait([] worker_dock.wait([]() noexcept
{ {
return !request::list.empty() || run::level != run::level::RUN; return !request::list.empty() || run::level != run::level::RUN;
}); });

View file

@ -88,7 +88,7 @@ bool
ircd::m::myself(const m::user::id &user_id) ircd::m::myself(const m::user::id &user_id)
{ {
return !for_each([&user_id] return !for_each([&user_id]
(const auto &homeserver) (const auto &homeserver) noexcept
{ {
return homeserver.self != user_id; return homeserver.self != user_id;
}); });
@ -581,7 +581,8 @@ const
bool dup{false}, exists{false}; bool dup{false}, exists{false};
if(!force) if(!force)
get(key, [&exists, &dup, &val](const string_view &val_) get(key, [&exists, &dup, &val]
(const string_view &val_) noexcept
{ {
exists = true; exists = true;
dup = val == val_; dup = val == val_;

View file

@ -290,7 +290,7 @@ try
// All rooms have been submitted to the pool but the pool workers might // All rooms have been submitted to the pool but the pool workers might
// still be busy. If we unwind now the pool's dtor will kill the workers // still be busy. If we unwind now the pool's dtor will kill the workers
// so we synchronize their completion here. // so we synchronize their completion here.
dock.wait([] dock.wait([]() noexcept
{ {
return complete >= count; return complete >= count;
}); });

View file

@ -157,7 +157,7 @@ ircd::m::node::mitsein::has(const m::node &other,
const const
{ {
return !for_each(other, membership, [] return !for_each(other, membership, []
(const auto &, const auto &) (const auto &, const auto &) noexcept
{ {
return false; return false;
}); });
@ -170,7 +170,7 @@ const
{ {
size_t ret(0); size_t ret(0);
for_each(other, membership, [&ret] for_each(other, membership, [&ret]
(const auto &, const auto &) (const auto &, const auto &) noexcept
{ {
++ret; ++ret;
return true; return true;

View file

@ -791,7 +791,7 @@ ircd::m::contains(const id::room &room_id,
const event::idx &event_idx) const event::idx &event_idx)
{ {
return m::query(event_idx, "room_id", [&room_id] return m::query(event_idx, "room_id", [&room_id]
(const string_view &_room_id) -> bool (const string_view &_room_id) noexcept -> bool
{ {
return _room_id == room_id; return _room_id == room_id;
}); });
@ -1088,7 +1088,7 @@ const
{ {
size_t ret(0); size_t ret(0);
for_each(event::closure_idx_bool{[&ret] for_each(event::closure_idx_bool{[&ret]
(const event::idx &event_idx) (const event::idx &event_idx) noexcept
{ {
++ret; ++ret;
return true; return true;
@ -1103,7 +1103,7 @@ const
{ {
size_t ret(0); size_t ret(0);
for_each(type, event::closure_idx_bool{[&ret] for_each(type, event::closure_idx_bool{[&ret]
(const event::idx &event_idx) (const event::idx &event_idx) noexcept
{ {
++ret; ++ret;
return true; return true;
@ -1122,7 +1122,7 @@ const
(const event::idx &event_idx) (const event::idx &event_idx)
{ {
ret += query(std::nothrow, event_idx, "state_key", [&state_key] ret += query(std::nothrow, event_idx, "state_key", [&state_key]
(const string_view &_state_key) -> bool (const string_view &_state_key) noexcept -> bool
{ {
return state_key == _state_key; return state_key == _state_key;
}); });
@ -1201,7 +1201,7 @@ const
{ {
event::idx ret{0}; event::idx ret{0};
for_each(type, event::closure_idx_bool{[&ret] for_each(type, event::closure_idx_bool{[&ret]
(const event::idx &event_idx) (const event::idx &event_idx) noexcept
{ {
ret = event_idx; ret = event_idx;
return false; return false;

View file

@ -105,7 +105,7 @@ try
{ {
for(;; ctx::sleep(milliseconds(timeout_int))) for(;; ctx::sleep(milliseconds(timeout_int)))
{ {
dock.wait([] dock.wait([]() noexcept
{ {
return !typists.empty(); return !typists.empty();
}); });

View file

@ -45,7 +45,7 @@ const
const auto match const auto match
{ {
[this](const string_view &sender) [this](const string_view &sender) noexcept
{ {
return sender == this->user.user_id; return sender == this->user.user_id;
} }
@ -90,7 +90,7 @@ const
}; };
return event_idx && m::query(std::nothrow, event_idx, "sender", [this] return event_idx && m::query(std::nothrow, event_idx, "sender", [this]
(const string_view &sender) (const string_view &sender) noexcept
{ {
return sender == this->user.user_id; return sender == this->user.user_id;
}); });
@ -120,7 +120,7 @@ const
{ {
const auto match const auto match
{ {
[this](const string_view &sender) [this](const string_view &sender) noexcept
{ {
return sender == this->user.user_id; return sender == this->user.user_id;
} }

View file

@ -66,7 +66,7 @@ noexcept
sequence::pending, sequence::pending,
}; };
vm::dock.wait([] vm::dock.wait([]() noexcept
{ {
return !eval::executing && !eval::injecting; return !eval::executing && !eval::injecting;
}); });
@ -81,7 +81,7 @@ noexcept
sequence::uncommitted, sequence::uncommitted,
}; };
sequence::dock.wait([] sequence::dock.wait([]() noexcept
{ {
return !sequence::pending; return !sequence::pending;
}); });

View file

@ -153,7 +153,7 @@ noexcept
{ {
eval *ret {nullptr}; eval *ret {nullptr};
eval::for_each(&c, [&ret, &a] eval::for_each(&c, [&ret, &a]
(eval &eval) (eval &eval) noexcept
{ {
const bool cond const bool cond
{ {
@ -377,7 +377,8 @@ ircd::m::vm::eval *
ircd::m::vm::eval::find(const event::id &event_id) ircd::m::vm::eval::find(const event::id &event_id)
{ {
eval *ret{nullptr}; eval *ret{nullptr};
for_each([&event_id, &ret](eval &e) for_each([&event_id, &ret]
(eval &e) noexcept
{ {
if(e.event_) if(e.event_)
if(e.event_->event_id == event_id) if(e.event_->event_id == event_id)
@ -393,7 +394,8 @@ size_t
ircd::m::vm::eval::count(const event::id &event_id) ircd::m::vm::eval::count(const event::id &event_id)
{ {
size_t ret(0); size_t ret(0);
for_each([&event_id, &ret](eval &e) for_each([&event_id, &ret]
(eval &e) noexcept
{ {
if(e.event_) if(e.event_)
if(e.event_->event_id == event_id) if(e.event_->event_id == event_id)
@ -410,7 +412,7 @@ ircd::m::vm::eval::find_pdu(const event::id &event_id)
{ {
const m::event *ret{nullptr}; const m::event *ret{nullptr};
for_each_pdu([&ret, &event_id] for_each_pdu([&ret, &event_id]
(const m::event &event) (const m::event &event) noexcept
{ {
if(event.event_id != event_id) if(event.event_id != event_id)
return true; return true;

View file

@ -250,7 +250,7 @@ ircd::m::vm::inject(eval &eval,
{ {
event, opts.prop_mask.has("depth") && !event.has("depth"), event, opts.prop_mask.has("depth") && !event.has("depth"),
{ {
"depth", [&depth] "depth", [&depth]() noexcept
{ {
// When the depth value is undefined_number it was intended // When the depth value is undefined_number it was intended
// that no depth should appear in the event JSON so that value // that no depth should appear in the event JSON so that value

View file

@ -194,7 +194,7 @@ get__events(client &client,
) )
}; };
dock.wait_for(timeout, [&event, &eid] dock.wait_for(timeout, [&event, &eid]() noexcept
{ {
return !empty(event) && !empty(eid); return !empty(event) && !empty(eid);
}); });

View file

@ -104,7 +104,7 @@ put__profile(client &client,
bool modified{true}; bool modified{true};
profile.get(std::nothrow, param, [&value, &modified] profile.get(std::nothrow, param, [&value, &modified]
(const string_view &param, const string_view &existing) (const string_view &param, const string_view &existing) noexcept
{ {
modified = existing != value; modified = existing != value;
}); });
@ -202,7 +202,7 @@ get__profile(client &client,
const bool empty const bool empty
{ {
profile.for_each([] profile.for_each([]
(const string_view &, const string_view &) (const string_view &, const string_view &) noexcept
{ {
return false; return false;
}) })

View file

@ -279,7 +279,7 @@ check_transaction_id(const m::user::id &user_id,
{ {
static const auto type_match static const auto type_match
{ {
[](const string_view &type) [](const string_view &type) noexcept
{ {
return type == "ircd.client.txnid"; return type == "ircd.client.txnid";
} }

View file

@ -43,7 +43,9 @@ namespace ircd::m::sync::longpoll
ircd::mapi::header ircd::mapi::header
IRCD_MODULE IRCD_MODULE
{ {
"Client 6.2.1 :Sync", nullptr, [] "Client 6.2.1 :Sync",
nullptr,
[]() noexcept
{ {
ircd::m::sync::longpoll::fini(); ircd::m::sync::longpoll::fini();
} }
@ -635,7 +637,7 @@ catch(const std::exception &e)
int int
ircd::m::sync::longpoll::poll(data &data) ircd::m::sync::longpoll::poll(data &data)
{ {
const auto ready{[&data] const auto ready{[&data]() noexcept
{ {
assert(data.range.second <= m::vm::sequence::retired + 1); assert(data.range.second <= m::vm::sequence::retired + 1);
return data.range.second <= m::vm::sequence::retired; return data.range.second <= m::vm::sequence::retired;

View file

@ -574,7 +574,7 @@ console_cmd__restart(opt &out, const string_view &line)
size_t swargs(0), posargs(0); size_t swargs(0), posargs(0);
ircd::tokens(line, ' ', [&swargs, &posargs] ircd::tokens(line, ' ', [&swargs, &posargs]
(const auto &token) (const string_view &token)
{ {
swargs += startswith(token, '-'); swargs += startswith(token, '-');
posargs += !startswith(token, '-'); posargs += !startswith(token, '-');
@ -1871,6 +1871,7 @@ console_cmd__ios__depth(opt &out, const string_view &line)
{ {
started = ios::epoch(); started = ios::epoch();
ios::dispatch(dispatch_desc, ios::yield, [&executed] ios::dispatch(dispatch_desc, ios::yield, [&executed]
() noexcept
{ {
executed = ios::epoch(); executed = ios::epoch();
}); });
@ -1888,6 +1889,7 @@ console_cmd__ios__depth(opt &out, const string_view &line)
{ {
started = ios::epoch(); started = ios::epoch();
ios::dispatch(post_desc, ios::defer, ios::yield, [&executed] ios::dispatch(post_desc, ios::defer, ios::yield, [&executed]
() noexcept
{ {
executed = ios::epoch(); executed = ios::epoch();
}); });
@ -1905,6 +1907,7 @@ console_cmd__ios__depth(opt &out, const string_view &line)
{ {
started = ios::epoch(); started = ios::epoch();
ios::dispatch(defer_desc, ios::defer, ios::yield, [&executed] ios::dispatch(defer_desc, ios::defer, ios::yield, [&executed]
() noexcept
{ {
executed = ios::epoch(); executed = ios::epoch();
}); });
@ -1980,6 +1983,7 @@ console_cmd__ios__latency(opt &out, const string_view &line)
asm volatile ("lfence"); asm volatile ("lfence");
ios::dispatch(dispatch_desc, ios::yield, [&executed] ios::dispatch(dispatch_desc, ios::yield, [&executed]
() noexcept
{ {
__sync_synchronize(); __sync_synchronize();
asm volatile ("lfence"); asm volatile ("lfence");
@ -2010,6 +2014,7 @@ console_cmd__ios__latency(opt &out, const string_view &line)
asm volatile ("lfence"); asm volatile ("lfence");
ios::dispatch(post_desc, ios::defer, ios::yield, [&executed] ios::dispatch(post_desc, ios::defer, ios::yield, [&executed]
() noexcept
{ {
__sync_synchronize(); __sync_synchronize();
asm volatile ("lfence"); asm volatile ("lfence");
@ -2040,6 +2045,7 @@ console_cmd__ios__latency(opt &out, const string_view &line)
asm volatile ("lfence"); asm volatile ("lfence");
ios::dispatch(defer_desc, ios::defer, ios::yield, [&executed] ios::dispatch(defer_desc, ios::defer, ios::yield, [&executed]
() noexcept
{ {
__sync_synchronize(); __sync_synchronize();
asm volatile ("lfence"); asm volatile ("lfence");
@ -4776,7 +4782,7 @@ console_cmd__db__sst__scan__count(opt &out, const string_view &line)
db::database::sst::scan db::database::sst::scan
{ {
database, path, [&out, &i] database, path, [&out, &i]
(const auto &key, const auto &val) (const auto &key, const auto &val) noexcept
{ {
++i; ++i;
return true; return true;
@ -6359,7 +6365,7 @@ console_cmd__net__host(opt &out, const string_view &line)
net::dns::resolve(hostport, opts, cbarr); net::dns::resolve(hostport, opts, cbarr);
const ctx::uninterruptible ui; const ctx::uninterruptible ui;
dock.wait([&done] dock.wait([&done]() noexcept
{ {
return done; return done;
}); });
@ -7787,7 +7793,7 @@ console_cmd__events__type__counts(opt &out, const string_view &line)
{ {
size_t i(0); size_t i(0);
m::events::type::for_each_in(type, [&i] m::events::type::for_each_in(type, [&i]
(const string_view &type, const m::event::idx &event_idx) (const string_view &type, const m::event::idx &event_idx) noexcept
{ {
++i; ++i;
return true; return true;
@ -10052,7 +10058,7 @@ console_cmd__room__members__origin(opt &out, const string_view &line)
const bool same_origin const bool same_origin
{ {
m::query(std::nothrow, event_idx, "origin", [&origin] m::query(std::nothrow, event_idx, "origin", [&origin]
(const auto &_origin) (const auto &_origin) noexcept
{ {
return _origin == origin; return _origin == origin;
}) })
@ -11572,6 +11578,7 @@ console_cmd__room__type__count(opt &out, const string_view &line)
size_t ret(0); size_t ret(0);
events.for_each([&ret] events.for_each([&ret]
(const string_view &type, const uint64_t &depth, const m::event::idx &event_idx) (const string_view &type, const uint64_t &depth, const m::event::idx &event_idx)
noexcept
{ {
++ret; ++ret;
return true; return true;
@ -12940,7 +12947,8 @@ console_cmd__user__read__count(opt &out, const string_view &line)
size_t count {0}; size_t count {0};
space.for_each("ircd.read", room_id, [&out, &count] space.for_each("ircd.read", room_id, [&out, &count]
(const auto &type, const auto &state_key, const auto &depth, const auto &event_idx) -> bool (const auto &type, const auto &state_key, const auto &depth, const auto &event_idx)
noexcept -> bool
{ {
++count; ++count;
return true; return true;

View file

@ -101,7 +101,7 @@ get__make_join(client &client,
const bool version_mismatch const bool version_mismatch
{ {
request.query.for_each("ver", [&room_version] request.query.for_each("ver", [&room_version]
(const auto &val) (const auto &val) noexcept
{ {
return val.second != room_version; return val.second != room_version;
}) })

View file

@ -224,7 +224,7 @@ handle_put(client &client,
size_t evals{0}; size_t evals{0};
bool txn_in_progress{false}; bool txn_in_progress{false};
m::vm::eval::for_each([&txn_id, &request, &evals, &txn_in_progress] m::vm::eval::for_each([&txn_id, &request, &evals, &txn_in_progress]
(const auto &eval) (const auto &eval) noexcept
{ {
assert(eval.opts); assert(eval.opts);
const bool match_node const bool match_node

View file

@ -180,7 +180,7 @@ send_worker()
{ {
while(1) try while(1) try
{ {
notified_dock.wait([] notified_dock.wait([]() noexcept
{ {
return !notified_queue.empty(); return !notified_queue.empty();
}); });
@ -503,7 +503,7 @@ recv_worker()
{ {
while(1) while(1)
{ {
recv_action.wait([] recv_action.wait([]() noexcept
{ {
return !txns.empty(); return !txns.empty();
}); });

View file

@ -84,7 +84,7 @@ post__user_keys_claim(client &client,
const json::string &algorithm{algorithm_}; const json::string &algorithm{algorithm_};
const json::string &device_id{device_id_}; const json::string &device_id{device_id_};
const auto match{[&device_id] const auto match{[&device_id]
(const string_view &state_key) (const string_view &state_key) noexcept
{ {
return state_key == device_id; return state_key == device_id;
}}; }};

View file

@ -211,7 +211,7 @@ try
auto since {vm::sequence::retired}; do auto since {vm::sequence::retired}; do
{ {
worker_dock.wait([&since] worker_dock.wait([&since]() noexcept
{ {
return since < vm::sequence::retired; return since < vm::sequence::retired;
}); });

View file

@ -566,7 +566,7 @@ command__read(const mutable_buffer &buf,
// return true if the expression is not matched for this room. // return true if the expression is not matched for this room.
const auto without_match{[&match] const auto without_match{[&match]
(const string_view &key, const json::object &object) (const string_view &key, const json::object &object) noexcept
{ {
return !match(key); return !match(key);
}}; }};

View file

@ -241,12 +241,12 @@ _listener_allow
{ {
while(1) while(1)
{ {
client::dock.wait([] client::dock.wait([]() noexcept
{ {
return !client::pool.avail(); return !client::pool.avail();
}); });
client::dock.wait([] client::dock.wait([]() noexcept
{ {
if(!client::pool.avail()) if(!client::pool.avail())
return false; return false;

View file

@ -65,7 +65,7 @@ ircd::net::dns::cache::fini()
waiting.size(), waiting.size(),
}; };
dock.wait([] dock.wait([]() noexcept
{ {
return waiting.empty(); return waiting.empty();
}); });

View file

@ -1419,7 +1419,7 @@ github_handle__status(std::ostream &out,
static const auto type_match static const auto type_match
{ {
[](const string_view &type) [](const string_view &type) noexcept
{ {
return type == "m.room.message"; return type == "m.room.message";
} }
@ -1427,7 +1427,7 @@ github_handle__status(std::ostream &out,
const auto user_match const auto user_match
{ {
[&_webhook_user](const string_view &sender) [&_webhook_user](const string_view &sender) noexcept
{ {
return sender && sender == _webhook_user; return sender && sender == _webhook_user;
} }