12 #include <hilti/rt/extension-points.h> 13 #include <hilti/rt/types/bytes.h> 14 #include <hilti/rt/types/stream.h> 15 #include <hilti/rt/types/vector.h> 19 struct jrx_match_state;
34 friend bool operator!=(
const Flags& a,
const Flags& b) {
return ! (a == b); }
74 std::tuple<int32_t, stream::View> advance(
const stream::View& data);
98 std::tuple<int32_t, int64_t> advance(
const Bytes& data,
bool is_final =
false);
113 std::pair<int32_t, int64_t> _advance(
const stream::View& data,
bool is_final);
119 std::unique_ptr<Pimpl> _pimpl;
149 const auto& patterns()
const {
return _patterns; }
150 const auto&
flags()
const {
return _flags; }
164 int32_t match(
const Bytes& data)
const;
191 std::tuple<int32_t, Bytes> find(
const Bytes& data)
const;
200 friend bool operator==(
const RegExp& a,
const RegExp& b) {
202 return a._flags == b._flags && a._patterns == b._patterns;
205 friend bool operator!=(
const RegExp& a,
const RegExp& b) {
return ! (a == b); }
210 jrx_regex_t* _jrx()
const {
211 assert(_jrx_shared &&
"regexp not compiled");
212 return _jrx_shared.get();
214 const auto& _jrxShared()
const {
return _jrx_shared; }
217 int16_t _search_pattern(jrx_match_state* ms,
const char* data,
size_t len, int32_t* so, int32_t* eo)
const;
220 void _compileOne(std::string pattern,
int idx);
223 std::vector<std::string> _patterns;
224 std::shared_ptr<jrx_regex_t>
228 namespace detail::adl {
232 return "<regexp-match-state>";
237 inline std::ostream& operator<<(std::ostream& out,
const RegExp& x) {
std::string to_string(T &&x)
Definition: extension-points.h:26
bool no_sub
Definition: regexp.h:29
bool use_std
Definition: regexp.h:30
Definition: stream.h:1408
Definition: elements.cc:17