51inline uint16_t
LoadU16(
const uint8_t* p) {
52 return (uint16_t(p[0]) << 8) | uint16_t(p[1]);
55inline uint32_t
LoadU32(
const uint8_t* p) {
56 return (uint32_t(p[0]) << 24) | (uint32_t(p[1]) << 16) |
57 (uint32_t(p[2]) << 8) | uint32_t(p[3]);
61 return static_cast<int16_t
>(
LoadU16(p));
65 return static_cast<int32_t
>(
LoadU32(p));
69 p[0] =
static_cast<uint8_t
>((v >> 8) & 0xFF);
70 p[1] =
static_cast<uint8_t
>(v & 0xFF);
74 p[0] =
static_cast<uint8_t
>((v >> 24) & 0xFF);
75 p[1] =
static_cast<uint8_t
>((v >> 16) & 0xFF);
76 p[2] =
static_cast<uint8_t
>((v >> 8) & 0xFF);
77 p[3] =
static_cast<uint8_t
>(v & 0xFF);
81 StoreU16(
static_cast<uint16_t
>(v), p);
85 StoreU32(
static_cast<uint32_t
>(v), p);
89 const double scaled =
static_cast<double>(value) *
static_cast<double>(scale);
90 const double clamped = std::clamp(scaled,
91 static_cast<double>(std::numeric_limits<int32_t>::min()),
92 static_cast<double>(std::numeric_limits<int32_t>::max()));
93 return static_cast<int32_t
>(std::llround(clamped));
97 return static_cast<float>(
static_cast<double>(fixed) /
static_cast<double>(scale));
121 if (info.typeId == typeId)
return info;
162 return remoteHash == expectedHash;
int16_t LoadS16(const uint8_t *p)
void StoreU16(uint16_t v, uint8_t *p)
float DequantizeFloat(int32_t fixed, float scale)
uint32_t LoadU32(const uint8_t *p)
int32_t QuantizeFloat(float value, float scale)
void StoreS16(int16_t v, uint8_t *p)
void StoreU32(uint32_t v, uint8_t *p)
uint16_t LoadU16(const uint8_t *p)
int32_t LoadS32(const uint8_t *p)
void StoreS32(int32_t v, uint8_t *p)
constexpr std::size_t kHeaderMsgCountIndex
std::optional< MessageInfo > GetMessageInfo(MessageTypeId typeId)
bool EncodeHandshake(uint8_t *out, std::size_t capacity)
Encode handshake with default schema hash.
bool EncodeHandshakeWithHash(uint8_t *out, std::size_t capacity, uint32_t schemaHash)
Encode handshake with custom schema hash (for testing)
constexpr std::array< MessageInfo, 0 > kMessageRegistry
constexpr std::size_t kHandshakeSize
constexpr std::array< uint8_t, 4 > kHandshakeMagic
bool ValidateHandshakeWithHash(const uint8_t *data, std::size_t length, uint32_t expectedHash)
Validate handshake against custom expected hash (for testing)
uint32_t ExtractSchemaHash(const uint8_t *data, std::size_t length)
constexpr uint32_t kSchemaHash
constexpr std::size_t kHeaderMsgTypeIndex
constexpr uint8_t kProtocolMinorV3
constexpr std::size_t kHeaderSizeV3
bool ValidateHandshake(const uint8_t *data, std::size_t length)
constexpr uint8_t kProtocolMajorV3