summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/multibyte.h
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2023-09-17 19:59:30 -0400
committer AJR <ajrhacker@users.noreply.github.com>2023-09-17 19:59:30 -0400
commit94ff3857e275aa3d6181d643986f0df813d00c63 (patch)
treee0fce9580e34c3b33a5f7ec2d7a80bae2ec34d91 /src/lib/util/multibyte.h
parent5077dcbe1cd3bd436c6f6d800df1dc00eaa02352 (diff)
chd.cpp, chdcodec.cpp, flac.cpp: Use multibyte.h functions
* multibyte.h: Add functions for reading and writing 48-bit values
Diffstat (limited to 'src/lib/util/multibyte.h')
-rw-r--r--src/lib/util/multibyte.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/lib/util/multibyte.h b/src/lib/util/multibyte.h
index 6664c089506..e61dc8a3ab9 100644
--- a/src/lib/util/multibyte.h
+++ b/src/lib/util/multibyte.h
@@ -43,6 +43,16 @@ inline constexpr u32 get_u32be(const u8 *const buf) noexcept
| ((const u32)buf[3] << 0);
}
+inline constexpr u64 get_u48be(const u8 *const buf) noexcept
+{
+ return ((const u64)buf[0] << 40)
+ | ((const u64)buf[1] << 36)
+ | ((const u64)buf[2] << 24)
+ | ((const u64)buf[3] << 16)
+ | ((const u64)buf[4] << 8)
+ | ((const u64)buf[5] << 0);
+}
+
inline constexpr u64 get_u64be(const u8 *const buf) noexcept
{
return ((const u64)buf[0] << 56)
@@ -76,6 +86,16 @@ inline void put_u32be(u8 *buf, const u32 data) noexcept
buf[3] = data >> 0;
}
+inline void put_u48be(u8 *buf, const u64 data) noexcept
+{
+ buf[0] = data >> 40;
+ buf[1] = data >> 36;
+ buf[2] = data >> 24;
+ buf[3] = data >> 16;
+ buf[4] = data >> 8;
+ buf[5] = data >> 0;
+}
+
inline void put_u64be(u8 *buf, const u64 data) noexcept
{
buf[0] = data >> 56;
@@ -107,6 +127,11 @@ inline constexpr s32 get_s32be(const u8 *const buf) noexcept
return get_u32be(buf);
}
+inline constexpr s64 get_s48be(const u8 *const buf) noexcept
+{
+ return util::sext(get_u48be(buf), 48);
+}
+
inline constexpr s64 get_s64be(const u8 *const buf) noexcept
{
return get_u64be(buf);
@@ -127,6 +152,11 @@ inline void put_s32be(u8 *buf, const s32 data) noexcept
put_u32be(buf, data);
}
+inline void put_s48be(u8 *buf, const s64 data) noexcept
+{
+ put_u48be(buf, data);
+}
+
inline void put_s64be(u8 *buf, const s64 data) noexcept
{
put_u64be(buf, data);
@@ -157,6 +187,16 @@ inline constexpr u32 get_u32le(const u8 *const buf) noexcept
| ((const u32)buf[3] << 24);
}
+inline constexpr u64 get_u48le(const u8 *const buf) noexcept
+{
+ return ((const u64)buf[0] << 0)
+ | ((const u64)buf[1] << 8)
+ | ((const u64)buf[2] << 16)
+ | ((const u64)buf[3] << 24)
+ | ((const u64)buf[4] << 32)
+ | ((const u64)buf[5] << 40);
+}
+
inline constexpr u64 get_u64le(const u8 *const buf) noexcept
{
return ((const u64)buf[0] << 0)
@@ -190,6 +230,16 @@ inline void put_u32le(u8 *buf, const u32 data) noexcept
buf[3] = data >> 24;
}
+inline void put_u48le(u8 *buf, const u64 data) noexcept
+{
+ buf[0] = data >> 0;
+ buf[1] = data >> 8;
+ buf[2] = data >> 16;
+ buf[3] = data >> 24;
+ buf[4] = data >> 32;
+ buf[5] = data >> 40;
+}
+
inline void put_u64le(u8 *buf, const u64 data) noexcept
{
buf[0] = data >> 0;
@@ -221,6 +271,11 @@ inline constexpr s32 get_s32le(const u8 *const buf) noexcept
return get_u32le(buf);
}
+inline constexpr s64 get_s48le(const u8 *const buf) noexcept
+{
+ return util::sext(get_u48le(buf), 48);
+}
+
inline constexpr s64 get_s64le(const u8 *const buf) noexcept
{
return get_u64le(buf);
@@ -241,6 +296,11 @@ inline void put_s32le(u8 *buf, const s32 data) noexcept
put_u32le(buf, data);
}
+inline void put_s48le(u8 *buf, const s64 data) noexcept
+{
+ put_u48le(buf, data);
+}
+
inline void put_s64le(u8 *buf, const s64 data) noexcept
{
put_u64le(buf, data);