From 8bb987d1be02c892be77f93cc6948e1442f29bf1 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 22 Mar 2022 21:14:06 +0100 Subject: [PATCH] WIP: Use `std::move_only_function` for callbacks WIP, waiting for GCC 12 --- CMakeLists.txt | 2 +- librepomgr/multisession.h | 2 +- librepomgr/webapi/routes.cpp | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b2b2cdb..a550e0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set(META_VERSION_MAJOR 0) set(META_VERSION_MINOR 0) set(META_VERSION_PATCH 1) set(META_VERSION_EXACT_SONAME ON) -set(META_CXX_STANDARD 20) +set(META_CXX_STANDARD 23) project(${META_PROJECT_NAME}) diff --git a/librepomgr/multisession.h b/librepomgr/multisession.h index 06331a8..1359790 100644 --- a/librepomgr/multisession.h +++ b/librepomgr/multisession.h @@ -14,7 +14,7 @@ namespace LibRepoMgr { template class MultiSession { public: using ContainerType = std::vector; - using HandlerType = std::function; + using HandlerType = std::move_only_function; using SharedPointerType = std::shared_ptr>; explicit MultiSession(boost::asio::io_context &ioContext, HandlerType &&handler); diff --git a/librepomgr/webapi/routes.cpp b/librepomgr/webapi/routes.cpp index 6577dff..5bdce59 100644 --- a/librepomgr/webapi/routes.cpp +++ b/librepomgr/webapi/routes.cpp @@ -324,24 +324,24 @@ void getPackages(const Params ¶ms, ResponseHandler &&handler) // retrieve packages from AUR auto log = LogContext(); auto handleAurResponse - = [handler{ std::move(handler) }, params{ std::move(params) }, document{ make_shared(std::move(document)) }, + = [handler{ std::move(handler) }, params{ std::move(params) }, document{ std::move(document) }, details](WebClient::AurQuerySession::ContainerType &&queriedAurPackages) mutable { auto aurPackageSearchResults = std::vector(); aurPackageSearchResults.reserve(queriedAurPackages.size()); auto configLock = params.setup.config.lockToRead(); - auto documentArray = document->GetArray(); + auto documentArray = document.GetArray(); if (details) { for (auto &[packageID, package] : queriedAurPackages) { - ReflectiveRapidJSON::JsonReflector::push(std::move(package), documentArray, document->GetAllocator()); + ReflectiveRapidJSON::JsonReflector::push(std::move(package), documentArray, document.GetAllocator()); } } else if (!queriedAurPackages.empty()) { for (auto &[packageID, package] : queriedAurPackages) { ReflectiveRapidJSON::JsonReflector::push( - PackageSearchResult{ params.setup.config.aur, std::move(package), packageID }, documentArray, document->GetAllocator()); + PackageSearchResult{ params.setup.config.aur, std::move(package), packageID }, documentArray, document.GetAllocator()); } } configLock.unlock(); - handler(makeJson(params.request(), *document, params.target.hasPrettyFlag())); + handler(makeJson(params.request(), document, params.target.hasPrettyFlag())); }; if (mode == Mode::Name) { WebClient::queryAurPackages(log, params.setup, neededAurPackages, params.setup.webServer.ioContext, std::move(handleAurResponse));