60 num_bytes(0), num_guard_bits(0), num_bits(0), is_float(false), endian(
std::endian::native)
79 uint8_t num_guard_bits,
82 std::endian endian) noexcept :
83 num_bytes(num_bytes), num_guard_bits(num_guard_bits), num_bits(num_bits), is_float(is_float), endian(endian)
90 return {4, 8, 23,
true, std::endian::little};
93 [[nodiscard]]
static constexpr audio_sample_format float32_be() noexcept
95 return {4, 8, 23,
true, std::endian::big};
98 [[nodiscard]]
static constexpr audio_sample_format float32() noexcept
100 return {4, 8, 23,
true, std::endian::native};
103 [[nodiscard]]
static constexpr audio_sample_format int16_le() noexcept
105 return {2, 0, 15,
false, std::endian::little};
108 [[nodiscard]]
static constexpr audio_sample_format int16_be() noexcept
110 return {2, 0, 15,
false, std::endian::big};
113 [[nodiscard]]
static constexpr audio_sample_format int16() noexcept
115 return {2, 0, 15,
false, std::endian::native};
118 [[nodiscard]]
static constexpr audio_sample_format int20_le() noexcept
120 return {3, 0, 19,
false, std::endian::little};
123 [[nodiscard]]
static constexpr audio_sample_format int20_be() noexcept
125 return {3, 0, 19,
false, std::endian::big};
128 [[nodiscard]]
static constexpr audio_sample_format int20() noexcept
130 return {3, 0, 19,
false, std::endian::native};
133 [[nodiscard]]
static constexpr audio_sample_format int24_le() noexcept
135 return {3, 0, 23,
false, std::endian::little};
138 [[nodiscard]]
static constexpr audio_sample_format int24_be() noexcept
140 return {3, 0, 23,
false, std::endian::big};
143 [[nodiscard]]
static constexpr audio_sample_format int24() noexcept
145 return {3, 0, 23,
false, std::endian::native};
148 [[nodiscard]]
static constexpr audio_sample_format int32_le() noexcept
150 return {4, 0, 31,
false, std::endian::little};
153 [[nodiscard]]
static constexpr audio_sample_format int32_be() noexcept
155 return {4, 0, 31,
false, std::endian::big};
158 [[nodiscard]]
static constexpr audio_sample_format int32() noexcept
160 return {4, 0, 31,
false, std::endian::native};
163 [[nodiscard]]
static constexpr audio_sample_format fix8_23_le() noexcept
165 return {4, 8, 23,
false, std::endian::little};
168 [[nodiscard]]
static constexpr audio_sample_format fix8_23_be() noexcept
170 return {4, 8, 23,
false, std::endian::big};
173 [[nodiscard]]
static constexpr audio_sample_format fix8_23() noexcept
175 return {4, 8, 23,
false, std::endian::native};
178 constexpr explicit operator bool() const noexcept
180 return num_bytes != 0;
189 [[nodiscard]]
float unpack_multiplier() const noexcept;
194 [[nodiscard]]
std::
size_t num_samples_per_chunk(
std::
size_t stride) const noexcept;
198 [[nodiscard]]
std::
size_t chunk_stride(
std::
size_t stride) const noexcept;
202 [[nodiscard]]
std::
size_t num_chunks_per_quad(
std::
size_t stride) const noexcept;
206 [[nodiscard]]
std::
size_t num_fast_quads(
std::
size_t stride,
std::
size_t num_samples) const noexcept;
210 [[nodiscard]] i8x16 load_shuffle_indices(
std::
size_t stride) const noexcept;
214 [[nodiscard]] i8x16 store_shuffle_indices(
std::
size_t stride) const noexcept;
218 [[nodiscard]] i8x16 concat_shuffle_indices(
std::
size_t stride) const noexcept;
222 [[nodiscard]] constexpr
bool holds_invariant() const noexcept
224 return (num_bytes >= 1 && num_bytes <= 4) && (num_bits + num_guard_bits <= num_bytes * 8) &&
225 (endian == std::endian::little || endian == std::endian::big);
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253