From b712b1bc7cc3bddca0780d2e8b8d3611ab134376 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 1 Dec 2017 11:30:41 +0100 Subject: Utils: Make Utils::indexOf work with all iterator types Change-Id: I5b9b577bdfb26bd03583ca8349b960625124a929 Reviewed-by: Eike Ziller --- src/libs/utils/algorithm.h | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/libs/utils/algorithm.h') diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index ac4bd49bc8..fef4e07013 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -161,18 +161,6 @@ typename T::element_type *findOr(const C &container, typename T::elem return findOr(container, other, std::mem_fn(function)); } -template -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::value_type findOrDefault(const T &container, F function) { @@ -202,6 +190,22 @@ typename T::element_type *findOrDefault(const C &container, R (S::*fu } +////////////////// +// index of: +////////////////// + +template +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 ////////////////// -- cgit v1.2.1