Iros
 
Loading...
Searching...
No Matches
zstring_parser.h
Go to the documentation of this file.
1#pragma once
2
6#include "di/parser/prelude.h"
7#include "di/types/prelude.h"
8
9namespace di::parser {
10namespace detail {
12 constexpr c32 operator()(char value) const { return c32(value); }
13 };
14}
15
16constexpr inline auto as_c32 = detail::AsC32Function {};
17
23
25private:
27 using CodePoints = decltype(util::declval<container::ZCString&>() | di::transform(as_c32));
30
31public:
32 constexpr explicit ZStringParserContext(container::ZCString string)
33 : m_code_points(string | di::transform(as_c32)), m_iterator(container::begin(m_code_points)) {}
34
37
38 constexpr auto begin() const { return m_iterator; }
39 constexpr auto end() const { return container::end(m_code_points); }
40
41 constexpr auto encoding() const { return m_encoding; }
42 constexpr auto advance(Iter it) { m_iterator = it; }
43 constexpr auto make_error() { return ZStringError::Invalid; }
44 constexpr auto make_error(IntegerError error, ZIter iterator_on_error) {
45 m_iterator_on_error = iterator_on_error;
47 }
48
49 constexpr auto iterator_on_error() const { return m_iterator_on_error; }
50
51private:
52 constexpr friend auto tag_invoke(types::Tag<reconstruct>, InPlaceType<ZStringParserContext>, Iter iter, Iter sent) {
53 return reconstruct(in_place_type<View>, iter.base(), sent.base());
54 }
55
56 CodePoints m_code_points;
57 Iter m_iterator;
58 ZIter m_iterator_on_error;
59 [[no_unique_address]] Encoding m_encoding;
60};
61}
62
63namespace di::parser::detail {
67}
Definition string_view_impl_forward_declaration.h:7
Definition transparent_encoding.h:34
Definition zstring_parser.h:24
constexpr auto make_error(IntegerError error, ZIter iterator_on_error)
Definition zstring_parser.h:44
constexpr ZStringParserContext(container::ZCString string)
Definition zstring_parser.h:32
container::string::TransparentEncoding Encoding
Definition zstring_parser.h:36
constexpr auto encoding() const
Definition zstring_parser.h:41
constexpr auto begin() const
Definition zstring_parser.h:38
constexpr auto iterator_on_error() const
Definition zstring_parser.h:49
ZStringError Error
Definition zstring_parser.h:35
constexpr friend auto tag_invoke(types::Tag< reconstruct >, InPlaceType< ZStringParserContext >, Iter iter, Iter sent)
Definition zstring_parser.h:52
constexpr auto end() const
Definition zstring_parser.h:39
constexpr auto make_error()
Definition zstring_parser.h:43
constexpr auto advance(Iter it)
Definition zstring_parser.h:42
Definition sequence.h:12
ZStringImpl< char const > ZCString
Definition zstring.h:38
constexpr auto end
Definition end.h:47
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition container_iterator.h:8
Definition zstring_parser.h:10
Definition zstring_parser.h:9
IntegerError
Definition integer.h:21
@ Overflow
Definition integer.h:22
ZStringError
Definition zstring_parser.h:18
@ Underflow
Definition zstring_parser.h:21
@ Overflow
Definition zstring_parser.h:20
@ Invalid
Definition zstring_parser.h:19
constexpr auto as_c32
Definition zstring_parser.h:16
constexpr auto transform
Definition transform.h:38
char32_t c32
Definition char.h:6
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition zstring_parser.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto reconstruct
Definition reconstruct.h:75
constexpr auto in_place_type
Definition in_place_type.h:12
Definition zstring_parser.h:11
constexpr c32 operator()(char value) const
Definition zstring_parser.h:12
Definition in_place_type.h:5