Fixed buggy CSequence::sortBy when sorting by multiple members.

Implementation of Predicates::MemberLess was wrong, so replaced it with a
simpler one. Also added a regression test and removed unused code.
This commit is contained in:
Mat Sutcliffe
2018-11-30 15:50:52 +00:00
committed by Klaus Basan
parent f2bd767c63
commit 8a058202ed
3 changed files with 32 additions and 33 deletions

View File

@@ -62,15 +62,7 @@ namespace BlackMisc
{
return [vs...](const auto &a, const auto &b)
{
bool less = true;
bool greater = false;
tupleForEach(std::make_tuple(vs...), [ & ](auto member)
{
less = less && ! greater && (a.*member)() < (b.*member)();
greater = (b.*member)() < (a.*member)();
});
Q_UNUSED(greater); // CPP style check
return less;
return std::forward_as_tuple((a.*vs)()...) < std::forward_as_tuple((b.*vs)()...);
};
}
@@ -119,9 +111,7 @@ namespace BlackMisc
{
return [vs...](const auto &a, const auto &b)
{
bool equal = true;
tupleForEach(std::make_tuple(vs...), [ & ](auto member) { equal = equal && (a.*member)() == (b.*member)(); });
return equal;
return std::forward_as_tuple((a.*vs)()...) == std::forward_as_tuple((b.*vs)()...);
};
}