Container System 0.1.0
High-performance C++20 type-safe container framework with SIMD-accelerated serialization
Loading...
Searching...
No Matches
kcenon::container::async::detail::generator_promise< T > Struct Template Reference

Promise type for generator. More...

#include <generator.h>

Collaboration diagram for kcenon::container::async::detail::generator_promise< T >:
Collaboration graph

Public Types

using value_type = std::remove_reference_t<T>
 
using reference_type = std::conditional_t<std::is_reference_v<T>, T, T&>
 
using pointer_type = value_type*
 

Public Member Functions

generator< T > get_return_object () noexcept
 Get return object (the generator)
 
std::suspend_always initial_suspend () noexcept
 Suspend at start - generators are lazy.
 
std::suspend_always final_suspend () noexcept
 Suspend at final point.
 
std::suspend_always yield_value (value_type &value) noexcept
 Yield a value.
 
std::suspend_always yield_value (value_type &&value) noexcept
 Yield an rvalue.
 
void return_void () noexcept
 Generators don't return values directly.
 
void unhandled_exception () noexcept
 Handle unhandled exceptions.
 
reference_type value () const noexcept
 Get the current value.
 
void rethrow_if_exception ()
 Rethrow stored exception if any.
 

Public Attributes

pointer_type current_value_ {nullptr}
 
std::exception_ptr exception_
 

Detailed Description

template<typename T>
struct kcenon::container::async::detail::generator_promise< T >

Promise type for generator.

Definition at line 51 of file generator.h.

Member Typedef Documentation

◆ pointer_type

template<typename T >
using kcenon::container::async::detail::generator_promise< T >::pointer_type = value_type*

Definition at line 55 of file generator.h.

◆ reference_type

template<typename T >
using kcenon::container::async::detail::generator_promise< T >::reference_type = std::conditional_t<std::is_reference_v<T>, T, T&>

Definition at line 54 of file generator.h.

◆ value_type

template<typename T >
using kcenon::container::async::detail::generator_promise< T >::value_type = std::remove_reference_t<T>

Definition at line 53 of file generator.h.

Member Function Documentation

◆ final_suspend()

template<typename T >
std::suspend_always kcenon::container::async::detail::generator_promise< T >::final_suspend ( )
inlinenodiscardnoexcept

Suspend at final point.

Definition at line 76 of file generator.h.

77 {
78 return {};
79 }

◆ get_return_object()

template<typename T >
generator< T > kcenon::container::async::detail::generator_promise< T >::get_return_object ( )
nodiscardnoexcept

Get return object (the generator)

Definition at line 333 of file generator.h.

334 {
335 return generator<T>{
336 std::coroutine_handle<detail::generator_promise<T>>::from_promise(*this)};
337 }

◆ initial_suspend()

template<typename T >
std::suspend_always kcenon::container::async::detail::generator_promise< T >::initial_suspend ( )
inlinenodiscardnoexcept

Suspend at start - generators are lazy.

Definition at line 68 of file generator.h.

69 {
70 return {};
71 }

◆ rethrow_if_exception()

template<typename T >
void kcenon::container::async::detail::generator_promise< T >::rethrow_if_exception ( )
inline

Rethrow stored exception if any.

Definition at line 123 of file generator.h.

124 {
125 if (exception_)
126 {
127 std::rethrow_exception(exception_);
128 }
129 }

References kcenon::container::async::detail::generator_promise< T >::exception_.

◆ return_void()

template<typename T >
void kcenon::container::async::detail::generator_promise< T >::return_void ( )
inlinenoexcept

Generators don't return values directly.

Definition at line 102 of file generator.h.

102{}

◆ unhandled_exception()

template<typename T >
void kcenon::container::async::detail::generator_promise< T >::unhandled_exception ( )
inlinenoexcept

Handle unhandled exceptions.

Definition at line 107 of file generator.h.

108 {
109 exception_ = std::current_exception();
110 }

References kcenon::container::async::detail::generator_promise< T >::exception_.

◆ value()

template<typename T >
reference_type kcenon::container::async::detail::generator_promise< T >::value ( ) const
inlinenodiscardnoexcept

Get the current value.

Definition at line 115 of file generator.h.

116 {
117 return *current_value_;
118 }

References kcenon::container::async::detail::generator_promise< T >::current_value_.

◆ yield_value() [1/2]

template<typename T >
std::suspend_always kcenon::container::async::detail::generator_promise< T >::yield_value ( value_type && value)
inlinenoexcept

Yield an rvalue.

Definition at line 93 of file generator.h.

94 {
95 current_value_ = std::addressof(value);
96 return {};
97 }
reference_type value() const noexcept
Get the current value.
Definition generator.h:115

References kcenon::container::async::detail::generator_promise< T >::current_value_.

◆ yield_value() [2/2]

template<typename T >
std::suspend_always kcenon::container::async::detail::generator_promise< T >::yield_value ( value_type & value)
inlinenoexcept

Yield a value.

Definition at line 84 of file generator.h.

85 {
86 current_value_ = std::addressof(value);
87 return {};
88 }

References kcenon::container::async::detail::generator_promise< T >::current_value_.

Member Data Documentation

◆ current_value_

◆ exception_


The documentation for this struct was generated from the following file: