mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
small fixes to as_bytes() for pod types
- consistent enable_if clause between as_bytes and as_writable_bytes - Explicitly check for non-const as_writeable_bytes - move overloads to right section of the file
This commit is contained in:
parent
8def2618cb
commit
7f2645a4d9
29
gsl/span
29
gsl/span
@ -632,6 +632,22 @@ 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()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class T, class = std::enable_if_t<std::is_pod<T>::value>>
|
||||||
|
span<const byte, sizeof(T)>
|
||||||
|
as_bytes(const T& e) noexcept
|
||||||
|
{
|
||||||
|
return {reinterpret_cast<const byte*>(&e), sizeof(e)};
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T, class = std::enable_if_t<std::is_pod<T>::value>>
|
||||||
|
span<byte, sizeof(T)>
|
||||||
|
as_writeable_bytes(T& e) noexcept
|
||||||
|
{
|
||||||
|
static_assert(!std::is_const<T>::value,"Can't create a span of writeable bytes over a const object");
|
||||||
|
return {reinterpret_cast<byte*>(&e), sizeof(e)};
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// make_span() - Utility functions for creating spans
|
// make_span() - Utility functions for creating spans
|
||||||
//
|
//
|
||||||
@ -670,19 +686,6 @@ span<typename Ptr::element_type>
|
|||||||
make_span(Ptr& cont)
|
make_span(Ptr& cont)
|
||||||
{ return span<typename Ptr::element_type>(cont); }
|
{ return span<typename Ptr::element_type>(cont); }
|
||||||
|
|
||||||
template <class T, class = std::enable_if_t<std::is_pod<T>::value>>
|
|
||||||
span<const byte, sizeof(T)>
|
|
||||||
as_bytes(const T& e) noexcept
|
|
||||||
{
|
|
||||||
return{ reinterpret_cast<const byte*>(&e),sizeof(T) };
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T, class = std::enable_if_t<std::is_trivially_copyable<T>::value>>
|
|
||||||
span<byte, sizeof(T)>
|
|
||||||
as_writeable_bytes(T& e) noexcept
|
|
||||||
{
|
|
||||||
return{ reinterpret_cast<byte*>(&e),sizeof(T) };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Specialization of gsl::at for span
|
// Specialization of gsl::at for span
|
||||||
template <class ElementType, std::ptrdiff_t Extent>
|
template <class ElementType, std::ptrdiff_t Extent>
|
||||||
|
Loading…
Reference in New Issue
Block a user