diff --git a/keys.hh b/keys.hh index 337a24a639..605674f7fd 100644 --- a/keys.hh +++ b/keys.hh @@ -141,14 +141,16 @@ public: { } bool operator()(const prefix_view_on_full_tuple& k1, const PrefixTopLevel& k2) const { - return lexicographical_tri_compare(prefix_type->types().begin(), + return lexicographical_tri_compare( + prefix_type->types().begin(), prefix_type->types().end(), k1.begin(), k1.end(), prefix_type->begin(k2), prefix_type->end(k2), tri_compare) < 0; } bool operator()(const PrefixTopLevel& k1, const prefix_view_on_full_tuple& k2) const { - return lexicographical_tri_compare(prefix_type->types().begin(), + return lexicographical_tri_compare( + prefix_type->types().begin(), prefix_type->types().end(), prefix_type->begin(k1), prefix_type->end(k1), k2.begin(), k2.end(), tri_compare) < 0; @@ -183,14 +185,16 @@ public: { } bool operator()(const TopLevel& k1, const PrefixTopLevel& k2) const { - return lexicographical_tri_compare(prefix_type->types().begin(), + return lexicographical_tri_compare( + prefix_type->types().begin(), prefix_type->types().end(), full_type->begin(k1), full_type->end(k1), prefix_type->begin(k2), prefix_type->end(k2), tri_compare) < 0; } bool operator()(const PrefixTopLevel& k1, const TopLevel& k2) const { - return lexicographical_tri_compare(prefix_type->types().begin(), + return lexicographical_tri_compare( + prefix_type->types().begin(), prefix_type->types().end(), prefix_type->begin(k1), prefix_type->end(k1), full_type->begin(k2), full_type->end(k2), tri_compare) < 0; diff --git a/tuple.hh b/tuple.hh index 387f6e001a..53e407170a 100644 --- a/tuple.hh +++ b/tuple.hh @@ -233,7 +233,7 @@ public: if (_byte_order_comparable) { return compare_unsigned(b1, b2); } - return lexicographical_tri_compare(_types.begin(), + return lexicographical_tri_compare(_types.begin(), _types.end(), begin(b1), end(b1), begin(b2), end(b2), [] (auto&& type, auto&& v1, auto&& v2) { return type->compare(v1, v2); }); diff --git a/types.hh b/types.hh index 8df0784f2e..a0b25c2969 100644 --- a/types.hh +++ b/types.hh @@ -55,16 +55,18 @@ bool lexicographical_compare(TypesIterator types, InputIt1 first1, InputIt1 last // than zero when the first value is respectively smaller, equal or greater // than the second value. template -int lexicographical_tri_compare(TypesIterator types, InputIt1 first1, InputIt1 last1, - InputIt2 first2, InputIt2 last2, Compare comp) { - while (first1 != last1 && first2 != last2) { - auto c = comp(*types, *first1, *first2); +int lexicographical_tri_compare(TypesIterator types_first, TypesIterator types_last, + InputIt1 first1, InputIt1 last1, + InputIt2 first2, InputIt2 last2, + Compare comp) { + while (types_first != types_last && first1 != last1 && first2 != last2) { + auto c = comp(*types_first, *first1, *first2); if (c) { return c; } ++first1; ++first2; - ++types; + ++types_first; } bool e1 = first1 == last1; bool e2 = first2 == last2;