13 std::numeric_limits<std::uint16_t>::max();
55 char a,
char b,
char c,
char d)
noexcept
57 return static_cast<std::uint32_t
>(
static_cast<unsigned char>(
a)) |
58 (
static_cast<std::uint32_t
>(
static_cast<unsigned char>(
b)) << 8u) |
59 (
static_cast<std::uint32_t
>(
static_cast<unsigned char>(
c)) << 16u) |
60 (
static_cast<std::uint32_t
>(
static_cast<unsigned char>(
d)) << 24u);
64 std::span<const std::uint8_t>
bytes, std::size_t
offset)
noexcept
67 static_cast<std::uint16_t
>(
68 static_cast<std::uint16_t
>(
bytes[
offset + 1u]) << 8u);
72 std::span<const std::uint8_t>
bytes, std::size_t
offset)
noexcept
75 (
static_cast<std::uint32_t
>(
bytes[
offset + 1u]) << 8u) |
76 (
static_cast<std::uint32_t
>(
bytes[
offset + 2u]) << 16u) |
77 (
static_cast<std::uint32_t
>(
bytes[
offset + 3u]) << 24u);
81 std::span<const std::uint8_t>
bytes)
noexcept
93 if (
sink ==
nullptr ||
sink(event, sourceId))
99 std::span<const std::uint8_t>
bytes,
100 std::uint32_t sourceId,
115 if (
id ==
fourCC(
'f',
'm',
't',
' '))
122 else if (
id ==
fourCC(
'd',
'i',
'm',
's'))
127 event.value =
readLe32(payload, 0u);
129 else if (
id ==
fourCC(
'v',
'o',
'l',
'm'))
134 event.value =
readLe32(payload, 0u);
142 event.payload = payload;
143 const auto status =
emit(
sink, sourceId, event);
152 std::span<const std::uint8_t>
bytes,
153 std::uint32_t sourceId,
171 if (
id ==
fourCC(
'C',
'H',
'A',
'T'))
180 if (
id ==
fourCC(
'D',
'A',
'T',
'N'))
182 else if (
id ==
fourCC(
'D',
'A',
'T',
'1'))
184 else if (
id ==
fourCC(
'P',
'O',
'S',
'N'))
186 else if (
id ==
fourCC(
'S',
'T',
'O',
'P'))
193 event.payload = payload;
194 const auto status =
emit(
sink, sourceId, event);
210 bytes.push_back(
static_cast<std::uint8_t
>(
value));
211 bytes.push_back(
static_cast<std::uint8_t
>(
value >> 8u));
222 std::vector<std::uint8_t>&
bytes, std::uint32_t
id,
223 std::span<const std::uint8_t> payload)
225 if (payload.size() > std::numeric_limits<std::uint32_t>::max() ||
230 bytes.insert(
bytes.end(), payload.begin(), payload.end());
237 std::uint32_t dimensions, std::uint32_t
volume,
238 std::vector<std::uint8_t>& packet)
255 std::vector<std::uint8_t> chat;
258 std::vector<std::uint8_t>
scalar;
273 std::vector<std::uint8_t>& packet)
289 std::vector<std::uint8_t>& packet)
293 std::vector<std::uint8_t> payload;
294 payload.reserve(
coordinates.size() *
sizeof(
float));
std::vector< std::uint8_t > data
std::vector< std::byte > bytes
SDL_GPUShaderFormat format
void appendLe16(std::vector< std::uint8_t > &bytes, std::uint16_t value)
bool appendChunk(std::vector< std::uint8_t > &bytes, std::uint32_t id, std::span< const std::uint8_t > payload)
void appendLe32(std::vector< std::uint8_t > &bytes, std::uint32_t value)
constexpr std::uint32_t fourCC(char a, char b, char c, char d) noexcept
std::uint16_t readLe16(std::span< const std::uint8_t > bytes, std::size_t offset) noexcept
ParseStatus parse(std::span< const std::uint8_t > bytes, std::uint32_t sourceId, EventSink sink=nullptr) noexcept
ParseStatus parseChatSubchunks(std::span< const std::uint8_t > bytes, std::uint32_t sourceId, EventSink sink) noexcept
std::uint32_t readLe32(std::span< const std::uint8_t > bytes, std::size_t offset) noexcept
bool makeDataPacket(std::span< const std::uint8_t > data, bool afterSilence, std::vector< std::uint8_t > &packet)
ParseStatus emit(EventSink sink, std::uint32_t sourceId, const Event &event) noexcept
bool(*)(const Event &, std::uint32_t sourceId) EventSink
bool makePositionPacket(std::span< const float > coordinates, std::vector< std::uint8_t > &packet)
bool makeStartPacket(WaveFormat format, std::span< const std::uint8_t > extraFormatBytes, std::uint32_t dimensions, std::uint32_t volume, std::vector< std::uint8_t > &packet)
constexpr std::size_t MaximumPacketBytes
WaveFormat readWaveFormat(std::span< const std::uint8_t > bytes) noexcept
bool makeStopPacket(std::vector< std::uint8_t > &packet)
std::span< const std::uint8_t > payload