mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
Specialize gsl::at for span
span being a view and not a container, the generic version of gsl::at is not valid any more for span. This commits adds a specialization of gsl::at for span
This commit is contained in:
parent
93b3258e36
commit
134f2db5d9
8
gsl/span
8
gsl/span
@ -653,6 +653,14 @@ as_writeable_bytes(span<ElementType, Extent> s) noexcept
|
|||||||
return {reinterpret_cast<byte*>(s.data()), s.size_bytes()};
|
return {reinterpret_cast<byte*>(s.data()), s.size_bytes()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Specialization of gsl::at for span
|
||||||
|
template <class ElementType, std::ptrdiff_t Extent>
|
||||||
|
constexpr ElementType& at(const span<ElementType ,Extent>& s, size_t index)
|
||||||
|
{
|
||||||
|
// No bounds checking here because it is done in span::operator[] called below
|
||||||
|
return s[index];
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace gsl
|
} // namespace gsl
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -1354,6 +1354,13 @@ SUITE(span_tests)
|
|||||||
CHECK(match[0].first == f_it);
|
CHECK(match[0].first == f_it);
|
||||||
CHECK(match[0].second == (f_it + 1));
|
CHECK(match[0].second == (f_it + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(interop_with_gsl_at)
|
||||||
|
{
|
||||||
|
int arr[5] = {1, 2, 3, 4, 5};
|
||||||
|
span<int> s{arr};
|
||||||
|
CHECK(at(s,0) == 1 && at(s,1) == 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int, const char* []) { return UnitTest::RunAllTests(); }
|
int main(int, const char* []) { return UnitTest::RunAllTests(); }
|
||||||
|
Loading…
Reference in New Issue
Block a user