| D++ (DPP) C++ Discord API Bot Library

Search
Loading...
Searching...
No Matches
dpp::detail::task::promise_base< R > Struct Template Reference

Base implementation of task::promise_t, without the logic that would depend on the return type. Meant to be inherited from. More...

`#include <task.h>`

Inheritance diagram for dpp::detail::task::promise_base< R >:
[legend]
Collaboration diagram for dpp::detail::task::promise_base< R >:
[legend]

## Classes

struct | proxy_awaiter
| Proxy awaitable that wraps any co_await inside the task and checks for cancellation on resumption. More...

## Public Member Functions

template<awaitable_type T>
auto | await_transform (T &&expr) const noexcept(noexcept(co_await_resolve(std::forward< T >(expr))))
| Function called whenever co_await is used inside of the task.
void | emplace_value (Args &&... args)
| Construct the result in place by forwarding the arguments, and by default resume any awaiter.
awaitable< R > | get_awaitable ()
| Get an awaitable object for this promise.
std_coroutine::suspend_never | initial_suspend () const noexcept
| Function called by the standard library when the coroutine is created.
void | notify_awaiter ()
| Notify a currently awaiting coroutine that the result is ready.
void | set_exception (std::exception_ptr ptr)
| Set this promise to an exception and resume any awaiter.
void | set_value (U &&v)
| Construct the result by forwarding reference, and resume any awaiter.
void | unhandled_exception ()
| Function called by the standard library when an exception is thrown and not caught in the coroutine.

## Public Attributes

std::atomic< bool > | cancelled = false
| Whether the task is cancelled or not.

## Protected Types

using | storage_type
| Variant representing one of either 3 states of the result value : empty, result, exception.

## Protected Member Functions

std_coroutine::coroutine_handle | release_awaiter ()
| Unlinks this promise from its currently linked awaiter and returns it.
void | throw_if_not_empty ()
| Check if the result is empty, throws otherwise.

## Protected Attributes

std_coroutine::coroutine_handle | awaiter
| Coroutine handle currently awaiting the completion of this promise.
std::atomic< uint8_t > | state
| State of the awaitable tied to this promise.
storage_type | value
| State of the result value.

## Detailed Description

template<typename R>
struct dpp::detail::task::promise_base< R >

Base implementation of task::promise_t, without the logic that would depend on the return type. Meant to be inherited from.

## Member Typedef Documentation

## ◆ storage_type

using dpp::detail::promise::promise_base< R >::storage_type

protected inherited

Variant representing one of either 3 states of the result value : empty, result, exception.

## Member Function Documentation

## ◆ await_transform()

template<typename R>
template<awaitable_type T>

auto dpp::detail::task::promise_base< R >::await_transform | ( | T && | expr | ) | const

inline nodiscard noexcept

Function called whenever co_await is used inside of the task.

Exceptions

  dpp::task_cancelled_exception | On resumption if the task was cancelled

Returns
  proxy_awaiter Returns a proxy awaiter that will check for cancellation on resumption

## ◆ emplace_value()

void dpp::basic_promise< R >::emplace_value | ( | Args &&... | args | ) |

inline inherited

Construct the result in place by forwarding the arguments, and by default resume any awaiter.

Template Parameters

  Notify | Whether to resume any awaiter or not.

Exceptions

  dpp::logic_exception | if the promise is not empty.

## ◆ get_awaitable()

awaitable< R > dpp::detail::promise::promise_base< R >::get_awaitable | ( |  | ) |

inline inherited

Get an awaitable object for this promise.

Exceptions

  dpp::logic_exception | if get_awaitable has already been called on this object.

Returns
  awaitable<T> An object that can be co_await-ed to retrieve the value of this promise.

## ◆ initial_suspend()

template<typename R>

std_coroutine::suspend_never dpp::detail::task::promise_base< R >::initial_suspend | ( |  | ) | const

inline noexcept

Function called by the standard library when the coroutine is created.

Returns
  std::suspend_never Don't suspend, the coroutine starts immediately.

## ◆ notify_awaiter()

void dpp::detail::promise::promise_base< R >::notify_awaiter | ( |  | ) |

inline inherited

Notify a currently awaiting coroutine that the result is ready.

Note
  This may resume the coroutine on the current thread.

Exceptions

  ? | Any exception thrown by the coroutine if resumed will propagate

## ◆ release_awaiter()

std_coroutine::coroutine_handle dpp::detail::promise::promise_base< R >::release_awaiter | ( |  | ) |

inline protected inherited

Unlinks this promise from its currently linked awaiter and returns it.

At the time of writing this is only used in the case of a serious internal error in dpp::task. Avoid using this as this will crash if the promise is used after this.

## ◆ set_exception()

void dpp::detail::promise::promise_base< R >::set_exception | ( | std::exception_ptr | ptr | ) |

inline inherited

Set this promise to an exception and resume any awaiter.

Template Parameters

  Notify | Whether to resume any awaiter or not.

Exceptions

  dpp::logic_exception | if the promise is not empty.
  ? | Any exception thrown by the coroutine if resumed will propagate

## ◆ set_value()

void dpp::basic_promise< R >::set_value | ( | U && | v | ) |

inline inherited

Construct the result by forwarding reference, and resume any awaiter.

Template Parameters

  Notify | Whether to resume any awaiter or not.

Exceptions

  dpp::logic_exception | if the promise is not empty.

## ◆ throw_if_not_empty()

void dpp::detail::promise::promise_base< R >::throw_if_not_empty | ( |  | ) |

inline protected inherited

Check if the result is empty, throws otherwise.

Exceptions

  dpp::logic_exception | if the result isn't empty.

## ◆ unhandled_exception()

template<typename R>

void dpp::detail::task::promise_base< R >::unhandled_exception | ( |  | ) |

inline

Function called by the standard library when an exception is thrown and not caught in the coroutine.

Stores the exception pointer to rethrow on co_await. If the task object is destroyed and was not cancelled, throw instead

## Member Data Documentation

## ◆ awaiter

std_coroutine::coroutine_handle dpp::detail::promise::promise_base< R >::awaiter

protected inherited

Coroutine handle currently awaiting the completion of this promise.

## ◆ cancelled

template<typename R>

std::atomic<bool> dpp::detail::task::promise_base< R >::cancelled = false

Whether the task is cancelled or not.

## ◆ state

std::atomic<uint8_t> dpp::detail::promise::promise_base< R >::state

protected inherited

State of the awaitable tied to this promise.

## ◆ value

storage_type dpp::detail::promise::promise_base< R >::value

protected inherited

State of the result value.

See also
  storage_type

Note
  use .index() instead of std::holds_alternative to support promise_base<std::exception_ptr> and promise_base<std::monostate> :)

D++ Library version 9.0.13 D++ Library version 9.0.12 D++ Library version 9.0.11 D++ Library version 9.0.10 D++ Library version 9.0.9 D++ Library version 9.0.8 D++ Library version 9.0.7 D++ Library version 9.0.6 D++ Library version 9.0.5 D++ Library version 9.0.4 D++ Library version 9.0.3 D++ Library version 9.0.2 D++ Library version 9.0.1 D++ Library version 9.0.0 D++ Library version 1.0.2 D++ Library version 1.0.1 D++ Library version 1.0.0