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

Unified Diff: third_party/re2/re2/filtered_re2.cc

Issue 10575037: Include RE2 library (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Less intrusive fix for Android Created 8 years, 5 months 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/re2/re2/filtered_re2.cc
diff --git a/third_party/re2/re2/filtered_re2.cc b/third_party/re2/re2/filtered_re2.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9269cee105826e605ec181f8cbe6b45b81ee3d26
--- /dev/null
+++ b/third_party/re2/re2/filtered_re2.cc
@@ -0,0 +1,100 @@
+// Copyright 2009 The RE2 Authors. All Rights Reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include <string>
+#include "util/util.h"
+#include "re2/filtered_re2.h"
+#include "re2/prefilter.h"
+#include "re2/prefilter_tree.h"
+
+namespace re2 {
+
+FilteredRE2::FilteredRE2()
+ : compiled_(false),
+ prefilter_tree_(new PrefilterTree()) {
+}
+
+FilteredRE2::~FilteredRE2() {
+ for (int i = 0; i < re2_vec_.size(); i++)
+ delete re2_vec_[i];
+ delete prefilter_tree_;
+}
+
+RE2::ErrorCode FilteredRE2::Add(const StringPiece& pattern,
+ const RE2::Options& options, int* id) {
+ RE2* re = new RE2(pattern, options);
+ RE2::ErrorCode code = re->error_code();
+
+ if (!re->ok()) {
+ LOG(ERROR) << "Couldn't compile regular expression, skipping: "
+ << re << " due to error " << re->error();
+ delete re;
+ } else {
+ *id = re2_vec_.size();
+ re2_vec_.push_back(re);
+ }
+
+ return code;
+}
+
+void FilteredRE2::Compile(vector<string>* atoms) {
+ if (compiled_ || re2_vec_.size() == 0) {
+ LOG(INFO) << "C: " << compiled_ << " S:" << re2_vec_.size();
+ return;
+ }
+
+ for (int i = 0; i < re2_vec_.size(); i++) {
+ Prefilter* prefilter = Prefilter::FromRE2(re2_vec_[i]);
+ prefilter_tree_->Add(prefilter);
+ }
+ atoms->clear();
+ prefilter_tree_->Compile(atoms);
+ compiled_ = true;
+}
+
+int FilteredRE2::SlowFirstMatch(const StringPiece& text) const {
+ for (int i = 0; i < re2_vec_.size(); i++)
+ if (RE2::PartialMatch(text, *re2_vec_[i]))
+ return i;
+ return -1;
+}
+
+int FilteredRE2::FirstMatch(const StringPiece& text,
+ const vector<int>& atoms) const {
+ if (!compiled_) {
+ LOG(DFATAL) << "FirstMatch called before Compile";
+ return -1;
+ }
+ vector<int> regexps;
+ prefilter_tree_->RegexpsGivenStrings(atoms, &regexps);
+ for (int i = 0; i < regexps.size(); i++)
+ if (RE2::PartialMatch(text, *re2_vec_[regexps[i]]))
+ return regexps[i];
+ return -1;
+}
+
+bool FilteredRE2::AllMatches(
+ const StringPiece& text,
+ const vector<int>& atoms,
+ vector<int>* matching_regexps) const {
+ matching_regexps->clear();
+ vector<int> regexps;
+ prefilter_tree_->RegexpsGivenStrings(atoms, &regexps);
+ for (int i = 0; i < regexps.size(); i++)
+ if (RE2::PartialMatch(text, *re2_vec_[regexps[i]]))
+ matching_regexps->push_back(regexps[i]);
+ return !matching_regexps->empty();
+}
+
+void FilteredRE2::RegexpsGivenStrings(const vector<int>& matched_atoms,
+ vector<int>* passed_regexps) {
+ prefilter_tree_->RegexpsGivenStrings(matched_atoms, passed_regexps);
+}
+
+
+void FilteredRE2::PrintPrefilter(int regexpid) {
+ prefilter_tree_->PrintPrefilter(regexpid);
+}
+
+} // namespace re2
« 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