File tree 6 files changed +269
-453
lines changed
6 files changed +269
-453
lines changed Original file line number Diff line number Diff line change 1
- /* * @file
1
+ /* * @mainpage Binary Serialuze, Classes and Functions For Binary Data Serialization
2
2
*
3
- * @defgroup marshall_module Classes and functions for big-endian binary data
4
- * marshalling and unmarshalling (transform objects into and out of byte streams
5
- * for transmission over a network or for file IO) .
3
+ * Serialization transforms objects into a byte stream for transmission over a
4
+ * network or for file IO. Deserialization is the converse, transforming a byte
5
+ * stream into application level objects .
6
6
*
7
- * @brief Classes and functions to transform objects into a big-endian binary stream
8
- * of bytes (marshall) and the converse (unmarshall), transform a stream of bytes into
9
- * objects.
10
- *
11
- * The @c utility-rack @c marshall and @c unmarshall functions and classes provide a
12
- * simple and light abstraction for binary big-endian serialization. There are no
7
+ * This library differs from other binary serialization libraries in that the
8
+ * main interfaces is a "std::format" like
9
+ * These functions and classes provide a simple and light abstraction for binary big-endian serialization. There are no
13
10
* message or element definitions, no embedded preprocesser syntax, and no extra
14
11
* build steps.
15
12
*
113
110
*
114
111
*/
115
112
116
- #ifndef MARSHALL_HPP_INCLUDED
117
- #define MARSHALL_HPP_INCLUDED
113
+ #ifndef BINARY_SERIALIZE_HPP_INCLUDED
114
+ #define BINARY_SERIALIZE_HPP_INCLUDED
118
115
119
116
#include " utility/cast_ptr_to.hpp"
120
117
#include " marshall/shared_buffer.hpp"
Original file line number Diff line number Diff line change
1
+ /* * @file
2
+ *
3
+ * @brief This is a direct implementation of the C++ 23 std::byteswap function,
4
+ * for use in pre C++ 23 applications.
5
+ *
6
+ * This implementation is taken directly from the CPP Reference page:
7
+ * https://en.cppreference.com/w/cpp/numeric/byteswap
8
+ *
9
+ * @author Cliff Green, CPP Reference
10
+ *
11
+ * @copyright (c) 2024 by Cliff Green
12
+ *
13
+ * Distributed under the Boost Software License, Version 1.0.
14
+ * (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
15
+ *
16
+ */
17
+
18
+ #ifndef BYTESWAP_HPP_INCLUDED
19
+ #define BYTESWAP_HPP_INCLUDED
20
+
21
+ #include < concepts> // std::integral
22
+ #include < bit> // std::bit_cast
23
+ #include < array>
24
+ #include < cstddef> // std::byte
25
+ #include < algorithm> // std::ranges::reverse
26
+
27
+ namespace chops {
28
+
29
+ template <std::integral T>
30
+ constexpr T byteswap (T value) noexcept {
31
+ if constexpr (sizeof (T) == 1u ) {
32
+ return value;
33
+ }
34
+ static_assert (std::has_unique_object_representations_v<T>,
35
+ " T may not have padding bits" );
36
+ auto value_representation = std::bit_cast<std::array<std::byte, sizeof (T)>>(value);
37
+ std::ranges::reverse (value_representation);
38
+ return std::bit_cast<T>(value_representation);
39
+ }
40
+
41
+ } // end namespace
42
+
43
+ #endif
44
+
You can’t perform that action at this time.
0 commit comments