From: Philippe Proulx Date: Fri, 22 Apr 2022 12:09:21 +0000 (-0400) Subject: src/cpp-common: add bt2_common::{little,big}ToNative() X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=df34434fdf530a7344e2582da0ee5bcbf56567ca src/cpp-common: add bt2_common::{little,big}ToNative() 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 Change-Id: Iab826bb633388d5ce506b4462b7a0417c2c05ad4 Reviewed-on: https://review.lttng.org/c/babeltrace/+/7927 Reviewed-by: Francis Deslauriers Reviewed-on: https://review.lttng.org/c/babeltrace/+/10814 Tested-by: jenkins --- diff --git a/src/cpp-common/Makefile.am b/src/cpp-common/Makefile.am index 3d80723c..016bc0e9 100644 --- a/src/cpp-common/Makefile.am +++ b/src/cpp-common/Makefile.am @@ -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 index 00000000..6d836ab4 --- /dev/null +++ b/src/cpp-common/endian.hpp @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2022 Philippe Proulx + * + * SPDX-License-Identifier: MIT + */ + +#ifndef BABELTRACE_CPP_COMMON_ENDIAN_HPP +#define BABELTRACE_CPP_COMMON_ENDIAN_HPP + +#include + +#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(le16toh(val)); +} + +static inline std::uint16_t bigEndianToNative(const std::uint16_t val) noexcept +{ + return static_cast(be16toh(val)); +} + +static inline std::int16_t littleEndianToNative(const std::int16_t val) noexcept +{ + return static_cast(littleEndianToNative(static_cast(val))); +} + +static inline std::int16_t bigEndianToNative(const std::int16_t val) noexcept +{ + return static_cast(bigEndianToNative(static_cast(val))); +} + +static inline std::uint32_t littleEndianToNative(const std::uint32_t val) noexcept +{ + return static_cast(le32toh(val)); +} + +static inline std::uint32_t bigEndianToNative(const std::uint32_t val) noexcept +{ + return static_cast(be32toh(val)); +} + +static inline std::int32_t littleEndianToNative(const std::int32_t val) noexcept +{ + return static_cast(littleEndianToNative(static_cast(val))); +} + +static inline std::int32_t bigEndianToNative(const std::int32_t val) noexcept +{ + return static_cast(bigEndianToNative(static_cast(val))); +} + +static inline std::uint64_t littleEndianToNative(const std::uint64_t val) noexcept +{ + return static_cast(le64toh(val)); +} + +static inline std::uint64_t bigEndianToNative(const std::uint64_t val) noexcept +{ + return static_cast(be64toh(val)); +} + +static inline std::int64_t littleEndianToNative(const std::int64_t val) noexcept +{ + return static_cast(littleEndianToNative(static_cast(val))); +} + +static inline std::int64_t bigEndianToNative(const std::int64_t val) noexcept +{ + return static_cast(bigEndianToNative(static_cast(val))); +} + +} /* namespace bt2_common */ + +#endif /* BABELTRACE_CPP_COMMON_ENDIAN_HPP */