Iros
 
Loading...
Searching...
No Matches
byte.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/meta/language.h"
4
5#ifndef DI_NO_USE_STD
6#include <cstddef>
7#else
8namespace std {
9enum class byte : unsigned char {};
10
11template<di::concepts::Integral Int>
12constexpr auto to_integer(std::byte value) noexcept -> Int {
13 return Int(value);
14}
15
16constexpr auto operator<<(std::byte byte, di::concepts::Integral auto shift) noexcept -> std::byte {
17 return std::byte(static_cast<unsigned char>(byte) << shift);
18}
19
20constexpr auto operator>>(std::byte byte, di::concepts::Integral auto shift) noexcept -> std::byte {
21 return std::byte(static_cast<unsigned char>(byte) >> shift);
22}
23
24constexpr auto operator<<=(std::byte& byte, di::concepts::Integral auto shift) noexcept -> std::byte& {
25 return byte = byte << shift;
26}
27
28constexpr auto operator>>=(std::byte& byte, di::concepts::Integral auto shift) noexcept -> std::byte& {
29 return byte = byte >> shift;
30}
31
32constexpr auto operator|(std::byte a, std::byte b) noexcept -> std::byte {
33 return std::byte(static_cast<unsigned char>(a) | static_cast<unsigned char>(b));
34}
35
36constexpr auto operator&(std::byte a, std::byte b) noexcept -> std::byte {
37 return std::byte(static_cast<unsigned char>(a) & static_cast<unsigned char>(b));
38}
39
40constexpr auto operator^(std::byte a, std::byte b) noexcept -> std::byte {
41 return std::byte(static_cast<unsigned char>(a) ^ static_cast<unsigned char>(b));
42}
43
44constexpr auto operator~(std::byte a) noexcept -> std::byte {
45 return std::byte(~static_cast<unsigned char>(a));
46}
47
48constexpr auto operator|=(std::byte& a, std::byte b) noexcept -> std::byte& {
49 return a = a | b;
50}
51
52constexpr auto operator&=(std::byte& a, std::byte b) noexcept -> std::byte& {
53 return a = a & b;
54}
55
56constexpr auto operator^=(std::byte& a, std::byte b) noexcept -> std::byte& {
57 return a = a ^ b;
58}
59}
60#endif
61
62namespace di::types {
63using Byte = std::byte;
64using byte = std::byte;
65using std::to_integer;
66}
67
68namespace di {
69using types::Byte;
70using types::byte;
71using types::to_integer;
72}
73
74#if !defined(DI_NO_GLOBALS) && !defined(DI_NO_GLOBAL_TYPES)
75using di::byte;
76#endif
constexpr auto operator|(Color color, BackgroundColor background)
Definition style.h:82
constexpr auto operator<<(M &&m, F &&f) -> decltype(fail(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:22
constexpr auto operator>>(M &&m, F &&f) -> decltype(bind(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:17
constexpr auto operator&(M &&m, F &&f) -> decltype(fmap_right(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:27
constexpr auto operator~(Parser &&parser)
Definition ignore.h:21
Definition method.h:5
std::byte byte
Definition byte.h:64
std::byte Byte
Definition byte.h:63
Definition zstring_parser.h:9
Definition enable_generate_structed_bindings.h:46