commit b48479632419d43e0de835758db2ad7b2ecf255e
parent 47fce5e59c68c7ac1306b7e25dd50d9794133f4f
Author: cfillion <cfillion@users.noreply.github.com>
Date: Fri, 25 Aug 2017 22:25:53 -0400
browser: don't make unnecessary temporary objects when comparing rows
Diffstat:
2 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/src/browser.cpp b/src/browser.cpp
@@ -772,7 +772,7 @@ string Browser::getValue(const Column col, const Entry &entry) const
return Package::displayName(regEntry.package, regEntry.description);
}
case CategoryColumn:
- return pkg ? pkg->category()->name() : regEntry.category;
+ return entry.categoryName();
case VersionColumn:
if(entry.test(InstalledFlag))
display = regEntry.version.toString();
@@ -790,7 +790,7 @@ string Browser::getValue(const Column col, const Entry &entry) const
case TypeColumn:
return pkg ? pkg->displayType() : Package::displayType(regEntry.type);
case RemoteColumn:
- return pkg ? pkg->category()->index()->name() : regEntry.remote;
+ return entry.indexName();
case TimeColumn:
return ver ? ver->time().toString() : string();
}
@@ -1105,12 +1105,23 @@ bool Browser::apply()
return true;
}
-auto Browser::Entry::hash() const -> Hash
+const string &Browser::Entry::indexName() const
{
- if(package) {
- return make_tuple(package->category()->index()->name(),
- package->category()->name(), package->name());
- }
- else
- return make_tuple(regEntry.remote, regEntry.category, regEntry.package);
+ return package ? package->category()->index()->name() : regEntry.remote;
+}
+
+const string &Browser::Entry::categoryName() const
+{
+ return package ? package->category()->name() : regEntry.category;
+}
+
+const string &Browser::Entry::packageName() const
+{
+ return package ? package->name() : regEntry.package;
+}
+
+bool Browser::Entry::operator==(const Entry &o) const
+{
+ return indexName() == o.indexName() && categoryName() == o.categoryName() &&
+ packageName() == o.packageName();
}
diff --git a/src/browser.hpp b/src/browser.hpp
@@ -62,8 +62,6 @@ private:
};
struct Entry {
- typedef std::tuple<std::string, std::string, std::string> Hash;
-
int flags;
Registry::Entry regEntry;
IndexPtr index;
@@ -71,13 +69,16 @@ private:
const Version *latest;
const Version *current;
+ const std::string &indexName() const;
+ const std::string &categoryName() const;
+ const std::string &packageName() const;
+
boost::optional<const Version *> target;
boost::optional<bool> pin;
- Hash hash() const;
bool test(Flag f) const { return (flags & f) != 0; }
bool canPin() const { return target ? *target != nullptr : test(InstalledFlag); }
- bool operator==(const Entry &o) const { return hash() == o.hash(); }
+ bool operator==(const Entry &o) const;
};
enum Column {