Go to the documentation of this file.
15 #ifndef GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_SEQ_H
16 #define GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_SEQ_H
24 #include <type_traits>
27 #include "absl/meta/type_traits.h"
28 #include "absl/types/variant.h"
29 #include "absl/utility/utility.h"
38 namespace promise_detail {
42 template <
template <
typename>
class Traits,
typename FPromise,
typename FNext>
54 typename PromiseResultTraits::UnwrappedType, FNext>;
68 template <
template <
typename>
class Traits,
char I,
typename... Fs>
98 typename std::tuple_element<
I + 1, std::tuple<Fs...>>
::type>;
113 template <
template <
typename>
class Traits,
typename... Fs>
136 typename std::tuple_element<1, std::tuple<Fs...>>
::type>;
144 template <
char I,
template <
typename>
class Traits,
char J,
typename... Fs>
151 template <
char I,
template <
typename>
class Traits,
typename... Fs>
158 template <
char I,
template <
typename>
class Traits,
char J,
typename... Fs>
160 SeqState<Traits, J, Fs...>* p) {
164 template <
template <
typename>
class Traits,
char I,
typename... Fs,
typename T>
165 auto CallNext(SeqState<Traits, I, Fs...>*
state,
T&&
arg)
167 CallFactory(&
state->next_factory, std::forward<T>(
arg))) {
168 return SeqState<Traits, I, Fs...>::Types::PromiseResultTraits::CallFactory(
169 &
state->next_factory, std::forward<T>(
arg));
198 template <
template <
typename>
class Traits,
typename... Fs>
202 static constexpr
char N =
sizeof...(Fs);
205 static_assert(
N < 128,
"Long sequence... please revisit BasicSeq");
217 using Result =
typename Traits<FinalPromiseResult>::WrappedType;
249 template <
typename T>
251 auto* prior =
s->state<
I>();
258 auto n = StateType::Types::PromiseResultTraits::CallFactory(
259 &prior->next_factory, std::forward<T>(
value));
278 auto r = s->current_promise();
280 if (absl::holds_alternative<Pending>(
r)) {
289 template CheckResultAndRunNext<Result>(
300 if (absl::holds_alternative<Pending>(
r)) {
314 DestructSubsequentFactories<I>();
328 DestructSubsequentFactories<I + 1>();
384 assert(other.
state_ == 0);
391 assert(other.state_ == 0);
408 template <
template <
typename Wrapped>
class Traits,
typename F,
typename Arg,
413 using StateCreated = decltype(std::declval<F>()(std::declval<IterValue>(),
414 std::declval<Arg>()));
468 if (absl::holds_alternative<Pending>(
r))
return r;
496 #endif // GRPC_CORE_LIB_PROMISE_DETAIL_BASIC_SEQ_H
Traits< PromiseResult > PromiseResultTraits
BasicSeqIter(Iter begin, Iter end, F f, Arg arg)
SeqState(const SeqState &other)
absl::string_view get(const Cont &c)
GPR_NO_UNIQUE_ADDRESS PriorState prior
absl::enable_if_t< I !=N - 1, Poll< Result > > RunState()
typename Promise::Result PromiseResult
void RunDestruct(absl::integer_sequence< char, I... >)
GPR_NO_UNIQUE_ADDRESS Types::Promise current_promise
BasicSeqIter(BasicSeqIter &&other) noexcept
typename std::enable_if< B, T >::type enable_if_t
static SeqState< Traits, I, Fs... > * f(SeqState< Traits, J, Fs... > *p)
Arg(64) -> Arg(128) ->Arg(256) ->Arg(512) ->Arg(1024) ->Arg(1536) ->Arg(2048) ->Arg(3072) ->Arg(4096) ->Arg(5120) ->Arg(6144) ->Arg(7168)
GPR_NO_UNIQUE_ADDRESS Arg result_
GPR_NO_UNIQUE_ADDRESS PenultimateState penultimate_state_
absl::enable_if_t< I==N - 1, Poll< Result > > RunState()
#define T(upbtypeconst, upbtype, ctype, default_value)
BasicSeq & operator=(const BasicSeq &)=delete
Poll< Result > operator()()
GPR_NO_UNIQUE_ADDRESS Types::Next next_factory
def Iter(n, format, sep='')
GPR_NO_UNIQUE_ADDRESS FinalPromise final_promise_
typename utility_internal::Gen< T, N >::type make_integer_sequence
typename PenultimateState::Types::Next::Promise FinalPromise
SeqState(const SeqState &other)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
TestInstance::Result Result
SeqState(SeqState &&other) noexcept
typename FinalPromise::Result FinalPromiseResult
absl::enable_if_t< I !=N - 1, void > DestructCurrentPromiseAndSubsequentFactories()
Poll< Result > operator()()
decltype(*std::declval< Iter >()) IterValue
GPR_NO_UNIQUE_ADDRESS Types::Promise current_promise
typename State::Result Wrapped
Poll< Wrapped > operator()()
GPR_NO_UNIQUE_ADDRESS State state_
SeqState< Traits, N - 2, Fs... > PenultimateState
typename Traits< FinalPromiseResult >::WrappedType Result
absl::enable_if_t< I !=N - 1, void > DestructSubsequentFactories()
GPR_NO_UNIQUE_ADDRESS Types::Next next_factory
typename PollTraits< decltype(WrapInPoll(f_()))>::Type Result
void Construct(T *p, Args &&... args)
BasicSeqIter & operator=(BasicSeqIter &&other) noexcept
BasicSeqIter & operator=(const BasicSeqIter &)=delete
static SeqState< Traits, I, Fs... > * f(SeqState< Traits, I, Fs... > *p)
GPR_NO_UNIQUE_ADDRESS F f_
std::function< Poll< T >()> Promise
SeqState(std::tuple< Fs *... > args)
AllocList * next[kMaxLevel]
absl::enable_if_t< I==N - 1, void > DestructCurrentPromiseAndSubsequentFactories()
absl::enable_if_t< I==N - 2, FinalPromise * > next_promise()
BasicSeq(BasicSeq &&other) noexcept
BasicSeq(const BasicSeq &other)
decltype(std::declval< F >()(std::declval< IterValue >(), std::declval< Arg >())) StateCreated
SeqState(SeqState &&other) noexcept
Poll< Result > operator()(T &&value)
SeqState(std::tuple< Fs *... > fs)
Poll< Result > Run(absl::integer_sequence< char, I... >)
Poll< Wrapped > PollNonEmpty()
typename std::remove_reference< T >::type remove_reference_t
absl::enable_if_t< I< N - 2, SeqState< Traits, I, Fs... > * > state() { return GetSeqState< I > &penultimate_state_);} template< char I > absl::enable_if_t< I==N - 2, PenultimateState * > state() { return &penultimate_state_;} template< char I > auto next_promise() -> absl::enable_if_t< I !=N - 2, decltype(&GetSeqState< I+1 >static_cast< PenultimateState * >nullptr)) -> current_promise
static struct rpc_state state
SeqStateTypes< Traits, typename PriorState::Types::Next::Promise, typename std::tuple_element< I+1, std::tuple< Fs... > >::type > Types
SeqState< Traits, I - 1, Fs... > PriorState
absl::enable_if_t< I==N - 1, void > DestructSubsequentFactories()
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:36