Utils: Make Utils::indexOf work with all iterator types

Change-Id: I5b9b577bdfb26bd03583ca8349b960625124a929
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2017-12-01 11:30:41 +01:00
parent 33fc20ab51
commit b712b1bc7c

View File

@@ -161,18 +161,6 @@ typename T::element_type *findOr(const C<T, AllocC> &container, typename T::elem
return findOr(container, other, std::mem_fn(function));
}
template<typename T, typename F>
int indexOf(const T &container, F function)
{
typename T::const_iterator begin = std::begin(container);
typename T::const_iterator end = std::end(container);
typename T::const_iterator it = std::find_if(begin, end, function);
if (it == end)
return -1;
return it - begin;
}
template<typename T, typename F>
typename T::value_type findOrDefault(const T &container, F function)
{
@@ -202,6 +190,22 @@ typename T::element_type *findOrDefault(const C<T, AllocC> &container, R (S::*fu
}
//////////////////
// index of:
//////////////////
template<typename C, typename F>
Q_REQUIRED_RESULT
int indexOf(const C& container, F function)
{
typename C::const_iterator begin = std::begin(container);
typename C::const_iterator end = std::end(container);
typename C::const_iterator it = std::find_if(begin, end, function);
return it == end ? -1 : std::distance(begin, it);
}
//////////////////
// max element
//////////////////