forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user