From b94fe63873952da45fcea20954e95240c12ab16d Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Sun, 9 Dec 2018 10:59:07 +0100
Subject: [PATCH] [BL] Add findIndex(container, element) algorithm.

---
 BaseLib/Algorithm.h | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/BaseLib/Algorithm.h b/BaseLib/Algorithm.h
index 8b93068185d..9324b309bb5 100644
--- a/BaseLib/Algorithm.h
+++ b/BaseLib/Algorithm.h
@@ -225,4 +225,21 @@ bool contains(Container const& container,
            container.end();
 }
 
+
+/// Returns the index of first element in container or, if the element is not
+/// found a std::size_t maximum value.
+///
+/// The maximum value of std::size_t is chosen, because such an index cannot
+/// exist in a container; the maximum index is std::size_t::max-1.
+template <typename Container>
+std::size_t findIndex(Container const& container,
+                      typename Container::value_type const& element)
+{
+    auto const it = std::find(container.begin(), container.end(), element);
+    if (it == container.end())
+    {
+        return std::numeric_limits<std::size_t>::max();
+    }
+    return std::distance(container.begin(), it);
+}
 }  // namespace BaseLib
-- 
GitLab