21 using const_iterator =
typename std::string_view::const_iterator;
29 std::optional<const_iterator> text_segment_start;
45 [[nodiscard]]
char const &operator*() const noexcept
50 [[nodiscard]]
bool atEOF() const noexcept
55 skeleton_parse_context &operator++() noexcept
63 skeleton_parse_context &operator+=(ssize_t x)
noexcept
65 for (ssize_t i = 0; i != x; ++i) {
71 bool starts_with(std::string_view text)
const noexcept
73 return std::string_view{index, last}.starts_with(text);
76 bool starts_with_and_advance_over(std::string_view text)
noexcept
78 if (starts_with(text)) {
86 bool advance_to(std::string_view text)
noexcept
89 if (starts_with(text)) {
97 bool advance_over(std::string_view text)
noexcept
99 if (advance_to(text)) {
100 *
this += ssize(text);
111 template<
typename T,
typename... Args>
112 void push(Args &&...args)
114 statement_stack.
push_back(std::make_unique<T>(std::forward<Args>(args)...));
119 template<
typename T,
typename... Args>
120 [[nodiscard]]
bool append(Args &&...args)
noexcept
122 if (statement_stack.
size() > 0) {
123 return append(std::make_unique<T>(std::forward<Args>(args)...));
133 [[nodiscard]]
bool pop() noexcept;
135 void start_of_text_segment(
int back_track = 0) noexcept;
136 void end_of_text_segment();
138 [[nodiscard]]
bool top_statement_is_do() const noexcept;
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
formula_post_process_context post_process_context
Post process context is used to record functions that are defined in the template being parsed.
Definition skeleton_parse_context.hpp:34