Index: extensions/common/matcher/substring_set_matcher.h |
diff --git a/extensions/common/matcher/substring_set_matcher.h b/extensions/common/matcher/substring_set_matcher.h |
index 4ba8ec3acc364413a3f6dc16c25e9ed5db7f57b9..610efc0fc22a27a2c7f2465f811c1fbbd6b0f27f 100644 |
--- a/extensions/common/matcher/substring_set_matcher.h |
+++ b/extensions/common/matcher/substring_set_matcher.h |
@@ -5,6 +5,7 @@ |
#ifndef EXTENSIONS_COMMON_MATCHER_SUBSTRING_SET_MATCHER_H_ |
#define EXTENSIONS_COMMON_MATCHER_SUBSTRING_SET_MATCHER_H_ |
+#include <limits> |
#include <map> |
#include <set> |
#include <string> |
@@ -80,21 +81,22 @@ class SubstringSetMatcher { |
class AhoCorasickNode { |
public: |
// Key: label of the edge, value: node index in |tree_| of parent class. |
- typedef std::map<char, int> Edges; |
+ typedef std::map<char, uint32> Edges; |
typedef std::set<StringPattern::ID> Matches; |
+ static const uint32 kNoSuchEdge; // Represents an invalid node index. |
+ |
AhoCorasickNode(); |
~AhoCorasickNode(); |
AhoCorasickNode(const AhoCorasickNode& other); |
AhoCorasickNode& operator=(const AhoCorasickNode& other); |
- bool HasEdge(char c) const; |
- int GetEdge(char c) const; |
- void SetEdge(char c, int node); |
+ uint32 GetEdge(char c) const; |
+ void SetEdge(char c, uint32 node); |
const Edges& edges() const { return edges_; } |
- int failure() const { return failure_; } |
- void set_failure(int failure) { failure_ = failure; } |
+ uint32 failure() const { return failure_; } |
+ void set_failure(uint32 failure) { failure_ = failure; } |
void AddMatch(StringPattern::ID id); |
void AddMatches(const Matches& matches); |
@@ -105,13 +107,17 @@ class SubstringSetMatcher { |
Edges edges_; |
// Node index that failure edge leads to. |
- int failure_; |
+ uint32 failure_; |
// Identifiers of matches. |
Matches matches_; |
}; |
- void RebuildAhoCorasickTree(); |
+ typedef std::map<StringPattern::ID, const StringPattern*> SubstringPatternMap; |
+ typedef std::vector<const StringPattern*> SubstringPatternVector; |
+ |
+ // |sorted_patterns| is a copy of |patterns_| sorted by the pattern string. |
+ void RebuildAhoCorasickTree(const SubstringPatternVector& sorted_patterns); |
// Inserts a path for |pattern->pattern()| into the tree and adds |
// |pattern->id()| to the set of matches. Ownership of |pattern| remains with |
@@ -121,9 +127,7 @@ class SubstringSetMatcher { |
// Set of all registered StringPatterns. Used to regenerate the |
// Aho-Corasick tree in case patterns are registered or unregistered. |
- typedef std::map<StringPattern::ID, const StringPattern*> |
- SubstringPatternSet; |
- SubstringPatternSet patterns_; |
+ SubstringPatternMap patterns_; |
// The nodes of a Aho-Corasick tree. |
std::vector<AhoCorasickNode> tree_; |