16#include "pw_bytes/alignment.h"
17#include "pw_span/internal/config.h"
18#include "pw_span/span.h"
23template <
class ResultT,
size_t kSourceExtentBytes>
24using SpanFromBytes = span<ResultT,
25 (kSourceExtentBytes == dynamic_extent
27 : kSourceExtentBytes /
sizeof(ResultT))>;
53template <
class ResultT,
size_t kSourceExtentBytes>
54internal::SpanFromBytes<ResultT, kSourceExtentBytes>
span_cast(
55 span<std::byte, kSourceExtentBytes> bytes) {
56 static_assert(
sizeof(ResultT) == 1);
58 ResultT*
const ptr =
reinterpret_cast<ResultT*
>(bytes.data());
59 const size_t count = bytes.size() /
sizeof(ResultT);
62 internal::SpanFromBytes<ResultT, kSourceExtentBytes>{ptr, count};
64 _PW_SPAN_ASSERT(IsAlignedAs<ResultT>(result.data()));
65 _PW_SPAN_ASSERT(result.size_bytes() == bytes.size_bytes());
93template <
class ResultT,
size_t kSourceExtentBytes>
94internal::SpanFromBytes<const ResultT, kSourceExtentBytes>
span_cast(
95 span<const std::byte, kSourceExtentBytes> bytes) {
96 static_assert(
sizeof(ResultT) == 1);
98 const ResultT*
const ptr =
reinterpret_cast<const ResultT*
>(bytes.data());
99 const size_t count = bytes.size() /
sizeof(ResultT);
102 internal::SpanFromBytes<const ResultT, kSourceExtentBytes>{ptr, count};
104 _PW_SPAN_ASSERT(IsAlignedAs<const ResultT>(result.data()));
105 _PW_SPAN_ASSERT(result.size_bytes() == bytes.size_bytes());
internal::SpanFromBytes< ResultT, kSourceExtentBytes > span_cast(span< std::byte, kSourceExtentBytes > bytes)
Definition: cast.h:54
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27