Takes fn by forwarding ref. in for_each_pair, resolves #4148
This commit is contained in:
		
							parent
							
								
									27ed69b08f
								
							
						
					
					
						commit
						b68d79407e
					
				| @ -3,6 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| #include <iterator> | #include <iterator> | ||||||
| #include <numeric> | #include <numeric> | ||||||
|  | #include <utility> | ||||||
| 
 | 
 | ||||||
| namespace osrm | namespace osrm | ||||||
| { | { | ||||||
| @ -12,11 +13,11 @@ namespace util | |||||||
| // TODO: check why this is not an option here:
 | // TODO: check why this is not an option here:
 | ||||||
| // std::adjacent_find(begin, end, [=](const auto& l, const auto& r){ return function(), false; });
 | // std::adjacent_find(begin, end, [=](const auto& l, const auto& r){ return function(), false; });
 | ||||||
| template <typename ForwardIterator, typename Function> | template <typename ForwardIterator, typename Function> | ||||||
| Function for_each_pair(ForwardIterator begin, ForwardIterator end, Function function) | void for_each_pair(ForwardIterator begin, ForwardIterator end, Function &&function) | ||||||
| { | { | ||||||
|     if (begin == end) |     if (begin == end) | ||||||
|     { |     { | ||||||
|         return function; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto next = begin; |     auto next = begin; | ||||||
| @ -24,19 +25,18 @@ Function for_each_pair(ForwardIterator begin, ForwardIterator end, Function func | |||||||
| 
 | 
 | ||||||
|     while (next != end) |     while (next != end) | ||||||
|     { |     { | ||||||
|         function(*begin, *next); |         std::forward<Function>(function)(*begin, *next); | ||||||
|         begin = std::next(begin); |         begin = std::next(begin); | ||||||
|         next = std::next(next); |         next = std::next(next); | ||||||
|     } |     } | ||||||
|     return function; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <class ContainerT, typename Function> | template <class ContainerT, typename Function> | ||||||
| Function for_each_pair(ContainerT &container, Function function) | void for_each_pair(ContainerT &container, Function &&function) | ||||||
| { | { | ||||||
|     using std::begin; |     using std::begin; | ||||||
|     using std::end; |     using std::end; | ||||||
|     return for_each_pair(begin(container), end(container), function); |     for_each_pair(begin(container), end(container), std::forward<Function>(function)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace util
 | } // namespace util
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user