@@ -46,21 +46,21 @@ constexpr endianness system_endianness() {
46
46
}
47
47
48
48
template <typename value_type>
49
- inline value_type byte_swap (value_type value, endianness endian) {
49
+ [[nodiscard]] inline value_type byte_swap (value_type value, endianness endian) {
50
50
if ((endian != native) && (endian != system_endianness ()))
51
51
sys::swapByteOrder (value);
52
52
return value;
53
53
}
54
54
55
55
// / Swap the bytes of value to match the given endianness.
56
- template <typename value_type, endianness endian>
57
- inline value_type byte_swap (value_type value) {
56
+ template <typename value_type, endianness endian>
57
+ [[nodiscard]] inline value_type byte_swap (value_type value) {
58
58
return byte_swap (value, endian);
59
59
}
60
60
61
61
// / Read a value of a particular endianness from memory.
62
62
template <typename value_type, std::size_t alignment = unaligned>
63
- inline value_type read (const void *memory, endianness endian) {
63
+ [[nodiscard]] inline value_type read (const void *memory, endianness endian) {
64
64
value_type ret;
65
65
66
66
memcpy (&ret,
@@ -70,25 +70,24 @@ inline value_type read(const void *memory, endianness endian) {
70
70
return byte_swap<value_type>(ret, endian);
71
71
}
72
72
73
- template <typename value_type,
74
- endianness endian,
75
- std::size_t alignment>
76
- inline value_type read (const void *memory) {
73
+ template <typename value_type, endianness endian, std::size_t alignment>
74
+ [[nodiscard]] inline value_type read (const void *memory) {
77
75
return read<value_type, alignment>(memory, endian);
78
76
}
79
77
80
78
// / Read a value of a particular endianness from a buffer, and increment the
81
79
// / buffer past that value.
82
80
template <typename value_type, std::size_t alignment, typename CharT>
83
- inline value_type readNext (const CharT *&memory, endianness endian) {
81
+ [[nodiscard]] inline value_type readNext (const CharT *&memory,
82
+ endianness endian) {
84
83
value_type ret = read<value_type, alignment>(memory, endian);
85
84
memory += sizeof (value_type);
86
85
return ret;
87
86
}
88
87
89
- template <typename value_type, endianness endian, std::size_t alignment,
90
- typename CharT>
91
- inline value_type readNext (const CharT *&memory) {
88
+ template <typename value_type, endianness endian, std::size_t alignment,
89
+ typename CharT>
90
+ [[nodiscard]] inline value_type readNext (const CharT *&memory) {
92
91
return readNext<value_type, alignment, CharT>(memory, endian);
93
92
}
94
93
@@ -114,7 +113,8 @@ using make_unsigned_t = std::make_unsigned_t<value_type>;
114
113
// / Read a value of a particular endianness from memory, for a location
115
114
// / that starts at the given bit offset within the first byte.
116
115
template <typename value_type, endianness endian, std::size_t alignment>
117
- inline value_type readAtBitAlignment (const void *memory, uint64_t startBit) {
116
+ [[nodiscard]] inline value_type readAtBitAlignment (const void *memory,
117
+ uint64_t startBit) {
118
118
assert (startBit < 8 );
119
119
if (startBit == 0 )
120
120
return read<value_type, endian, alignment>(memory);
@@ -349,36 +349,42 @@ using aligned_big_t = detail::packed_endian_specific_integral<T, big, aligned>;
349
349
350
350
namespace endian {
351
351
352
- template <typename T, endianness E> inline T read (const void *P) {
352
+ template <typename T, endianness E> [[nodiscard]] inline T read (const void *P) {
353
353
return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
354
354
}
355
355
356
- inline uint16_t read16 (const void *P, endianness E) {
356
+ [[nodiscard]] inline uint16_t read16 (const void *P, endianness E) {
357
357
return read<uint16_t >(P, E);
358
358
}
359
- inline uint32_t read32 (const void *P, endianness E) {
359
+ [[nodiscard]] inline uint32_t read32 (const void *P, endianness E) {
360
360
return read<uint32_t >(P, E);
361
361
}
362
- inline uint64_t read64 (const void *P, endianness E) {
362
+ [[nodiscard]] inline uint64_t read64 (const void *P, endianness E) {
363
363
return read<uint64_t >(P, E);
364
364
}
365
365
366
- template <endianness E> inline uint16_t read16 (const void *P) {
366
+ template <endianness E> [[nodiscard]] inline uint16_t read16 (const void *P) {
367
367
return read<uint16_t , E>(P);
368
368
}
369
- template <endianness E> inline uint32_t read32 (const void *P) {
369
+ template <endianness E> [[nodiscard]] inline uint32_t read32 (const void *P) {
370
370
return read<uint32_t , E>(P);
371
371
}
372
- template <endianness E> inline uint64_t read64 (const void *P) {
372
+ template <endianness E> [[nodiscard]] inline uint64_t read64 (const void *P) {
373
373
return read<uint64_t , E>(P);
374
374
}
375
375
376
- inline uint16_t read16le (const void *P) { return read16<little>(P); }
377
- inline uint32_t read32le (const void *P) { return read32<little>(P); }
378
- inline uint64_t read64le (const void *P) { return read64<little>(P); }
379
- inline uint16_t read16be (const void *P) { return read16<big>(P); }
380
- inline uint32_t read32be (const void *P) { return read32<big>(P); }
381
- inline uint64_t read64be (const void *P) { return read64<big>(P); }
376
+ [[nodiscard]] inline uint16_t read16le (const void *P) {
377
+ return read16<little>(P);
378
+ }
379
+ [[nodiscard]] inline uint32_t read32le (const void *P) {
380
+ return read32<little>(P);
381
+ }
382
+ [[nodiscard]] inline uint64_t read64le (const void *P) {
383
+ return read64<little>(P);
384
+ }
385
+ [[nodiscard]] inline uint16_t read16be (const void *P) { return read16<big>(P); }
386
+ [[nodiscard]] inline uint32_t read32be (const void *P) { return read32<big>(P); }
387
+ [[nodiscard]] inline uint64_t read64be (const void *P) { return read64<big>(P); }
382
388
383
389
template <typename T, endianness E> inline void write (void *P, T V) {
384
390
*(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
0 commit comments