From 6386cd54eb31639d82cc569993f4b9e35c924c56 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 28 Aug 2018 12:26:50 +0200 Subject: [PATCH] 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 --- src/libs/utils/algorithm.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index 8b681441451..97fc1f626bc 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -811,5 +811,41 @@ OutputIt setUnionMerge(InputIt1 first1, std::less{}); } +template +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 +OutputContainer setUnionMerge(InputContainer1 &&input1, + InputContainer2 &&input2, + Merge merge) +{ + return setUnionMerge(std::forward(input1), + std::forward(input2), + merge, + std::less{}); +} } // namespace Utils