@@ -23,7 +23,7 @@ namespace util {
23
23
// /
24
24
// / \return Value of the integer.
25
25
template <typename uint_t >
26
- uint_t
26
+ constexpr uint_t
27
27
readUint (void const * const buffer, size_t const length) {
28
28
constexpr size_t size (sizeof (uint_t ));
29
29
if (length < size) {
@@ -33,10 +33,11 @@ readUint(void const* const buffer, size_t const length) {
33
33
}
34
34
35
35
uint8_t const * const byte_buffer (static_cast <uint8_t const *>(buffer));
36
- uint_t result;
37
- uint8_t * pointer_to_result (static_cast <uint8_t *>(static_cast <void *>(&result)));
36
+ uint_t result (0 );
38
37
39
- std::reverse_copy (byte_buffer, byte_buffer + size, pointer_to_result);
38
+ for (size_t i = 0 ; i < size; ++i) {
39
+ result |= (static_cast <uint_t >(byte_buffer[i])) << (8 * (size - (i + 1 )));
40
+ }
40
41
41
42
return (result);
42
43
}
@@ -51,7 +52,7 @@ readUint(void const* const buffer, size_t const length) {
51
52
// /
52
53
// / \return pointer to the next byte after stored value
53
54
template <typename uint_t >
54
- uint8_t *
55
+ constexpr uint8_t *
55
56
writeUint (uint_t const value, void * const buffer, size_t const length) {
56
57
constexpr size_t size (sizeof (uint_t ));
57
58
if (length < size) {
@@ -60,48 +61,50 @@ writeUint(uint_t const value, void* const buffer, size_t const length) {
60
61
<< (length == 1 ? " " : " s" ) << " instead" );
61
62
}
62
63
63
- uint8_t const * pointer_to_value (static_cast <uint8_t const *>(static_cast <void const *>(&value)));
64
64
uint8_t * byte_buffer (static_cast <uint8_t *>(buffer));
65
65
66
- std::reverse_copy (pointer_to_value, pointer_to_value + size, byte_buffer);
66
+ for (size_t i = 0 ; i < size; ++i) {
67
+ uint8_t const shift_by (8 * (size - (i + 1 )));
68
+ byte_buffer[i] = uint8_t ((value & (uint_t (0xff ) << shift_by)) >> shift_by);
69
+ }
67
70
68
71
return (byte_buffer + size);
69
72
}
70
73
71
74
// / \brief uint16_t wrapper over readUint.
72
- inline uint16_t
75
+ constexpr inline uint16_t
73
76
readUint16 (void const * const buffer, size_t const length) {
74
- return readUint<uint16_t >(buffer, length);
77
+ return ( readUint<uint16_t >(buffer, length) );
75
78
}
76
79
77
80
// / \brief uint32_t wrapper over readUint.
78
- inline uint32_t
81
+ constexpr inline uint32_t
79
82
readUint32 (void const * const buffer, size_t const length) {
80
- return readUint<uint32_t >(buffer, length);
83
+ return ( readUint<uint32_t >(buffer, length) );
81
84
}
82
85
83
86
// / \brief uint16_t wrapper over readUint.
84
- inline uint64_t
87
+ constexpr inline uint64_t
85
88
readUint64 (void const * const buffer, size_t const length) {
86
- return readUint<uint64_t >(buffer, length);
89
+ return ( readUint<uint64_t >(buffer, length) );
87
90
}
88
91
89
92
// / \brief uint16_t wrapper over writeUint.
90
- inline uint8_t *
93
+ constexpr inline uint8_t *
91
94
writeUint16 (uint16_t const value, void * const buffer, size_t const length) {
92
- return writeUint (value, buffer, length);
95
+ return ( writeUint (value, buffer, length) );
93
96
}
94
97
95
98
// / \brief uint32_t wrapper over writeUint.
96
- inline uint8_t *
99
+ constexpr inline uint8_t *
97
100
writeUint32 (uint32_t const value, void * const buffer, size_t const length) {
98
- return writeUint (value, buffer, length);
101
+ return ( writeUint (value, buffer, length) );
99
102
}
100
103
101
104
// / \brief uint64_t wrapper over writeUint.
102
- inline uint8_t *
105
+ constexpr inline uint8_t *
103
106
writeUint64 (uint64_t const value, void * const buffer, size_t const length) {
104
- return writeUint (value, buffer, length);
107
+ return ( writeUint (value, buffer, length) );
105
108
}
106
109
107
110
} // namespace util
0 commit comments