diff --git a/examples/cloud.cpp b/examples/cloud.cpp index ba7c352f..8c704893 100644 --- a/examples/cloud.cpp +++ b/examples/cloud.cpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include using namespace psemek; @@ -216,7 +216,7 @@ struct cloud_app light_mesh.setup>(); { - util::threadpool bg("bg"); + async::threadpool bg("bg"); pcg::generator rng(pcg::random_device{}); pcg::uniform_sphere_vector_distribution d; @@ -251,7 +251,7 @@ struct cloud_app { for (std::size_t y = 0; y < cloud_data.height(); ++y) { - bg.dispatch([&, z, y]{ + bg.post([&, z, y]{ for (std::size_t x = 0; x < cloud_data.width(); ++x) { geom::vector p; diff --git a/libs/async/CMakeLists.txt b/libs/async/CMakeLists.txt new file mode 100644 index 00000000..2e510c4d --- /dev/null +++ b/libs/async/CMakeLists.txt @@ -0,0 +1,6 @@ +file(GLOB_RECURSE PSEMEK_ASYNC_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") +file(GLOB_RECURSE PSEMEK_ASYNC_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") + +add_library(psemek-async ${PSEMEK_ASYNC_HEADERS} ${PSEMEK_ASYNC_SOURCES}) +target_include_directories(psemek-async PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(psemek-async PUBLIC psemek-log psemek-util) diff --git a/libs/util/include/psemek/util/event_loop.hpp b/libs/async/include/psemek/async/event_loop.hpp similarity index 91% rename from libs/util/include/psemek/util/event_loop.hpp rename to libs/async/include/psemek/async/event_loop.hpp index ff67541c..bcde4dba 100644 --- a/libs/util/include/psemek/util/event_loop.hpp +++ b/libs/async/include/psemek/async/event_loop.hpp @@ -1,11 +1,11 @@ #pragma once -#include +#include #include #include -namespace psemek::util +namespace psemek::async { struct event_loop diff --git a/libs/util/include/psemek/util/executor.hpp b/libs/async/include/psemek/async/executor.hpp similarity index 97% rename from libs/util/include/psemek/util/executor.hpp rename to libs/async/include/psemek/async/executor.hpp index 46c8b3ea..dbce58d8 100644 --- a/libs/util/include/psemek/util/executor.hpp +++ b/libs/async/include/psemek/async/executor.hpp @@ -6,7 +6,7 @@ #include #include -namespace psemek::util +namespace psemek::async { namespace detail @@ -64,12 +64,15 @@ namespace psemek::util struct future { future() = default; + future(future&&) = default; future(std::shared_ptr> state) : state_(std::move(state)) , f_(state_->promise.get_future()) {} + future & operator = (future&&) = default; + ~future() { reset(); @@ -132,7 +135,7 @@ namespace psemek::util struct executor { - using task = movable_function; + using task = util::movable_function; using clock = std::chrono::high_resolution_clock; // Post the task for execution. Where and when will diff --git a/libs/util/include/psemek/util/threadpool.hpp b/libs/async/include/psemek/async/threadpool.hpp similarity index 94% rename from libs/util/include/psemek/util/threadpool.hpp rename to libs/async/include/psemek/async/threadpool.hpp index ced6fc55..aa8211da 100644 --- a/libs/util/include/psemek/util/threadpool.hpp +++ b/libs/async/include/psemek/async/threadpool.hpp @@ -1,9 +1,10 @@ #pragma once +#include + #include #include #include -#include #include #include @@ -11,7 +12,7 @@ #include #include -namespace psemek::util +namespace psemek::async { struct threadpool diff --git a/libs/util/source/event_loop.cpp b/libs/async/source/event_loop.cpp similarity index 96% rename from libs/util/source/event_loop.cpp rename to libs/async/source/event_loop.cpp index 59462247..27f0f11b 100644 --- a/libs/util/source/event_loop.cpp +++ b/libs/async/source/event_loop.cpp @@ -1,8 +1,8 @@ -#include +#include #include -namespace psemek::util +namespace psemek::async { auto event_loop::heap_compare() diff --git a/libs/util/source/threadpool.cpp b/libs/async/source/threadpool.cpp similarity index 89% rename from libs/util/source/threadpool.cpp rename to libs/async/source/threadpool.cpp index 3faa2111..dacbd410 100644 --- a/libs/util/source/threadpool.cpp +++ b/libs/async/source/threadpool.cpp @@ -1,11 +1,11 @@ -#include +#include + #include #include -#include #include -namespace psemek::util +namespace psemek::async { namespace @@ -20,8 +20,8 @@ namespace psemek::util { for (std::size_t th = 0; th < thread_count; ++th) { - std::string tname = thread_count == 1 ? name : to_string(name, '#', th); - threads_.emplace_back([this, tname = std::move(tname), th, thread_count] + std::string tname = thread_count == 1 ? name : util::to_string(name, '#', th); + threads_.emplace_back([this, tname = std::move(tname)] { log::register_thread(tname); for (bool running = true; running;)