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

Side by Side Diff: third_party/re2/re2/prefilter.h

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, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/re2/re2/perl_groups.cc ('k') | third_party/re2/re2/prefilter.cc » ('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 // Prefilter is the class used to extract string guards from regexps.
6 // Rather than using Prefilter class directly, use FilteredRE2.
7 // See filtered_re2.h
8
9 #ifndef RE2_PREFILTER_H_
10 #define RE2_PREFILTER_H_
11
12 #include "util/util.h"
13
14 namespace re2 {
15
16 class RE2;
17
18 class Regexp;
19
20 class Prefilter {
21 // Instead of using Prefilter directly, use FilteredRE2; see filtered_re2.h
22 public:
23 enum Op {
24 ALL = 0, // Everything matches
25 NONE, // Nothing matches
26 ATOM, // The string atom() must match
27 AND, // All in subs() must match
28 OR, // One of subs() must match
29 };
30
31 explicit Prefilter(Op op);
32 ~Prefilter();
33
34 Op op() { return op_; }
35 const string& atom() const { return atom_; }
36 void set_unique_id(int id) { unique_id_ = id; }
37 int unique_id() const { return unique_id_; }
38
39 // The children of the Prefilter node.
40 vector<Prefilter*>* subs() {
41 CHECK(op_ == AND || op_ == OR);
42 return subs_;
43 }
44
45 // Set the children vector. Prefilter takes ownership of subs and
46 // subs_ will be deleted when Prefilter is deleted.
47 void set_subs(vector<Prefilter*>* subs) { subs_ = subs; }
48
49 // Given a RE2, return a Prefilter. The caller takes ownership of
50 // the Prefilter and should deallocate it. Returns NULL if Prefilter
51 // cannot be formed.
52 static Prefilter* FromRE2(const RE2* re2);
53
54 // Returns a readable debug string of the prefilter.
55 string DebugString() const;
56
57 private:
58 class Info;
59
60 // Combines two prefilters together to create an AND. The passed
61 // Prefilters will be part of the returned Prefilter or deleted.
62 static Prefilter* And(Prefilter* a, Prefilter* b);
63
64 // Combines two prefilters together to create an OR. The passed
65 // Prefilters will be part of the returned Prefilter or deleted.
66 static Prefilter* Or(Prefilter* a, Prefilter* b);
67
68 // Generalized And/Or
69 static Prefilter* AndOr(Op op, Prefilter* a, Prefilter* b);
70
71 static Prefilter* FromRegexp(Regexp* a);
72
73 static Prefilter* FromString(const string& str);
74
75 static Prefilter* OrStrings(set<string>* ss);
76
77 static Info* BuildInfo(Regexp* re);
78
79 Prefilter* Simplify();
80
81 // Kind of Prefilter.
82 Op op_;
83
84 // Sub-matches for AND or OR Prefilter.
85 vector<Prefilter*>* subs_;
86
87 // Actual string to match in leaf node.
88 string atom_;
89
90 // If different prefilters have the same string atom, or if they are
91 // structurally the same (e.g., OR of same atom strings) they are
92 // considered the same unique nodes. This is the id for each unique
93 // node. This field is populated with a unique id for every node,
94 // and -1 for duplicate nodes.
95 int unique_id_;
96
97 // Used for debugging, helps in tracking memory leaks.
98 int alloc_id_;
99
100 DISALLOW_EVIL_CONSTRUCTORS(Prefilter);
101 };
102
103 } // namespace re2
104
105 #endif // RE2_PREFILTER_H_
OLDNEW
« no previous file with comments | « third_party/re2/re2/perl_groups.cc ('k') | third_party/re2/re2/prefilter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698