Iros
 
Loading...
Searching...
No Matches
status_code_domain.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/types/prelude.h"
6
7namespace di::vocab {
9public:
10 using UniqueId = u64;
11
12 constexpr auto id() const { return m_id; }
13
14 constexpr virtual auto name() const -> container::ErasedString = 0;
15
16 struct PayloadInfo {
18 size_t total_size;
20
21 PayloadInfo() = default;
22 constexpr PayloadInfo(size_t payload_size_, size_t total_size_, size_t total_aignment_)
23 : payload_size(payload_size_), total_size(total_size_), total_alignment(total_aignment_) {}
24 };
25
26 constexpr virtual auto payload_info() const -> PayloadInfo = 0;
27
28protected:
29 constexpr explicit StatusCodeDomain(UniqueId id) : m_id(id) {}
30
33
34 auto operator=(StatusCodeDomain const&) -> StatusCodeDomain& = default;
36
37 ~StatusCodeDomain() = default;
38
39 constexpr virtual auto do_failure(StatusCode<void> const&) const -> bool = 0;
40 constexpr virtual auto do_equivalent(StatusCode<void> const&, StatusCode<void> const&) const -> bool = 0;
41 constexpr virtual auto do_message(StatusCode<void> const&) const -> container::ErasedString = 0;
42 constexpr virtual auto do_convert_to_generic(StatusCode<void> const&) const -> GenericCode = 0;
43 constexpr virtual void do_erased_destroy(StatusCode<void>&, size_t) const {
44 // This is a no-op for trivially copyable types, but must be
45 // customized for trivially relocable types (UniquePtr) to
46 // prevent memory leaks.
47 }
48
49private:
50 template<typename Domain>
51 friend class StatusCode;
52
53 constexpr friend auto operator==(StatusCodeDomain const& a, StatusCodeDomain const& b) -> bool {
54 return a.id() == b.id();
55 }
56 constexpr friend auto operator<=>(StatusCodeDomain const& a, StatusCodeDomain const& b) -> strong_ordering {
57 return a.id() <=> b.id();
58 }
59
60 UniqueId m_id;
61};
62}
Definition erased_string.h:21
virtual constexpr auto name() const -> container::ErasedString=0
constexpr StatusCodeDomain(UniqueId id)
Definition status_code_domain.h:29
virtual constexpr auto do_equivalent(StatusCode< void > const &, StatusCode< void > const &) const -> bool=0
StatusCodeDomain(StatusCodeDomain const &)=default
constexpr auto id() const
Definition status_code_domain.h:12
constexpr friend auto operator==(StatusCodeDomain const &a, StatusCodeDomain const &b) -> bool
Definition status_code_domain.h:53
virtual constexpr auto payload_info() const -> PayloadInfo=0
friend class StatusCode
Definition status_code_domain.h:51
constexpr friend auto operator<=>(StatusCodeDomain const &a, StatusCodeDomain const &b) -> strong_ordering
Definition status_code_domain.h:56
auto operator=(StatusCodeDomain const &) -> StatusCodeDomain &=default
virtual constexpr auto do_message(StatusCode< void > const &) const -> container::ErasedString=0
virtual constexpr auto do_failure(StatusCode< void > const &) const -> bool=0
virtual constexpr auto do_convert_to_generic(StatusCode< void > const &) const -> GenericCode=0
u64 UniqueId
Definition status_code_domain.h:10
virtual constexpr void do_erased_destroy(StatusCode< void > &, size_t) const
Definition status_code_domain.h:43
StatusCodeDomain(StatusCodeDomain &&)=default
auto operator=(StatusCodeDomain &&) -> StatusCodeDomain &=default
Definition sequence.h:12
__UINT64_TYPE__ u64
Definition integers.h:12
Definition lazy.h:165
StatusCode< platform::GenericDomain > GenericCode
Definition status_code_forward_declaration.h:13
Definition status_code_domain.h:16
size_t total_size
Definition status_code_domain.h:18
constexpr PayloadInfo(size_t payload_size_, size_t total_size_, size_t total_aignment_)
Definition status_code_domain.h:22
size_t total_alignment
Definition status_code_domain.h:19
size_t payload_size
Definition status_code_domain.h:17