di
0.1.0
Loading...
Searching...
No Matches
code_point_parser.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/interface/prelude.h
"
4
#include "
di/parser/concepts/parser_context.h
"
5
#include "
di/parser/create_parser.h
"
6
#include "
di/parser/meta/parser_context_result.h
"
7
#include "
di/parser/parser_base.h
"
8
#include "
di/vocab/expected/prelude.h
"
9
10
namespace
di::parser
{
11
namespace
detail {
12
class
CodePointParser :
public
ParserBase
<CodePointParser> {
13
public
:
14
template
<concepts::ParserContext Context>
15
constexpr
auto
parse
(Context& context)
const
->
meta::ParserContextResult<c32, Context>
{
16
if
(
container::empty
(context)) {
17
return
vocab::Unexpected
(context.make_error());
18
}
19
auto
it =
container::begin
(context);
20
auto
result = *it;
21
context.advance(++it);
22
return
result;
23
}
24
};
25
26
struct
CodePointFunction {
27
constexpr
auto
operator()()
const
{
return
CodePointParser {}; }
28
};
29
30
constexpr
auto
tag_invoke
(
types::Tag<create_parser_in_place>
,
InPlaceType<c32>
,
concepts::ParserContext
auto
&) {
31
return
CodePointParser {};
32
}
33
}
34
35
constexpr
inline
auto
code_point
= detail::CodePointFunction {};
36
}
di::parser::ParserBase
Definition
parser_base.h:5
di::concepts::ParserContext
Definition
parser_context.h:12
prelude.h
create_parser.h
di::container::empty
constexpr auto empty
Definition
empty.h:45
di::container::begin
constexpr auto begin
Definition
begin.h:52
di::meta::ParserContextResult
vocab::Expected< T, meta::ParserContextError< Context > > ParserContextResult
Definition
parser_context_result.h:8
di::parser
Definition
code_point_parser.h:10
di::parser::code_point
constexpr auto code_point
Definition
code_point_parser.h:35
di::parser::parse
constexpr auto parse
Definition
parse.h:23
di::types::Tag
di::meta::Decay< decltype(T)> Tag
Definition
tag_invoke.h:28
di::vocab::Unexpected
Unexpected(E &&) -> Unexpected< meta::UnwrapRefDecay< E > >
di::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
parser_base.h
parser_context.h
parser_context_result.h
di::types::InPlaceType
Definition
in_place_type.h:5
prelude.h
di
parser
basic
code_point_parser.h
Generated by
1.13.2