mirror of
https://github.com/ETLCPP/etl.git
synced 2026-05-01 03:19:10 +08:00
Merge branch 'hotfix/#737-etl-equal-specialisation-for-etl--span-is-deduced-wrongly-when-using-STL-and-CPP20' into development
This commit is contained in:
commit
5fbf6c7684
@ -560,6 +560,7 @@ namespace etl
|
||||
//***************************************************************************
|
||||
// equal
|
||||
#if ETL_USING_STL && ETL_USING_CPP20
|
||||
// Three parameter
|
||||
template <typename TIterator1, typename TIterator2>
|
||||
[[nodiscard]]
|
||||
constexpr
|
||||
@ -568,6 +569,7 @@ namespace etl
|
||||
return std::equal(first1, last1, first2);
|
||||
}
|
||||
|
||||
// Three parameter + predicate
|
||||
template <typename TIterator1, typename TIterator2, typename TPredicate>
|
||||
[[nodiscard]]
|
||||
constexpr
|
||||
@ -575,8 +577,27 @@ namespace etl
|
||||
{
|
||||
return std::equal(first1, last1, first2, predicate);
|
||||
}
|
||||
|
||||
// Four parameter
|
||||
template <typename TIterator1, typename TIterator2>
|
||||
[[nodiscard]]
|
||||
constexpr
|
||||
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2)
|
||||
{
|
||||
return std::equal(first1, last1, first2, last2);
|
||||
}
|
||||
|
||||
// Four parameter + Predicate
|
||||
template <typename TIterator1, typename TIterator2, typename TPredicate>
|
||||
[[nodiscard]]
|
||||
constexpr
|
||||
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
|
||||
{
|
||||
return std::equal(first1, last1, first2, last2, predicate);
|
||||
}
|
||||
|
||||
#else
|
||||
// Not pointer types or not trivially copyable.
|
||||
|
||||
template <typename TIterator1, typename TIterator2>
|
||||
ETL_NODISCARD
|
||||
ETL_CONSTEXPR14
|
||||
@ -639,8 +660,8 @@ namespace etl
|
||||
// Four parameter, Predicate
|
||||
template <typename TIterator1, typename TIterator2, typename TPredicate>
|
||||
ETL_NODISCARD
|
||||
ETL_CONSTEXPR14
|
||||
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
|
||||
ETL_CONSTEXPR14
|
||||
bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TIterator2 last2, TPredicate predicate)
|
||||
{
|
||||
while ((first1 != last1) && (first2 != last2))
|
||||
{
|
||||
|
||||
@ -42,12 +42,12 @@ namespace
|
||||
{
|
||||
static const size_t SIZE = 10UL;
|
||||
|
||||
typedef etl::array<int, SIZE> EtlData;
|
||||
typedef std::array<int, SIZE> StlData;
|
||||
typedef std::vector<int> StlVData;
|
||||
using EtlData = etl::array<int, SIZE>;
|
||||
using StlData = std::array<int, SIZE>;
|
||||
using StlVData = std::vector<int>;
|
||||
|
||||
typedef etl::span<int> View;
|
||||
typedef etl::span<const int> CView;
|
||||
using View = etl::span<int>;
|
||||
using CView = etl::span<const int>;
|
||||
|
||||
EtlData etldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
StlData stldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
|
||||
@ -47,6 +47,7 @@ namespace
|
||||
typedef std::vector<int> StlVData;
|
||||
|
||||
typedef etl::span<int, 10U> View;
|
||||
typedef etl::span<int, 9U> SView;
|
||||
typedef etl::span<const int, 10U> CView;
|
||||
|
||||
EtlData etldata = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
@ -998,6 +999,7 @@ namespace
|
||||
etl::array<int, 10> data1{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
etl::array<int, 10> data2{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
etl::array<int, 10> data3{ 0, 1, 2, 3, 4, 4, 6, 7, 8, 9 };
|
||||
etl::array<int, 9> data4{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
|
||||
View view1{ data1 };
|
||||
View view2{ data1 };
|
||||
@ -1005,18 +1007,21 @@ namespace
|
||||
View view4{ data3 };
|
||||
View view6;
|
||||
View view7;
|
||||
SView view8{ data4 };
|
||||
|
||||
CHECK_TRUE(etl::equal(view1, view2));
|
||||
CHECK_TRUE(etl::equal(view1, view3));
|
||||
CHECK_FALSE(etl::equal(view1, view4));
|
||||
CHECK_TRUE(etl::equal(view6, view6));
|
||||
CHECK_TRUE(etl::equal(view6, view7));
|
||||
CHECK_FALSE(etl::equal(view1, view8));
|
||||
|
||||
CHECK_TRUE(view1 == view2);
|
||||
CHECK_FALSE(view1 == view3);
|
||||
CHECK_FALSE(view1 == view4);
|
||||
CHECK_TRUE(view6 == view6);
|
||||
CHECK_TRUE(view6 == view7);
|
||||
CHECK_FALSE(view1 == view8);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user