Utils: Add container wrapper for setUnionMerge

It works with contiguous arrays like std::vector but it is not so useful
for other containers anyway. Use the iterator interface for std::array.

Change-Id: I9f5dd665d38ca642bbd81e1925445127ea579c22
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Marco Bubke
2018-08-28 12:26:50 +02:00
parent a68e8c5b69
commit 6386cd54eb

View File

@@ -811,5 +811,41 @@ OutputIt setUnionMerge(InputIt1 first1,
std::less<decltype(*first1)>{}); std::less<decltype(*first1)>{});
} }
template<class OutputContainer,
class InputContainer1,
class InputContainer2,
class Merge,
class Compare>
OutputContainer setUnionMerge(InputContainer1 &&input1,
InputContainer2 &&input2,
Merge merge,
Compare comp)
{
OutputContainer results;
results.reserve(input1.size() + input2.size());
setUnionMerge(std::make_move_iterator(std::begin(input1)),
std::make_move_iterator(std::end(input1)),
std::make_move_iterator(std::begin(input2)),
std::make_move_iterator(std::end(input2)),
std::back_inserter(results),
merge,
comp);
return results;
}
template<class OutputContainer,
class InputContainer1,
class InputContainer2,
class Merge>
OutputContainer setUnionMerge(InputContainer1 &&input1,
InputContainer2 &&input2,
Merge merge)
{
return setUnionMerge(std::forward<InputContainer1>(input1),
std::forward<InputContainer2>(input2),
merge,
std::less<decltype(*std::begin(input1))>{});
}
} // namespace Utils } // namespace Utils