From c80b634497aff3022780e2d6e8675ae5490e6a1b Mon Sep 17 00:00:00 2001 From: skypjack Date: Wed, 18 Jun 2025 12:22:41 +0200 Subject: [PATCH] process: basic_process vs process --- TODO | 3 +-- src/entt/process/fwd.hpp | 9 ++++++--- src/entt/process/process.hpp | 24 ++++++++++++------------ src/entt/process/scheduler.hpp | 13 ++++++------- test/entt/process/process.cpp | 22 +++++++++++----------- test/entt/process/scheduler.cpp | 19 +++++++++---------- 6 files changed, 45 insertions(+), 45 deletions(-) diff --git a/TODO b/TODO index 8825b3b2b..238caae09 100644 --- a/TODO +++ b/TODO @@ -37,6 +37,5 @@ TODO: * use any for meta_custom_node * avoid copying meta_type/data/func nodes * paged vector as a standalone class -* basic_process vs process with default delta type +* basic_process_adaptor vs process_adaptor with default delta type * update process/scheduler natvis and doc after rework -* process test with allocator_arg diff --git a/src/entt/process/fwd.hpp b/src/entt/process/fwd.hpp index 76667b113..304b97f12 100644 --- a/src/entt/process/fwd.hpp +++ b/src/entt/process/fwd.hpp @@ -7,13 +7,16 @@ namespace entt { template -class process; +class basic_process; -template> +/*! @brief Alias declaration for the most common use case. */ +using process = basic_process; + +template> class basic_scheduler; /*! @brief Alias declaration for the most common use case. */ -using scheduler = basic_scheduler<>; +using scheduler = basic_scheduler; } // namespace entt diff --git a/src/entt/process/process.hpp b/src/entt/process/process.hpp index d1acc5390..105ec4c9d 100644 --- a/src/entt/process/process.hpp +++ b/src/entt/process/process.hpp @@ -57,9 +57,9 @@ namespace entt { * @tparam Delta Type to use to provide elapsed time. */ template -class process: private std::enable_shared_from_this> { +class basic_process: private std::enable_shared_from_this> { class process_arg_t { - friend class process; + friend class basic_process; explicit process_arg_t() = default; }; @@ -89,29 +89,29 @@ public: using delta_type = Delta; /*! @brief Default constructor. */ - constexpr process(token_type) + constexpr basic_process(token_type) : current{state::idle} {} /*! @brief Default destructor. */ - virtual ~process() = default; + virtual ~basic_process() = default; /*! @brief Default copy constructor. */ - process(const process &) = default; + basic_process(const basic_process &) = default; /*! @brief Default move constructor. */ - process(process &&) noexcept = default; + basic_process(basic_process &&) noexcept = default; /** * @brief Default copy assignment operator. * @return This process. */ - process &operator=(const process &) = default; + basic_process &operator=(const basic_process &) = default; /** * @brief Default move assignment operator. * @return This process. */ - process &operator=(process &&) noexcept = default; + basic_process &operator=(basic_process &&) noexcept = default; /** * @brief Factory method. @@ -288,11 +288,11 @@ private: * @tparam Delta Type to use to provide elapsed time. */ template -struct process_adaptor: public process, private Func { +struct process_adaptor: public basic_process, private Func { /*! @brief Process constructor token. */ - using token_type = typename process::token_type; + using token_type = typename basic_process::token_type; /*! @brief Type used to provide elapsed time. */ - using delta_type = typename process::delta_type; + using delta_type = typename basic_process::delta_type; /** * @brief Constructs a process adaptor from a lambda or a functor. @@ -302,7 +302,7 @@ struct process_adaptor: public process, private Func { */ template process_adaptor(const token_type token, Args &&...args) - : process{token}, + : basic_process{token}, Func{std::forward(args)...} {} /** diff --git a/src/entt/process/scheduler.hpp b/src/entt/process/scheduler.hpp index 2fb430418..31894e52c 100644 --- a/src/entt/process/scheduler.hpp +++ b/src/entt/process/scheduler.hpp @@ -16,11 +16,11 @@ namespace entt { /*! @cond TURN_OFF_DOXYGEN */ namespace internal { -template +template struct process_handler { // std::shared_ptr because of its type erased allocator which is useful here std::shared_ptr next{}; - std::shared_ptr> task{}; + std::shared_ptr task{}; }; } // namespace internal @@ -55,8 +55,9 @@ struct process_handler { */ template class basic_scheduler { - using handler_type = internal::process_handler; + using process_type = basic_process; using alloc_traits = std::allocator_traits; + using handler_type = internal::process_handler; using container_allocator = typename alloc_traits::template rebind_alloc; using container_type = std::vector; @@ -201,8 +202,7 @@ public: */ template basic_scheduler &attach(Args &&...args) { - static_assert(std::is_base_of_v, Proc>, "Invalid process type"); - handlers.first().emplace_back().task = process::allocate(handlers.second(), std::forward(args)...); + handlers.first().emplace_back().task = process_type::template allocate(handlers.second(), std::forward(args)...); return *this; } @@ -272,12 +272,11 @@ public: */ template basic_scheduler &then(Args &&...args) { - static_assert(std::is_base_of_v, Proc>, "Invalid process type"); ENTT_ASSERT(!handlers.first().empty(), "Process not available"); auto *curr = &handlers.first().back(); for(; curr->next; curr = curr->next.get()) {} curr->next = std::allocate_shared(handlers.second()); - curr->next->task = process::allocate(handlers.second(), std::forward(args)...); + curr->next->task = process_type::template allocate(handlers.second(), std::forward(args)...); return *this; } diff --git a/test/entt/process/process.cpp b/test/entt/process/process.cpp index 3f1828754..81a85f8ef 100644 --- a/test/entt/process/process.cpp +++ b/test/entt/process/process.cpp @@ -5,8 +5,8 @@ #include "../../common/empty.h" template -class test_process: public entt::process { - using entt::process::process; +class test_process: public entt::basic_process { + using entt::basic_process::basic_process; void succeeded() override { succeeded_invoked = true; @@ -36,7 +36,7 @@ public: }; TEST(Process, Basics) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); ASSERT_FALSE(process->alive()); ASSERT_FALSE(process->finished()); @@ -91,7 +91,7 @@ TEST(Process, Basics) { } TEST(Process, Succeeded) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); process->tick({}); process->tick({}); @@ -110,7 +110,7 @@ TEST(Process, Succeeded) { } TEST(Process, Fail) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); process->tick(0); process->tick(0); @@ -129,7 +129,7 @@ TEST(Process, Fail) { } TEST(Process, Data) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); int value = 0; process->tick({}); @@ -150,7 +150,7 @@ TEST(Process, Data) { } TEST(Process, AbortNextTick) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); process->tick(0); process->abort(); @@ -168,7 +168,7 @@ TEST(Process, AbortNextTick) { } TEST(Process, AbortImmediately) { - auto process = entt::process::allocate>(std::allocator{}); + auto process = entt::basic_process::allocate>(std::allocator{}); process->tick({}); process->abort(true); @@ -192,7 +192,7 @@ TEST(ProcessAdaptor, Resolved) { resolve(); }; - auto process = entt::process::allocate>(std::allocator{}, lambda); + auto process = entt::basic_process::allocate>(std::allocator{}, lambda); process->tick(0); process->tick(0); @@ -209,7 +209,7 @@ TEST(ProcessAdaptor, Rejected) { rejected(); }; - auto process = entt::process::allocate>(std::allocator{}, lambda); + auto process = entt::basic_process::allocate>(std::allocator{}, lambda); process->tick(0); process->tick(0); @@ -225,7 +225,7 @@ TEST(ProcessAdaptor, Data) { resolve(); }; - auto process = entt::process::allocate>(std::allocator{}, lambda); + auto process = entt::basic_process::allocate>(std::allocator{}, lambda); process->tick(0, &value); diff --git a/test/entt/process/scheduler.cpp b/test/entt/process/scheduler.cpp index dbdd50276..33e8b1e9f 100644 --- a/test/entt/process/scheduler.cpp +++ b/test/entt/process/scheduler.cpp @@ -5,9 +5,8 @@ #include #include -class foo_process: public entt::process { - using base_type = entt::process; - using token_type = typename base_type::token_type; +class foo_process: public entt::process { + using token_type = typename entt::process::token_type; void update(const delta_type, void *) override { on_update(); @@ -19,7 +18,7 @@ class foo_process: public entt::process { public: foo_process(const token_type token, std::function upd, std::function abort) - : base_type{token}, + : entt::process{token}, on_update{std::move(upd)}, on_aborted{std::move(abort)} {} @@ -28,24 +27,24 @@ private: std::function on_aborted; }; -class succeeded_process: public entt::process { - void update(const entt::scheduler::delta_type, void *data) override { +class succeeded_process: public entt::process { + void update(const delta_type, void *data) override { ++static_cast *>(data)->first; succeed(); } public: - using entt::process::process; + using entt::process::process; }; -class failed_process: public entt::process { - void update(const entt::scheduler::delta_type, void *data) override { +class failed_process: public entt::process { + void update(const delta_type, void *data) override { ++static_cast *>(data)->second; fail(); } public: - using entt::process::process; + using entt::process::process; }; TEST(Scheduler, Functionalities) {