15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2010 The RE2 Authors. All Rights Reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// license that can be found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef RE2_SET_H 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RE2_SET_H 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "re2/re2.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace re2 { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::vector; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An RE2::Set represents a collection of regexps that can 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be searched for simultaneously. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RE2::Set { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Set(const RE2::Options& options, RE2::Anchor anchor); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Set(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add adds regexp pattern to the set, interpreted using the RE2 options. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (The RE2 constructor's default options parameter is RE2::UTF8.) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add returns the regexp index that will be used to identify 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it in the result of Match, or -1 if the regexp cannot be parsed. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indices are assigned in sequential order starting from 0. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Error returns do not increment the index. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If an error occurs and error != NULL, *error will hold an error message. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int Add(const StringPiece& pattern, string* error); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compile prepares the Set for matching. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add must not be called again after Compile. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compile must be called before FullMatch or PartialMatch. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compile may return false if it runs out of memory. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Compile(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Match returns true if text matches any of the regexps in the set. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If so, it fills v with the indices of the matching regexps. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Match(const StringPiece& text, vector<int>* v) const; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RE2::Options options_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RE2::Anchor anchor_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vector<re2::Regexp*> re_; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re2::Prog* prog_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool compiled_; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //DISALLOW_EVIL_CONSTRUCTORS(Set); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Set(const Set&); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator=(const Set&); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace re2 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // RE2_SET_H 56