Iros
 
Loading...
Searching...
No Matches
string_view_parser_context.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::parser {
7template<concepts::Encoding Enc>
9private:
11 using CodePoints = decltype(util::declval<View const&>().unicode_code_points());
13
14public:
15 constexpr explicit StringViewParserContext(View view)
16 : m_code_points(view.unicode_code_points())
17 , m_iterator(container::begin(m_code_points))
18 , m_encoding(view.encoding()) {}
19
21 using Encoding = Enc;
22
23 constexpr auto begin() const { return m_iterator; }
24 constexpr auto end() const { return container::end(m_code_points); }
25
26 constexpr auto encoding() const { return m_encoding; }
27 constexpr auto advance(Iter it) { m_iterator = it; }
28 constexpr auto make_error() { return Error { BasicError::InvalidArgument }; }
29
30private:
31 template<typename Iter, typename Sent>
34 Sent&& sent) {
35 return reconstruct(in_place_type<View>, util::forward<Iter>(iter), util::forward<Sent>(sent));
36 }
37
38 CodePoints m_code_points;
39 Iter m_iterator;
40 [[no_unique_address]] Enc m_encoding;
41};
42}
43
44namespace di::container::string {
45template<typename T>
46requires(concepts::HasEncoding<T> &&
47 concepts::DerivedFrom<T, container::string::ConstantStringInterface<T, meta::Encoding<T>>>)
50}
51}
Definition string_view_impl_forward_declaration.h:7
Definition string_view_parser_context.h:8
constexpr auto begin() const
Definition string_view_parser_context.h:23
constexpr StringViewParserContext(View view)
Definition string_view_parser_context.h:15
constexpr auto encoding() const
Definition string_view_parser_context.h:26
constexpr auto make_error()
Definition string_view_parser_context.h:28
constexpr auto advance(Iter it)
Definition string_view_parser_context.h:27
constexpr friend auto tag_invoke(types::Tag< reconstruct >, InPlaceType< StringViewParserContext >, Iter &&iter, Sent &&sent)
Definition string_view_parser_context.h:33
vocab::Error Error
Definition string_view_parser_context.h:20
Enc Encoding
Definition string_view_parser_context.h:21
constexpr auto end() const
Definition string_view_parser_context.h:24
Definition reconstructible_container.h:11
Definition constant_string_interface.h:31
Definition sequence.h:12
constexpr auto end
Definition end.h:47
decltype(container::begin(util::declval< T & >())) ContainerIterator
Definition container_iterator.h:8
Definition zstring_parser.h:9
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
StatusCode< Erased< long > > Error
Definition error.h:8
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 in_place_type.h:5