20 using const_iterator =
typename std::string_view::const_iterator;
28 std::optional<const_iterator> text_segment_start;
44 [[nodiscard]]
char const& operator*() const noexcept {
48 [[nodiscard]]
bool atEOF() const noexcept {
52 skeleton_parse_context& operator++() noexcept {
59 skeleton_parse_context& operator+=(ssize_t x)
noexcept {
60 for (ssize_t i = 0; i != x; ++i) {
66 bool starts_with(std::string_view text)
const noexcept {
67 return std::string_view{index, last}.starts_with(text);
70 bool starts_with_and_advance_over(std::string_view text)
noexcept {
71 if (starts_with(text)) {
72 *
this += std::ssize(text);
79 bool advance_to(std::string_view text)
noexcept {
81 if (starts_with(text)) {
89 bool advance_over(std::string_view text)
noexcept {
90 if (advance_to(text)) {
91 *
this += std::ssize(text);
102 template<
typename T,
typename... Args>
103 void push(Args &&... args) {
104 statement_stack.
push_back(std::make_unique<T>(std::forward<Args>(args)...));
109 template<
typename T,
typename... Args>
110 [[nodiscard]]
bool append(Args &&... args)
noexcept {
111 if (statement_stack.
size() > 0) {
112 return append(std::make_unique<T>(std::forward<Args>(args)...));
122 [[nodiscard]]
bool pop() noexcept;
124 void start_of_text_segment(
int back_track = 0) noexcept;
125 void end_of_text_segment();
127 [[nodiscard]]
bool top_statement_is_do() const noexcept;
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:33