37 std::array<quint8, N> m_data;
38 static_assert(N <= (std::numeric_limits<std::uint8_t>::max)());
41 void assign_impl(
const void *p, size_t n)
49 QSmallByteArray() =
default;
51 template <std::size_t M, std::enable_if_t<M < N,
bool> =
true>
52 constexpr QSmallByteArray(
const QSmallByteArray<M> &other)
noexcept
56 template <std::size_t M, std::enable_if_t<M < N,
bool> =
true>
57 constexpr QSmallByteArray &operator=(
const QSmallByteArray<M> &other)
noexcept
63 template <
typename Container>
64 constexpr void assign(
const Container &c)
66 assign_impl(std::data(c), size_t(std::size(c)));
69 constexpr quint8 *data()
noexcept {
return m_data.data(); }
70 constexpr const quint8 *data()
const noexcept {
return m_data.data(); }
71 constexpr qsizetype size()
const noexcept {
return qsizetype{m_size}; }
72 constexpr quint8 &operator[](qsizetype n)
77 constexpr const quint8 &operator[](qsizetype n)
const
82 constexpr bool isEmpty()
const noexcept {
return size() == 0; }
83 constexpr void clear()
noexcept { m_size = 0; }
84 constexpr void resizeForOverwrite(qsizetype s)
87 Q_ASSERT(size_t(s) <= N);
88 m_size = std::uint8_t(s);
90 constexpr void resize(qsizetype s, quint8 v)
92 const auto oldSize = size();
93 resizeForOverwrite(s);
95 memset(data() + oldSize, v, size() - oldSize);
97 constexpr QByteArrayView toByteArrayView()
const noexcept
100 constexpr auto begin()
noexcept {
return data(); }
101 constexpr auto begin()
const noexcept {
return data(); }
102 constexpr auto cbegin()
const noexcept {
return begin(); }
103 constexpr auto end()
noexcept {
return data() + size(); }
104 constexpr auto end()
const noexcept {
return data() + size(); }
105 constexpr auto cend()
const noexcept {
return end(); }