4#include <range/v3/algorithm/copy.hpp>
5#include <range/v3/algorithm/transform.hpp>
6#include <range/v3/iterator/traits.hpp>
7#include <range/v3/range/access.hpp>
8#include <range/v3/range/concepts.hpp>
9#include <range/v3/range/primitives.hpp>
10#include <range/v3/range/traits.hpp>
21template <std::
size_t Size>
34 using iterator = std::array<std::byte, Size>::iterator;
69 std::size_t
size()
const {
return data.size(); }
74 requires requires(T rng, std::size_t
size, std::byte byte) {
76 { std::to_integer<T::value_type>(
byte) };
78 constexpr T
to()
const {
80 result.resize(
size());
82 ranges::transform(*
this, result.begin(), [](std::byte value) { return std::to_integer<T::value_type>(value); });
101 template <ranges::range Range>
103 auto raw_bytes = std::as_bytes(
104 std::span{ranges::begin(std::forward<Range>(range)), ranges::end(std::forward<Range>(range))});
107 res.from_range(raw_bytes);
111 template <
typename... Ts>
115 auto it = ranges::begin(result);
117 (ranges::copy(std::bit_cast<std::array<std::byte,
sizeof(Ts)>>(args), std::exchange(it, it +
sizeof(Ts))), ...);
122 std::array<std::byte, Size>
data;
125 template <ranges::range Range>
126 requires requires(ranges::range_value_t<Range> value) {
127 { std::byte{value} };
129 constexpr void from_range(Range&& range) {
131 Expects(ranges::size(range) < Size);
132 ranges::transform(std::forward<Range>(range),
data.begin(), [](std::byte value) { return std::byte{value}; });
135 static constexpr auto TRY_CONSTEXPR = []<std::size_t>() {};
150static_assert(std::is_aggregate_v<ByteArray<1>>);
Definition byte_array.hpp:23
std::allocator< std::byte > allocator_type
Definition byte_array.hpp:27
auto begin()
Definition byte_array.hpp:57
constexpr T to() const
T should be a stdlib-compatible container type where std::byte is convertible to T::value_type.
Definition byte_array.hpp:78
static constexpr ByteArray bit_cast(const Ts &... args)
Definition byte_array.hpp:112
std::array< std::byte, Size >::const_iterator const_iterator
Definition byte_array.hpp:35
auto end()
Definition byte_array.hpp:63
std::array< std::byte, Size >::reverse_iterator reverse_iterator
Definition byte_array.hpp:36
std::ptrdiff_t difference_type
Definition byte_array.hpp:29
std::size_t size() const
Definition byte_array.hpp:69
std::array< std::byte, Size > data
Definition byte_array.hpp:122
value_type * pointer
Definition byte_array.hpp:32
auto cbegin() const
Definition byte_array.hpp:61
std::array< std::byte, Size >::const_reverse_iterator const_reverse_iterator
Definition byte_array.hpp:37
value_type & reference
Definition byte_array.hpp:30
auto begin() const
Definition byte_array.hpp:59
const value_type & const_reference
Definition byte_array.hpp:31
auto cend() const
Definition byte_array.hpp:67
const value_type * const_pointer
Definition byte_array.hpp:33
std::array< std::byte, Size >::iterator iterator
Definition byte_array.hpp:34
auto end() const
Definition byte_array.hpp:65
std::byte value_type
Definition byte_array.hpp:26
static constexpr ByteArray bit_cast_range(Range &&range)
Definition byte_array.hpp:102
std::size_t size_type
Definition byte_array.hpp:28
Definition asm_buffer.hpp:19