src/cpp-common: add bt2_common::{little,big}ToNative()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 22 Apr 2022 12:09:21 +0000 (08:09 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 11 Sep 2023 15:24:02 +0000 (11:24 -0400)
Those are C++ versions (using overloads) of the {le,be}{16,32,64}toh()
functions found in `src/compat/endian.h`.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Iab826bb633388d5ce506b4462b7a0417c2c05ad4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/7927
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/10814
Tested-by: jenkins <jenkins@lttng.org>
src/cpp-common/Makefile.am
src/cpp-common/endian.hpp [new file with mode: 0644]

index 3d80723c29ccc41001e415952a4e61db70f53037..016bc0e93710d1e4569f3fe78c4c33d3ad0e67c6 100644 (file)
@@ -11,4 +11,5 @@ EXTRA_DIST = bt2 \
        nlohmann/json.hpp \
        optional.hpp \
        string_view.hpp \
-       uuid-view.hpp
+       uuid-view.hpp \
+       endian.hpp
diff --git a/src/cpp-common/endian.hpp b/src/cpp-common/endian.hpp
new file mode 100644 (file)
index 0000000..6d836ab
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2022 Philippe Proulx <pproulx@efficios.com>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef BABELTRACE_CPP_COMMON_ENDIAN_HPP
+#define BABELTRACE_CPP_COMMON_ENDIAN_HPP
+
+#include <cstdint>
+
+#include "compat/endian.h"
+
+namespace bt2_common {
+
+static inline std::uint8_t littleEndianToNative(const std::uint8_t val) noexcept
+{
+    return val;
+}
+
+static inline std::uint8_t bigEndianToNative(const std::uint8_t val) noexcept
+{
+    return val;
+}
+
+static inline std::int8_t littleEndianToNative(const std::int8_t val) noexcept
+{
+    return val;
+}
+
+static inline std::int8_t bigEndianToNative(const std::int8_t val) noexcept
+{
+    return val;
+}
+
+static inline std::uint16_t littleEndianToNative(const std::uint16_t val) noexcept
+{
+    return static_cast<std::uint16_t>(le16toh(val));
+}
+
+static inline std::uint16_t bigEndianToNative(const std::uint16_t val) noexcept
+{
+    return static_cast<std::uint16_t>(be16toh(val));
+}
+
+static inline std::int16_t littleEndianToNative(const std::int16_t val) noexcept
+{
+    return static_cast<std::int16_t>(littleEndianToNative(static_cast<std::uint16_t>(val)));
+}
+
+static inline std::int16_t bigEndianToNative(const std::int16_t val) noexcept
+{
+    return static_cast<std::int16_t>(bigEndianToNative(static_cast<std::uint16_t>(val)));
+}
+
+static inline std::uint32_t littleEndianToNative(const std::uint32_t val) noexcept
+{
+    return static_cast<std::uint32_t>(le32toh(val));
+}
+
+static inline std::uint32_t bigEndianToNative(const std::uint32_t val) noexcept
+{
+    return static_cast<std::uint32_t>(be32toh(val));
+}
+
+static inline std::int32_t littleEndianToNative(const std::int32_t val) noexcept
+{
+    return static_cast<std::int32_t>(littleEndianToNative(static_cast<std::uint32_t>(val)));
+}
+
+static inline std::int32_t bigEndianToNative(const std::int32_t val) noexcept
+{
+    return static_cast<std::int32_t>(bigEndianToNative(static_cast<std::uint32_t>(val)));
+}
+
+static inline std::uint64_t littleEndianToNative(const std::uint64_t val) noexcept
+{
+    return static_cast<std::uint64_t>(le64toh(val));
+}
+
+static inline std::uint64_t bigEndianToNative(const std::uint64_t val) noexcept
+{
+    return static_cast<std::uint64_t>(be64toh(val));
+}
+
+static inline std::int64_t littleEndianToNative(const std::int64_t val) noexcept
+{
+    return static_cast<std::int64_t>(littleEndianToNative(static_cast<std::uint64_t>(val)));
+}
+
+static inline std::int64_t bigEndianToNative(const std::int64_t val) noexcept
+{
+    return static_cast<std::int64_t>(bigEndianToNative(static_cast<std::uint64_t>(val)));
+}
+
+} /* namespace bt2_common */
+
+#endif /* BABELTRACE_CPP_COMMON_ENDIAN_HPP */
This page took 0.025303 seconds and 4 git commands to generate.