@@ -34,20 +34,27 @@ concept LittleEndianWritable =
3434 std::is_same_v<T, int32_t > || std::is_same_v<T, int64_t > ||
3535 std::is_same_v<T, float > || std::is_same_v<T, double > || std::is_same_v<T, uint8_t >;
3636
37+ // / \brief Convert a value to little-endian format.
38+ template <LittleEndianWritable T>
39+ T ToLittleEndian (T value) {
40+ if constexpr (std::endian::native != std::endian::little && sizeof (T) > 1 ) {
41+ return std::byteswap (value);
42+ }
43+ return value;
44+ }
45+
46+ // / \brief Convert a value from little-endian format.
47+ template <LittleEndianWritable T>
48+ T FromLittleEndian (T value) {
49+ return ToLittleEndian (value);
50+ }
51+
3752// / \brief Write a value in little-endian format to the buffer.
3853template <LittleEndianWritable T>
3954void WriteLittleEndian (std::vector<uint8_t >& buffer, T value) {
40- if constexpr (std::endian::native == std::endian::little) {
41- const auto * bytes = reinterpret_cast <const uint8_t *>(&value);
42- buffer.insert (buffer.end (), bytes, bytes + sizeof (T));
43- } else if constexpr (sizeof (T) > 1 ) {
44- T le_value = std::byteswap (value);
45- const auto * bytes = reinterpret_cast <const uint8_t *>(&le_value);
46- buffer.insert (buffer.end (), bytes, bytes + sizeof (T));
47- } else {
48- // For single byte types, no byteswap needed
49- buffer.push_back (static_cast <uint8_t >(value));
50- }
55+ T le_value = ToLittleEndian (value);
56+ const auto * bytes = reinterpret_cast <const uint8_t *>(&le_value);
57+ buffer.insert (buffer.end (), bytes, bytes + sizeof (T));
5158}
5259
5360// / \brief Read a value in little-endian format from the data.
@@ -60,11 +67,7 @@ Result<T> ReadLittleEndian(std::span<const uint8_t> data) {
6067
6168 T value;
6269 std::memcpy (&value, data.data (), sizeof (T));
63-
64- if constexpr (std::endian::native != std::endian::little && sizeof (T) > 1 ) {
65- value = std::byteswap (value);
66- }
67- return value;
70+ return FromLittleEndian (value);
6871}
6972
7073// / \brief Write a 16-byte value in big-endian format (for UUID and Decimal).
0 commit comments