11 #include <type_traits> 77 size_t size = span.size();
78 T& back = span.back();
79 span = span.first(size - 1);
86 return std::as_bytes(std::span{v});
91 return std::as_writable_bytes(std::span{std::forward<V>(v)});
95 inline unsigned char*
UCharCast(
char* c) {
return reinterpret_cast<unsigned char*
>(c); }
96 inline unsigned char*
UCharCast(
unsigned char* c) {
return c; }
97 inline unsigned char*
UCharCast(
signed char* c) {
return reinterpret_cast<unsigned char*
>(c); }
98 inline unsigned char*
UCharCast(std::byte* c) {
return reinterpret_cast<unsigned char*
>(c); }
99 inline const unsigned char*
UCharCast(
const char* c) {
return reinterpret_cast<const unsigned char*
>(c); }
100 inline const unsigned char*
UCharCast(
const unsigned char* c) {
return c; }
101 inline const unsigned char*
UCharCast(
const signed char* c) {
return reinterpret_cast<const unsigned char*
>(c); }
102 inline const unsigned char*
UCharCast(
const std::byte* c) {
return reinterpret_cast<const unsigned char*
>(c); }
104 template <
typename B>
108 template <
typename T,
size_t N> constexpr
auto UCharSpanCast(std::span<T, N>
s) {
return std::span<std::remove_pointer_t<decltype(
UCharCast(
s.data()))>, N>{
UCharCast(
s.data()),
s.size()}; }
114 #endif // BITCOIN_SPAN_H auto MakeByteSpan(const V &v) noexcept
constexpr auto MakeUCharSpan(const V &v) -> decltype(UCharSpanCast(std::span
Like the std::span constructor, but for (const) unsigned char member types only.
T & SpanPopBack(std::span< T > &span)
A span is an object that can refer to a contiguous sequence of objects.
auto MakeWritableByteSpan(V &&v) noexcept
constexpr auto MakeWritableUCharSpan(V &&v) -> decltype(UCharSpanCast(std::span
constexpr auto UCharSpanCast(std::span< T, N > s)
unsigned char * UCharCast(char *c)
#define T(expected, seed, data)