summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gentoobrowse-api/client/helpers.h15
-rw-r--r--gentoobrowse-api/client/search.cpp5
2 files changed, 9 insertions, 11 deletions
diff --git a/gentoobrowse-api/client/helpers.h b/gentoobrowse-api/client/helpers.h
index 96399d2..4caf7f9 100644
--- a/gentoobrowse-api/client/helpers.h
+++ b/gentoobrowse-api/client/helpers.h
@@ -7,21 +7,20 @@
#include <map>
#include <mutex>
-template<typename Key, typename Target, typename Collection, typename Proxy>
+template<typename Target, typename Key, typename Collection, typename Proxy, typename CollectionMember>
std::map<Key, Target>
-asyncMapRelated(const Collection & collection, const Proxy & p, Key Collection::value_type::element_type::*member,
+asyncMapRelated(const Collection & collection, const Proxy & p, Key CollectionMember::*member,
std::future<Target> (Proxy::element_type::*b)(Key, const ::Ice::Context &))
{
- std::map<Key, Target> rtn;
std::map<Key, std::future<Target>> jobs;
for (const auto & item : collection) {
- Key v = item.get()->*member;
- if (jobs.find(v) == jobs.end()) {
- jobs.insert({v, (p.get()->*b)(v, Ice::noExplicitContext)});
+ if (Key v = item.get()->*member; jobs.find(v) == jobs.end()) {
+ jobs.emplace(v, (p.get()->*b)(v, Ice::noExplicitContext));
}
}
- for (auto & j : jobs) {
- rtn.insert({j.first, j.second.get()});
+ std::map<Key, Target> rtn;
+ for (auto & [cat, future] : jobs) {
+ rtn.emplace(cat, future.get());
}
return rtn;
}
diff --git a/gentoobrowse-api/client/search.cpp b/gentoobrowse-api/client/search.cpp
index 9d1c7b4..5de8d3b 100644
--- a/gentoobrowse-api/client/search.cpp
+++ b/gentoobrowse-api/client/search.cpp
@@ -10,9 +10,8 @@ public:
run(const Gentoo::PortagePrxPtr & p, const std::vector<std::string> & a) const override
{
auto pkgs = p->getPackagesSearch(boost::algorithm::join(a, " "));
- auto cats = asyncMapRelated(pkgs, p, &Gentoo::Package::categoryid,
- (std::future<Gentoo::CategoryPtr>(Gentoo::PortagePrx::*)(Ice::Int, const ::Ice::Context &))
- & Gentoo::PortagePrx::getCategoryAsync);
+ auto cats = asyncMapRelated<Gentoo::CategoryPtr>(
+ pkgs, p, &Gentoo::Package::categoryid, &Gentoo::PortagePrx::getCategoryAsync);
fprintbf(stdout, "Found %d packages:\n", pkgs.size());
for (const auto & pkg : pkgs) {
fprintbf(stdout, "%s / %s\n\t%s\n", cats[pkg->categoryid]->name, pkg->name, pkg->description);