Iros
 
Loading...
Searching...
No Matches
little_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::Little) {
13 return value;
14 } else {
15 return byteswap(value);
16 }
17 }
18 };
19}
20
23
24template<concepts::IntegralOrEnum T>
25class [[gnu::packed]] LittleEndian {
26public:
27 LittleEndian() = default;
28
29 constexpr LittleEndian(T value) { *this = value; }
30
31 constexpr auto operator=(T value) -> LittleEndian {
33 return *this;
34 }
35
36 constexpr operator T() const { return little_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 {
53
56}
Definition little_endian.h:25
constexpr LittleEndian(T value)
Definition little_endian.h:29
constexpr friend auto tag_invoke(types::Tag< formatter_in_place >, InPlaceType< LittleEndian >, FormatParseContext< Enc > &parse_context, bool debug)
Definition little_endian.h:42
constexpr auto operator=(T value) -> LittleEndian
Definition little_endian.h:31
constexpr auto value() const -> T
Definition little_endian.h:38
Definition format_parse_context.h:14
Definition bit_proxy_reference.h:5
Definition bit_proxy_reference.h:5
constexpr auto byteswap
Definition byteswap.h:38
@ Little
Definition endian.h:5
@ Native
Definition endian.h:7
constexpr auto little_endian_to_host
Definition little_endian.h:22
constexpr auto host_to_little_endian
Definition little_endian.h:21
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 little_endian.h:11
Definition in_place_type.h:5