diff --git a/include/etl/algorithm.h b/include/etl/algorithm.h index d0d8eaba..5debe70e 100644 --- a/include/etl/algorithm.h +++ b/include/etl/algorithm.h @@ -789,6 +789,15 @@ namespace etl return (memcmp(first1, first2, sizeof(value_t) * (last1 - first1)) == 0); } + + template + ETL_NODISCARD + bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2) + { + return (etl::distance(first1, last1) == etl::distance(first2, last2)) && + etl::equal(first1, last1, first2); + } + #else //*************************************************************************** // equal @@ -798,6 +807,23 @@ namespace etl { return std::equal(first1, last1, first2); } + +#if ETL_CPP14_SUPPORTED + template + ETL_NODISCARD + bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2) + { + return std::equal(first1, last1, first2, last2); + } +#else + template + ETL_NODISCARD + bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2) + { + return (etl::distance(first1, last1) == etl::distance(first2, last2)) && + etl::equal(first1, last1, first2); + } +#endif #endif #if ETL_NOT_USING_STL diff --git a/test/test_algorithm.cpp b/test/test_algorithm.cpp index aefc9c50..1db1efef 100644 --- a/test/test_algorithm.cpp +++ b/test/test_algorithm.cpp @@ -703,6 +703,10 @@ namespace { CHECK(etl::equal(std::begin(dataV), std::end(dataV), std::begin(dataL))); CHECK(!etl::equal(std::begin(dataSL), std::end(dataSL), std::begin(dataL))); + + int small[] = { dataS[0] }; + CHECK(etl::equal(std::begin(dataV), std::end(dataV), std::begin(dataL), std::end(dataL))); + CHECK(!etl::equal(std::begin(dataS), std::end(dataS), std::begin(small), std::end(small))); } //*************************************************************************