Go to the documentation of this file.
15 #ifndef GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_JOIN_H
16 #define GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_JOIN_H
25 #include <type_traits>
28 #include "absl/types/variant.h"
29 #include "absl/utility/utility.h"
37 namespace promise_detail {
42 template <
typename Traits,
typename F>
60 template <
typename Traits,
size_t kRemaining,
typename... Fs>
61 struct Joint :
public Joint<Traits, kRemaining - 1, Fs...> {
63 static constexpr
size_t kIdx =
sizeof...(Fs) - kRemaining;
67 using F =
typename std::tuple_element<
kIdx, std::tuple<Fs...>>
::type;
74 explicit Joint(std::tuple<Fs*...> fs)
100 if (
auto* p = absl::get_if<kPollReadyIdx>(&
r)) {
106 return Traits::OnResult(
122 template <
typename Traits,
typename... Fs>
124 explicit Joint(std::tuple<Fs*...>) {}
127 template <
typename T>
129 template <
typename F>
130 auto Run(
BitSet<
sizeof...(Fs)>*,
F finally) -> decltype(
finally()) {
135 template <
typename Traits,
typename... Fs>
139 static constexpr
size_t N =
sizeof...(Fs);
152 return static_cast<Joint<Traits, sizeof...(Fs) -
I, Fs...
>*>(&
joints_);
159 template <
size_t...
I>
174 assert(other.state_.none());
178 using Result = decltype(Traits::Wrap(std::declval<Tuple>()));
187 return Traits::Wrap(Finish(absl::make_index_sequence<N>()));
198 #endif // GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_JOIN_H
Joint(std::tuple< Fs *... > fs)
absl::string_view get(const Cont &c)
void DestructAll(const T &)
Joint(Joint &&j) noexcept
GPR_NO_UNIQUE_ADDRESS Fsd fused
#define T(upbtypeconst, upbtype, ctype, default_value)
GPR_NO_UNIQUE_ADDRESS BitSet< N > state_
auto Run(Bits *bits, F finally) -> decltype(final ly())
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
TestInstance::Result Result
Fused(PromiseLike< F > &&f)
Tuple Finish(absl::index_sequence< I... >)
OPENSSL_EXPORT ASN1_BIT_STRING * bits
Joint(std::tuple< Fs *... >)
static constexpr size_t kIdx
std::tuple< typename Fused< Traits, Fs >::Result... > Tuple
typename Traits::template ResultType< typename Promise::Result > Result
BasicJoin(BasicJoin &&other) noexcept
void Construct(T *p, Args &&... args)
auto Run(BitSet< sizeof...(Fs)> *, F finally) -> decltype(final ly())
decltype(Traits::Wrap(std::declval< Tuple >())) Result
void DestructAll(const Bits &bits)
GPR_NO_UNIQUE_ADDRESS Joint< Traits, sizeof...(Fs), Fs... > joints_
GPR_NO_UNIQUE_ADDRESS Promise f
Joint< Traits, kRemaining - 1, Fs... > NextJoint
typename std::tuple_element< kIdx, std::tuple< Fs... > >::type F
BasicJoin(const BasicJoin &other)
constexpr T && forward(absl::remove_reference_t< T > &t) noexcept
Joint< Traits, sizeof...(Fs) - I, Fs... > * GetJoint()
static constexpr size_t N
GPR_NO_UNIQUE_ADDRESS Result result
BasicJoin & operator=(const BasicJoin &)=delete
Poll< Result > operator()()
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:36