Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: third_party/re2/re2/filtered_re2.cc

Issue 1544433002: Replace RE2 import with a dependency (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Re-Added LICENSE and OWNERS file Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/re2/re2/filtered_re2.h ('k') | third_party/re2/re2/make_perl_groups.pl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2009 The RE2 Authors. All Rights Reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 #include <string>
6 #include "util/util.h"
7 #include "re2/filtered_re2.h"
8 #include "re2/prefilter.h"
9 #include "re2/prefilter_tree.h"
10
11 namespace re2 {
12
13 FilteredRE2::FilteredRE2()
14 : compiled_(false),
15 prefilter_tree_(new PrefilterTree()) {
16 }
17
18 FilteredRE2::~FilteredRE2() {
19 for (size_t i = 0; i < re2_vec_.size(); i++)
20 delete re2_vec_[i];
21 delete prefilter_tree_;
22 }
23
24 RE2::ErrorCode FilteredRE2::Add(const StringPiece& pattern,
25 const RE2::Options& options, int* id) {
26 RE2* re = new RE2(pattern, options);
27 RE2::ErrorCode code = re->error_code();
28
29 if (!re->ok()) {
30 if (options.log_errors()) {
31 LOG(ERROR) << "Couldn't compile regular expression, skipping: "
32 << re << " due to error " << re->error();
33 }
34 delete re;
35 } else {
36 *id = static_cast<int>(re2_vec_.size());
37 re2_vec_.push_back(re);
38 }
39
40 return code;
41 }
42
43 void FilteredRE2::Compile(vector<string>* atoms) {
44 if (compiled_ || re2_vec_.size() == 0) {
45 LOG(INFO) << "C: " << compiled_ << " S:" << re2_vec_.size();
46 return;
47 }
48
49 for (size_t i = 0; i < re2_vec_.size(); i++) {
50 Prefilter* prefilter = Prefilter::FromRE2(re2_vec_[i]);
51 prefilter_tree_->Add(prefilter);
52 }
53 atoms->clear();
54 prefilter_tree_->Compile(atoms);
55 compiled_ = true;
56 }
57
58 int FilteredRE2::SlowFirstMatch(const StringPiece& text) const {
59 for (size_t i = 0; i < re2_vec_.size(); i++)
60 if (RE2::PartialMatch(text, *re2_vec_[i]))
61 return static_cast<int>(i);
62 return -1;
63 }
64
65 int FilteredRE2::FirstMatch(const StringPiece& text,
66 const vector<int>& atoms) const {
67 if (!compiled_) {
68 LOG(DFATAL) << "FirstMatch called before Compile";
69 return -1;
70 }
71 vector<int> regexps;
72 prefilter_tree_->RegexpsGivenStrings(atoms, &regexps);
73 for (size_t i = 0; i < regexps.size(); i++)
74 if (RE2::PartialMatch(text, *re2_vec_[regexps[i]]))
75 return regexps[i];
76 return -1;
77 }
78
79 bool FilteredRE2::AllMatches(
80 const StringPiece& text,
81 const vector<int>& atoms,
82 vector<int>* matching_regexps) const {
83 matching_regexps->clear();
84 vector<int> regexps;
85 prefilter_tree_->RegexpsGivenStrings(atoms, &regexps);
86 for (size_t i = 0; i < regexps.size(); i++)
87 if (RE2::PartialMatch(text, *re2_vec_[regexps[i]]))
88 matching_regexps->push_back(regexps[i]);
89 return !matching_regexps->empty();
90 }
91
92 void FilteredRE2::AllPotentials(
93 const vector<int>& atoms,
94 vector<int>* potential_regexps) const {
95 prefilter_tree_->RegexpsGivenStrings(atoms, potential_regexps);
96 }
97
98 void FilteredRE2::RegexpsGivenStrings(const vector<int>& matched_atoms,
99 vector<int>* passed_regexps) {
100 prefilter_tree_->RegexpsGivenStrings(matched_atoms, passed_regexps);
101 }
102
103 void FilteredRE2::PrintPrefilter(int regexpid) {
104 prefilter_tree_->PrintPrefilter(regexpid);
105 }
106
107 } // namespace re2
OLDNEW
« no previous file with comments | « third_party/re2/re2/filtered_re2.h ('k') | third_party/re2/re2/make_perl_groups.pl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698