34 #include <type_traits> 61 return std::is_same<T, U>() ||
62 (std::is_const<T>() && std::is_same<T, with_const>());
77 constexpr
span(std::nullptr_t) noexcept :
span() {}
80 template<
typename U,
typename =
typename std::enable_if<safe_conversion<U>()>::type>
81 constexpr
span(U*
const src_ptr,
const std::size_t
count) noexcept
85 template<std::
size_t N>
86 constexpr
span(
T (&src)[N]) noexcept :
span(src, N) {}
88 constexpr
span(
const span&) noexcept =
default;
125 return {src.data(), src.size()};
133 return {src.data(), src.size()};
139 return !std::is_standard_layout<T>() ||
alignof(
T) != 1;
146 static_assert(!has_padding<T>(),
"source type may have padding");
147 return {
reinterpret_cast<const std::uint8_t*
>(src.data()), src.size_bytes()};
154 using value_type =
typename T::value_type;
155 static_assert(!std::is_empty<value_type>(),
"empty value types will not work -> sizeof == 1");
156 static_assert(!has_padding<value_type>(),
"source value type may have padding");
157 return {
reinterpret_cast<std::uint8_t*
>(src.data()), src.size() *
sizeof(value_type)};
164 static_assert(!std::is_empty<T>(),
"empty types will not work -> sizeof == 1");
165 static_assert(!has_padding<T>(),
"source type may have padding");
166 return {
reinterpret_cast<const std::uint8_t*
>(std::addressof(src)),
sizeof(
T)};
173 static_assert(!std::is_empty<T>(),
"empty types will not work -> sizeof == 1");
174 static_assert(!has_padding<T>(),
"source type may have padding");
175 return {
reinterpret_cast<std::uint8_t*
>(std::addressof(src)),
sizeof(
T)};
179 template<
typename T,
typename U>
182 static_assert(std::is_same<typename U::value_type, char>(),
"unexpected source type");
183 static_assert(std::is_same<T, char>() || std::is_same<T, unsigned char>() || std::is_same<T, int8_t>() || std::is_same<T, uint8_t>(),
"Unexpected destination type");
184 return {
reinterpret_cast<const T*
>(
s.data()),
s.size()};
std::size_t size_type
Definition: span.h:67
const uint32_t T[512]
Definition: groestl_tables.h:36
span< const std::uint8_t > as_byte_span(const T &src) noexcept
Definition: span.h:162
span & operator=(const span &) noexcept=default
int * count
Definition: gmock_stress_test.cc:176
constexpr const_iterator cbegin() const noexcept
Definition: span.h:102
static constexpr bool safe_conversion() noexcept
Definition: span.h:57
int type
Definition: superscalar.cpp:50
const char * s
Definition: minissdp.c:596
std::size_t len
Definition: span.h:117
const const std::uint8_t * const_pointer
Definition: span.h:70
span< std::uint8_t > as_mut_byte_span(T &src) noexcept
Definition: span.h:171
Non-owning sequence of data. Does not deep copy.
Definition: span.h:54
unsigned char uint8_t
Definition: stdint.h:124
const std::uint8_t value_type
Definition: span.h:66
constexpr bool has_padding() noexcept
Definition: span.h:137
constexpr std::size_t size() const noexcept
Definition: span.h:109
constexpr span< typename T::value_type > to_mut_span(T &src)
Definition: span.h:130
constexpr const_iterator cend() const noexcept
Definition: span.h:105
const_pointer const_iterator
Definition: span.h:74
#define min(a, b)
Definition: oaes_lib.c:78
constexpr span< std::uint8_t > to_mut_byte_span(T &src)
Definition: span.h:152
constexpr iterator end() const noexcept
Definition: span.h:104
constexpr span(std::nullptr_t) noexcept
Definition: span.h:77
const T & operator[](size_t idx) const noexcept
Definition: span.h:113
std::size_t remove_prefix(std::size_t amount) noexcept
Definition: span.h:93
constexpr span(U *const src_ptr, const std::size_t count) noexcept
Prevent derived-to-base conversions; invalid in this context.
Definition: span.h:81
TODO: (mj-xmr) This will be reduced in an another PR.
Definition: byte_slice.h:39
constexpr span< const typename T::value_type > to_span(const T &src)
Definition: span.h:122
span< const T > strspan(const U &s) noexcept
make a span from a std::string
Definition: span.h:180
const const std::uint8_t & const_reference
Definition: span.h:72
T & operator[](size_t idx) noexcept
Definition: span.h:112
constexpr iterator begin() const noexcept
Definition: span.h:101
constexpr std::size_t size_bytes() const noexcept
Definition: span.h:110
constexpr span() noexcept
Definition: span.h:76
constexpr bool empty() const noexcept
Definition: span.h:107
const std::uint8_t * pointer
Definition: span.h:69
constexpr span(T(&src)[N]) noexcept
Conversion from C-array. Prevents common bugs with sizeof + arrays.
Definition: span.h:86
#define const
Definition: ipfrdr.c:80
T * ptr
Definition: span.h:116
std::ptrdiff_t difference_type
Definition: span.h:68
pointer iterator
Definition: span.h:73
span< const std::uint8_t > to_byte_span(const span< const T > src) noexcept
Definition: span.h:144
Definition: blockchain_usage.cpp:71
constexpr pointer data() const noexcept
Definition: span.h:108