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

Forward declaration of generator. More...

#include <generator.h>

Collaboration diagram for kcenon::container::async::generator< T >:
Collaboration graph

Classes

class  iterator
 Iterator for generator. More...
 

Public Types

using promise_type = detail::generator_promise<T>
 
using handle_type = std::coroutine_handle<promise_type>
 
using value_type = std::remove_reference_t<T>
 
using reference = std::conditional_t<std::is_reference_v<T>, T, T&>
 
using pointer = value_type*
 

Public Member Functions

 generator () noexcept
 Default constructor - creates empty generator.
 
 generator (handle_type handle) noexcept
 Construct from coroutine handle.
 
 generator (generator &&other) noexcept
 Move constructor.
 
generatoroperator= (generator &&other) noexcept
 Move assignment operator.
 
 ~generator ()
 Destructor - destroys the coroutine if owned.
 
 generator (const generator &)=delete
 
generatoroperator= (const generator &)=delete
 
bool valid () const noexcept
 Check if generator is valid.
 
 operator bool () const noexcept
 Check if generator is valid.
 
iterator begin ()
 Get iterator to beginning.
 
std::default_sentinel_t end () noexcept
 Get sentinel for end.
 

Private Attributes

handle_type handle_
 

Detailed Description

template<typename T>
class kcenon::container::async::generator< T >

Forward declaration of generator.

Coroutine generator for lazy sequence generation.

A generator is a coroutine that can produce a sequence of values lazily using co_yield. Each value is produced on-demand when the iterator is advanced.

Properties:

  • Lazy evaluation (values computed on-demand)
  • Move-only (non-copyable)
  • STL-compatible iteration
  • Exception propagation
Template Parameters
TThe type of values produced by the generator

Definition at line 150 of file generator.h.

Member Typedef Documentation

◆ handle_type

template<typename T >
using kcenon::container::async::generator< T >::handle_type = std::coroutine_handle<promise_type>

Definition at line 154 of file generator.h.

◆ pointer

template<typename T >
using kcenon::container::async::generator< T >::pointer = value_type*

Definition at line 157 of file generator.h.

◆ promise_type

template<typename T >
using kcenon::container::async::generator< T >::promise_type = detail::generator_promise<T>

Definition at line 153 of file generator.h.

◆ reference

template<typename T >
using kcenon::container::async::generator< T >::reference = std::conditional_t<std::is_reference_v<T>, T, T&>

Definition at line 156 of file generator.h.

◆ value_type

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

Definition at line 155 of file generator.h.

Constructor & Destructor Documentation

◆ generator() [1/4]

template<typename T >
kcenon::container::async::generator< T >::generator ( )
inlinenoexcept

Default constructor - creates empty generator.

Definition at line 241 of file generator.h.

241: handle_(nullptr) {}

◆ generator() [2/4]

template<typename T >
kcenon::container::async::generator< T >::generator ( handle_type handle)
inlineexplicitnoexcept

Construct from coroutine handle.

Definition at line 246 of file generator.h.

246: handle_(handle) {}

◆ generator() [3/4]

template<typename T >
kcenon::container::async::generator< T >::generator ( generator< T > && other)
inlinenoexcept

Move constructor.

Definition at line 251 of file generator.h.

252 : handle_(std::exchange(other.handle_, nullptr)) {}

◆ ~generator()

template<typename T >
kcenon::container::async::generator< T >::~generator ( )
inline

Destructor - destroys the coroutine if owned.

Definition at line 273 of file generator.h.

274 {
275 if (handle_)
276 {
277 handle_.destroy();
278 }
279 }

References kcenon::container::async::generator< T >::handle_.

◆ generator() [4/4]

template<typename T >
kcenon::container::async::generator< T >::generator ( const generator< T > & )
delete

Member Function Documentation

◆ begin()

template<typename T >
iterator kcenon::container::async::generator< T >::begin ( )
inlinenodiscard

Get iterator to beginning.

Resumes the coroutine to get the first value

Definition at line 306 of file generator.h.

307 {
308 if (handle_)
309 {
310 handle_.resume();
311 if (handle_.done())
312 {
313 handle_.promise().rethrow_if_exception();
314 }
315 }
316 return iterator{handle_};
317 }

References kcenon::container::async::generator< T >::handle_.

◆ end()

template<typename T >
std::default_sentinel_t kcenon::container::async::generator< T >::end ( )
inlinenodiscardnoexcept

Get sentinel for end.

Definition at line 322 of file generator.h.

323 {
324 return {};
325 }

◆ operator bool()

template<typename T >
kcenon::container::async::generator< T >::operator bool ( ) const
inlineexplicitnodiscardnoexcept

Check if generator is valid.

Definition at line 296 of file generator.h.

297 {
298 return valid();
299 }
bool valid() const noexcept
Check if generator is valid.
Definition generator.h:288

References kcenon::container::async::generator< T >::valid().

Here is the call graph for this function:

◆ operator=() [1/2]

template<typename T >
generator & kcenon::container::async::generator< T >::operator= ( const generator< T > & )
delete

◆ operator=() [2/2]

template<typename T >
generator & kcenon::container::async::generator< T >::operator= ( generator< T > && other)
inlinenoexcept

Move assignment operator.

Definition at line 257 of file generator.h.

258 {
259 if (this != &other)
260 {
261 if (handle_)
262 {
263 handle_.destroy();
264 }
265 handle_ = std::exchange(other.handle_, nullptr);
266 }
267 return *this;
268 }

References kcenon::container::async::generator< T >::handle_.

◆ valid()

template<typename T >
bool kcenon::container::async::generator< T >::valid ( ) const
inlinenodiscardnoexcept

Check if generator is valid.

Definition at line 288 of file generator.h.

289 {
290 return handle_ != nullptr;
291 }

References kcenon::container::async::generator< T >::handle_.

Referenced by kcenon::container::async::generator< T >::operator bool().

Here is the caller graph for this function:

Member Data Documentation

◆ handle_


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