Line data Source code
1 : #pragma once
2 :
3 : #include <re2/re2.h>
4 :
5 : #include <generator>
6 : #include <string_view>
7 : #include <tuple>
8 :
9 : template <class... Args> class FindAndConsume {
10 : public:
11 5 : FindAndConsume(std::string_view const regex) : _regex(regex) {}
12 :
13 : using Result = std::tuple<Args...>;
14 :
15 26 : std::generator<Result> operator()(std::string_view s) const {
16 26 : std::tuple<Args...> parsedValues;
17 2253 : auto f = [&](auto &...args) { return RE2::FindAndConsume(&s, _regex, &args...); };
18 2253 : while (std::apply(f, parsedValues))
19 2227 : co_yield parsedValues;
20 26 : }
21 :
22 : private:
23 : RE2 _regex;
24 : };
|