Iros
 
Loading...
Searching...
No Matches
writer.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/any/prelude.h"
4#include "di/meta/vocab.h"
8
9namespace di::io {
10namespace detail {
12 template<typename T>
13 constexpr auto operator()(T& writer, Span<Byte const> data) const -> Result<usize>
14 requires(requires {
16 })
17 {
18 return writer.write_some(data);
19 }
20
21 template<typename T>
23 requires(requires {
24 { (*this)(writer.get(), data) };
25 })
26 {
27 return (*this)(writer.get(), data);
28 }
29 };
30
31 struct FlushMember {
32 template<typename T>
33 constexpr auto operator()(T& writer) const -> Result<void>
34 requires(requires {
36 })
37 {
38 return writer.flush();
39 }
40
41 template<typename T>
42 constexpr auto operator()(util::ReferenceWrapper<T> writer) const -> Result<void>
43 requires(requires {
44 { (*this)(writer.get()) };
45 })
46 {
47 return (*this)(writer.get());
48 }
49 };
50
51}
52
53struct WriteSome : Dispatcher<WriteSome, Result<usize>(This&, Span<Byte const>), detail::WriteSomeMember> {};
54struct Flush : Dispatcher<Flush, Result<void>(This&), detail::FlushMember> {};
55
56constexpr inline auto write_some = WriteSome {};
57constexpr inline auto flush = Flush {};
58
60}
61
62namespace di::meta {
63template<typename T, concepts::Impl<io::Writer> Writer>
66}
67
68namespace di {
69using io::write_some;
70using io::Writer;
71}
Definition reference_wrapper.h:14
Definition span_forward_declaration.h:10
Implicit conversion for this test refers to the ability to return a value of function from a type.
Definition operations.h:89
detail::DispatcherImpl< Self, Sig, Tags... > Dispatcher
Definition dispatcher.h:47
Definition reader.h:8
Definition reader.h:7
constexpr auto flush
Definition writer.h:57
meta::List< WriteSome, Flush > Writer
Definition writer.h:59
constexpr auto write_some
Definition writer.h:56
Definition merge_interfaces.h:6
meta::LikeExpected< decltype(io::write_some(util::declval< Writer & >(), util::declval< Span< Byte const > >())), T > WriterResult
Definition writer.h:64
Type< detail::LikeExpectedHelper< T, U > > LikeExpected
Definition vocab.h:60
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Expected< T, Error > Result
Definition result.h:8
Definition zstring_parser.h:9
constexpr auto data
Definition data.h:51
Definition writer.h:54
Definition writer.h:53
Definition writer.h:31
constexpr auto operator()(util::ReferenceWrapper< T > writer) const -> Result< void > requires(
Definition writer.h:42
constexpr auto operator()(T &writer) const -> Result< void > requires(
Definition writer.h:33
Definition writer.h:11
constexpr auto operator()(util::ReferenceWrapper< T > writer, Span< Byte const > data) const -> Result< usize > requires(
Definition writer.h:22
constexpr auto operator()(T &writer, Span< Byte const > data) const -> Result< usize > requires(
Definition writer.h:13
Definition core.h:5