From ebe4cb0bdeabd06a31072547af47cacaab7f78c0 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Wed, 2 Jul 2025 05:49:47 +0100 Subject: replace nihil::generator the new implementation is much simpler and PD-licensed. the only downside is it doesn't support elements_of. while here, move it to nihil.core. --- nihil.generator/generator_promise.ccm | 61 ----------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 nihil.generator/generator_promise.ccm (limited to 'nihil.generator/generator_promise.ccm') diff --git a/nihil.generator/generator_promise.ccm b/nihil.generator/generator_promise.ccm deleted file mode 100644 index 3e8aa8c..0000000 --- a/nihil.generator/generator_promise.ccm +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Reference implementation of std::generator proposal P2168. -// -// See https://wg21.link/P2168 for details. -// -/////////////////////////////////////////////////////////////////////////////// -// Copyright Lewis Baker, Corentin Jabot -// -// Use, modification and distribution is subject to the Boost Software License, -// Version 1.0. -// (See accompanying file LICENSE or http://www.boost.org/LICENSE_1_0.txt) -/////////////////////////////////////////////////////////////////////////////// - -export module nihil.generator:generator_promise; - -import nihil.std; -import :forward; -import :generator_promise_base; -import :promise_base_alloc; - -namespace nihil { - -export template -struct generator_promise; - -export template -struct generator_promise, ByteAllocator, ExplicitAllocator> final - : public generator_promise_base, - public promise_base_alloc -{ - generator_promise() noexcept - : generator_promise_base( - std::coroutine_handle::from_promise(*this)) - { - } - - auto get_return_object() noexcept -> generator - { - return generator{ - std::coroutine_handle::from_promise(*this)}; - } - - using generator_promise_base::yield_value; - - template - auto yield_value(nihil::elements_of &&x) -> typename generator_promise_base< - Ref>::template yield_sequence_awaiter> - { - static_assert(!ExplicitAllocator, - "This coroutine has an explicit allocator specified with " - "std::allocator_arg so an allocator needs to be passed " - "explicitely to std::elements_of"); - return [](auto &&rng) -> generator { - for (auto &&e : rng) - co_yield static_cast(e); - }(std::forward(x.get())); - } -}; - -} // namespace nihil -- cgit v1.2.3