Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
write_exactly.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::io {
11namespace detail {
13 template<concepts::Impl<Writer> Writer>
14 constexpr auto operator()(Writer& writer, vocab::Span<byte const> data) const
16 auto nwritten = usize { 0 };
17 while (nwritten < data.size()) {
18 auto n = DI_TRY(write_some(writer, *data.subspan(nwritten)));
19 DI_ASSERT(n > 0);
20 nwritten += n;
21 }
22 return {};
23 };
24
25 template<concepts::Impl<Writer> Writer>
26 constexpr auto operator()(Writer& writer, char data) const -> meta::WriterResult<void, Writer> {
27 auto byte = di::byte(data);
28 return (*this)(writer, vocab::Span { &byte, 1 });
29 };
30
31 template<concepts::Impl<Writer> Writer, concepts::detail::ConstantString T>
33 constexpr auto operator()(Writer& writer, T const& data) const -> meta::WriterResult<void, Writer> {
34 for (auto ch : data) {
35 DI_TRY((*this)(writer, char(ch)));
36 }
37 return {};
38 };
39
40 template<concepts::Impl<Writer> Writer, concepts::detail::ConstantString T>
42 constexpr auto operator()(Writer& writer, T const& data) const -> meta::WriterResult<void, Writer> {
43 for (auto ch : data) {
44 DI_TRY((*this)(writer, ch));
45 }
46 return {};
47 };
48 };
49}
50
52}
53
54namespace di {
56}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition transparent_encoding.h:34
Definition utf8_encoding.h:107
Definition span_forward_declaration.h:10
Definition core.h:114
#define DI_TRY(...)
Definition monad_try.h:13
Definition reader.h:8
Definition reader.h:7
constexpr auto write_exactly
Definition write_exactly.h:51
meta::List< WriteSome, Flush > Writer
Definition writer.h:59
constexpr auto write_some
Definition writer.h:56
meta::LikeExpected< decltype(io::write_some(util::declval< Writer & >(), util::declval< Span< Byte const > >())), T > WriterResult
Definition writer.h:64
std::byte byte
Definition byte.h:64
size_t usize
Definition integers.h:33
Definition zstring_parser.h:9
constexpr auto data
Definition data.h:51
Definition write_exactly.h:12
constexpr auto operator()(Writer &writer, char data) const -> meta::WriterResult< void, Writer >
Definition write_exactly.h:26
constexpr auto operator()(Writer &writer, vocab::Span< byte const > data) const -> meta::WriterResult< void, Writer >
Definition write_exactly.h:14