Iros
 
Loading...
Searching...
No Matches
big_endian.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/format/prelude.h"
6
7namespace di::bit {
8namespace detail {
10 template<concepts::IntegralOrEnum T>
11 constexpr auto operator()(T value) const -> T {
12 if constexpr (Endian::Native == Endian::Big) {
13 return value;
14 } else {
15 return byteswap(value);
16 }
17 }
18 };
19}
20
23
24template<concepts::IntegralOrEnum T>
25class [[gnu::packed]] BigEndian {
26public:
27 BigEndian() = default;
28
29 constexpr BigEndian(T value) { *this = value; }
30
31 constexpr auto operator=(T value) -> BigEndian {
32 m_value = host_to_big_endian(value);
33 return *this;
34 }
35
36 constexpr operator T() const { return big_endian_to_host(m_value); }
37
38 constexpr auto value() const -> T { return *this; }
39
40private:
41 template<concepts::Encoding Enc>
43 FormatParseContext<Enc>& parse_context, bool debug) {
44 return format::formatter<T, Enc>(parse_context, debug);
45 }
46
47 T m_value { 0 };
48};
49}
50
51namespace di {
52using bit::BigEndian;
53
56}
Definition big_endian.h:25
constexpr auto operator=(T value) -> BigEndian
Definition big_endian.h:31
constexpr friend auto tag_invoke(types::Tag< formatter_in_place >, InPlaceType< BigEndian >, FormatParseContext< Enc > &parse_context, bool debug)
Definition big_endian.h:42
constexpr auto value() const -> T
Definition big_endian.h:38
constexpr BigEndian(T value)
Definition big_endian.h:29
Definition format_parse_context.h:14
Definition bit_proxy_reference.h:5
Definition bit_proxy_reference.h:5
constexpr auto host_to_big_endian
Definition big_endian.h:21
constexpr auto byteswap
Definition byteswap.h:38
@ Native
Definition endian.h:7
@ Big
Definition endian.h:6
constexpr auto big_endian_to_host
Definition big_endian.h:22
constexpr auto formatter(FormatParseContext< Enc > &parse_context, bool debug=false)
Definition formatter.h:27
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Definition zstring_parser.h:9
constexpr auto operator()(T value) const -> T
Definition big_endian.h:11
Definition in_place_type.h:5