| Index: third_party/re2/re2/prefilter.h
|
| diff --git a/third_party/re2/re2/prefilter.h b/third_party/re2/re2/prefilter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c2f9dddd85656f4b16dedca3174bbd567a8980e6
|
| --- /dev/null
|
| +++ b/third_party/re2/re2/prefilter.h
|
| @@ -0,0 +1,105 @@
|
| +// 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.
|
| +
|
| +// Prefilter is the class used to extract string guards from regexps.
|
| +// Rather than using Prefilter class directly, use FilteredRE2.
|
| +// See filtered_re2.h
|
| +
|
| +#ifndef RE2_PREFILTER_H_
|
| +#define RE2_PREFILTER_H_
|
| +
|
| +#include "util/util.h"
|
| +
|
| +namespace re2 {
|
| +
|
| +class RE2;
|
| +
|
| +class Regexp;
|
| +
|
| +class Prefilter {
|
| + // Instead of using Prefilter directly, use FilteredRE2; see filtered_re2.h
|
| + public:
|
| + enum Op {
|
| + ALL = 0, // Everything matches
|
| + NONE, // Nothing matches
|
| + ATOM, // The string atom() must match
|
| + AND, // All in subs() must match
|
| + OR, // One of subs() must match
|
| + };
|
| +
|
| + explicit Prefilter(Op op);
|
| + ~Prefilter();
|
| +
|
| + Op op() { return op_; }
|
| + const string& atom() const { return atom_; }
|
| + void set_unique_id(int id) { unique_id_ = id; }
|
| + int unique_id() const { return unique_id_; }
|
| +
|
| + // The children of the Prefilter node.
|
| + vector<Prefilter*>* subs() {
|
| + CHECK(op_ == AND || op_ == OR);
|
| + return subs_;
|
| + }
|
| +
|
| + // Set the children vector. Prefilter takes ownership of subs and
|
| + // subs_ will be deleted when Prefilter is deleted.
|
| + void set_subs(vector<Prefilter*>* subs) { subs_ = subs; }
|
| +
|
| + // Given a RE2, return a Prefilter. The caller takes ownership of
|
| + // the Prefilter and should deallocate it. Returns NULL if Prefilter
|
| + // cannot be formed.
|
| + static Prefilter* FromRE2(const RE2* re2);
|
| +
|
| + // Returns a readable debug string of the prefilter.
|
| + string DebugString() const;
|
| +
|
| + private:
|
| + class Info;
|
| +
|
| + // Combines two prefilters together to create an AND. The passed
|
| + // Prefilters will be part of the returned Prefilter or deleted.
|
| + static Prefilter* And(Prefilter* a, Prefilter* b);
|
| +
|
| + // Combines two prefilters together to create an OR. The passed
|
| + // Prefilters will be part of the returned Prefilter or deleted.
|
| + static Prefilter* Or(Prefilter* a, Prefilter* b);
|
| +
|
| + // Generalized And/Or
|
| + static Prefilter* AndOr(Op op, Prefilter* a, Prefilter* b);
|
| +
|
| + static Prefilter* FromRegexp(Regexp* a);
|
| +
|
| + static Prefilter* FromString(const string& str);
|
| +
|
| + static Prefilter* OrStrings(set<string>* ss);
|
| +
|
| + static Info* BuildInfo(Regexp* re);
|
| +
|
| + Prefilter* Simplify();
|
| +
|
| + // Kind of Prefilter.
|
| + Op op_;
|
| +
|
| + // Sub-matches for AND or OR Prefilter.
|
| + vector<Prefilter*>* subs_;
|
| +
|
| + // Actual string to match in leaf node.
|
| + string atom_;
|
| +
|
| + // If different prefilters have the same string atom, or if they are
|
| + // structurally the same (e.g., OR of same atom strings) they are
|
| + // considered the same unique nodes. This is the id for each unique
|
| + // node. This field is populated with a unique id for every node,
|
| + // and -1 for duplicate nodes.
|
| + int unique_id_;
|
| +
|
| + // Used for debugging, helps in tracking memory leaks.
|
| + int alloc_id_;
|
| +
|
| + DISALLOW_EVIL_CONSTRUCTORS(Prefilter);
|
| +};
|
| +
|
| +} // namespace re2
|
| +
|
| +#endif // RE2_PREFILTER_H_
|
|
|