From ad8c2577c4ac4c4becef8b141f7b3144d59f4c28 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 18 Dec 2024 12:45:54 +0100 Subject: [PATCH] util/PackedBigEndian: add class PackedSignedBE16 --- src/util/PackedBigEndian.hxx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/util/PackedBigEndian.hxx b/src/util/PackedBigEndian.hxx index 1933d3ded..d001323b4 100644 --- a/src/util/PackedBigEndian.hxx +++ b/src/util/PackedBigEndian.hxx @@ -50,6 +50,26 @@ public: static_assert(sizeof(PackedBE16) == sizeof(uint16_t), "Wrong size"); static_assert(alignof(PackedBE16) == 1, "Wrong alignment"); +/** + * A packed big-endian signed 16 bit integer. + */ +class PackedSignedBE16 { + PackedBE16 u; + +public: + PackedSignedBE16() = default; + + constexpr PackedSignedBE16(int16_t src) noexcept + :u(uint16_t(src)) {} + + constexpr operator int16_t() const noexcept { + return (int16_t)(uint16_t)u; + } +}; + +static_assert(sizeof(PackedSignedBE16) == sizeof(int16_t), "Wrong size"); +static_assert(alignof(PackedSignedBE16) == 1, "Wrong alignment"); + /** * A packed big-endian 32 bit integer. */