Compare commits

...

1 Commits

Author SHA1 Message Date
Martchus 8bb987d1be WIP: Use `std::move_only_function` for callbacks
WIP, waiting for GCC 12
2022-03-22 21:14:06 +01:00
3 changed files with 7 additions and 7 deletions

View File

@ -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})

View File

@ -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);

View File

@ -324,24 +324,24 @@ void getPackages(const Params &params, 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));