reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/browser.cpp | 29++++++++++++++++++++---------
Msrc/browser.hpp | 9+++++----
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 {