@@ -15,25 +15,34 @@ void RegexPredicateNode::RE::compile() {
1515 regex = Regex::from_pattern (pattern, Regex::Options::None);
1616}
1717
18+ bool RegexPredicateNode::check (const ResultNode* result) const {
19+ if (result->inherits (ResultNodeVector::classId)) {
20+ const auto * rv = static_cast <const ResultNodeVector *>(result);
21+ for (size_t i = 0 ; i < rv->size (); i++) {
22+ HoldString tmp (*rv, i);
23+ if (_re.regex .full_match (tmp)) return true ;
24+ }
25+ return false ;
26+ } else {
27+ HoldString tmp (*result);
28+ return _re.regex .full_match (tmp);
29+ }
30+ }
31+
32+ bool RegexPredicateNode::allow (const document::Document & doc, HitRank rank) {
33+ if (_argument.getRoot ()) {
34+ _argument.execute (doc, rank);
35+ return check (_argument.getResult ());
36+ }
37+ return false ;
38+ }
39+
1840bool RegexPredicateNode::allow (DocId docId, HitRank rank) {
19- bool isMatch = false ;
2041 if (_argument.getRoot ()) {
2142 _argument.execute (docId, rank);
22- const ResultNode* result = _argument.getResult ();
23- if (result->inherits (ResultNodeVector::classId)) {
24- const auto * rv = static_cast <const ResultNodeVector *>(result);
25- for (size_t i = 0 ; i < rv->size (); i++) {
26- HoldString tmp (*rv, i);
27- isMatch = _re.regex .full_match (tmp);
28- if (isMatch) break ;
29- }
30- } else {
31- HoldString tmp (*result);
32- isMatch = _re.regex .full_match (tmp);
33- }
34-
43+ return check (_argument.getResult ());
3544 }
36- return isMatch ;
45+ return false ;
3746}
3847
3948RegexPredicateNode::RegexPredicateNode () noexcept : _re(), _argument() {}
0 commit comments