WIP: Use `std::move_only_function` for callbacks
WIP, waiting for GCC 12
This commit is contained in:
parent
7c627e6a12
commit
8bb987d1be
|
@ -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})
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace LibRepoMgr {
|
|||
template <typename SessionResponse> class MultiSession {
|
||||
public:
|
||||
using ContainerType = std::vector<SessionResponse>;
|
||||
using HandlerType = std::function<void(ContainerType &&)>;
|
||||
using HandlerType = std::move_only_function<void(ContainerType &&)>;
|
||||
using SharedPointerType = std::shared_ptr<MultiSession<SessionResponse>>;
|
||||
|
||||
explicit MultiSession(boost::asio::io_context &ioContext, HandlerType &&handler);
|
||||
|
|
|
@ -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<RAPIDJSON_NAMESPACE::Document>(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<PackageSearchResult>();
|
||||
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));
|
||||
|
|
Loading…
Reference in New Issue