summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-03-04 08:55:10 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-03-04 08:55:10 +0100
commit4b2b47d6edc8c8dd75f260fed3286f5dc4fe9374 (patch)
treea4b19757f1db8646a7e80eee9471c008d5d81b07
parentafda75faa95d7c52d73acb9fbf615831cb6dee1a (diff)
feat: core: add ASIO example and new IOC helper 'run_loop'.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--example/asio_example/CMakeLists.txt15
-rw-r--r--example/asio_example/example.cpp33
-rw-r--r--include/ocl/asio.hpp21
3 files changed, 69 insertions, 0 deletions
diff --git a/example/asio_example/CMakeLists.txt b/example/asio_example/CMakeLists.txt
new file mode 100644
index 0000000..2efd470
--- /dev/null
+++ b/example/asio_example/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+cmake_minimum_required(VERSION 3.15...3.31)
+
+project(
+ AsioExample
+ VERSION 1.0
+ LANGUAGES CXX)
+
+find_package(Boost REQUIRED)
+
+add_executable(AsioExample example.cpp)
+
+set_property(TARGET AsioExample PROPERTY CXX_STANDARD 20)
+target_include_directories(AsioExample PUBLIC ../../include/)
+# target_link_libraries(AsioExample PRIVATE Boost Core Asio)
diff --git a/example/asio_example/example.cpp b/example/asio_example/example.cpp
new file mode 100644
index 0000000..0aeb285
--- /dev/null
+++ b/example/asio_example/example.cpp
@@ -0,0 +1,33 @@
+// Copyright 2026, Amlal El Mahrouss (amlal@nekernel.org)
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// Official repository: https://git.ocl.nekernel.org/core
+
+#include <ocl/print.hpp>
+#include <ocl/asio.hpp>
+#include <ocl/allocator_op.hpp>
+#include <future>
+
+constexpr long int operator ""_USD(long double n)
+{
+ return n * 1000.0;
+}
+
+/// @brief Wrap OCL in ASIO calls.
+int main()
+{
+ boost::asio::io_context ioc{1};
+ auto spawn_strand = boost::asio::make_strand(ioc);
+
+ boost::asio::co_spawn(spawn_strand, [&]() -> boost::asio::awaitable<void> {
+ ocl::allocator<int> int_alloc;
+ auto balance = int_alloc.construct_array<1>();
+
+ *balance = operator ""_USD(150);
+ ocl::io::println("USD: ", *balance);
+ co_return;
+ }, boost::asio::detached);
+
+ ocl::asio::run_loop<[]() { std::terminate(); return; }>(ioc);
+ return EXIT_SUCCESS;
+}
diff --git a/include/ocl/asio.hpp b/include/ocl/asio.hpp
index c1e304d..1e4abf5 100644
--- a/include/ocl/asio.hpp
+++ b/include/ocl/asio.hpp
@@ -12,6 +12,7 @@
#else
+#include <boost/asio/strand.hpp>
#include <boost/asio/co_spawn.hpp>
#include <boost/asio/detached.hpp>
#include <boost/asio/io_context.hpp>
@@ -20,4 +21,24 @@
#endif
+namespace ocl::asio
+{
+ using io_context = boost::asio::io_context;
+ using run_pred_type = void(*)();
+
+ template <run_pred_type IOCPred>
+ inline void run_loop(io_context& ioc)
+ {
+ try
+ {
+ ioc.run();
+ }
+ catch (...)
+ {
+ IOCPred();
+ }
+ }
+
+} // namespace ocl
+
#endif