xref: /aosp_15_r20/external/regex-re2/re2/testing/null_walker.cc (revision ccdc9c3e24c519bfa4832a66aa2e83a52c19f295)
1*ccdc9c3eSSadaf Ebrahimi // Copyright 2009 The RE2 Authors.  All Rights Reserved.
2*ccdc9c3eSSadaf Ebrahimi // Use of this source code is governed by a BSD-style
3*ccdc9c3eSSadaf Ebrahimi // license that can be found in the LICENSE file.
4*ccdc9c3eSSadaf Ebrahimi 
5*ccdc9c3eSSadaf Ebrahimi #include "util/test.h"
6*ccdc9c3eSSadaf Ebrahimi #include "util/logging.h"
7*ccdc9c3eSSadaf Ebrahimi #include "re2/regexp.h"
8*ccdc9c3eSSadaf Ebrahimi #include "re2/walker-inl.h"
9*ccdc9c3eSSadaf Ebrahimi 
10*ccdc9c3eSSadaf Ebrahimi namespace re2 {
11*ccdc9c3eSSadaf Ebrahimi 
12*ccdc9c3eSSadaf Ebrahimi // Null walker.  For benchmarking the walker itself.
13*ccdc9c3eSSadaf Ebrahimi 
14*ccdc9c3eSSadaf Ebrahimi class NullWalker : public Regexp::Walker<bool> {
15*ccdc9c3eSSadaf Ebrahimi  public:
NullWalker()16*ccdc9c3eSSadaf Ebrahimi   NullWalker() { }
17*ccdc9c3eSSadaf Ebrahimi   bool PostVisit(Regexp* re, bool parent_arg, bool pre_arg,
18*ccdc9c3eSSadaf Ebrahimi                  bool* child_args, int nchild_args);
19*ccdc9c3eSSadaf Ebrahimi 
ShortVisit(Regexp * re,bool a)20*ccdc9c3eSSadaf Ebrahimi   bool ShortVisit(Regexp* re, bool a) {
21*ccdc9c3eSSadaf Ebrahimi     // Should never be called: we use Walk not WalkExponential.
22*ccdc9c3eSSadaf Ebrahimi     LOG(DFATAL) << "NullWalker::ShortVisit called";
23*ccdc9c3eSSadaf Ebrahimi     return a;
24*ccdc9c3eSSadaf Ebrahimi   }
25*ccdc9c3eSSadaf Ebrahimi 
26*ccdc9c3eSSadaf Ebrahimi  private:
27*ccdc9c3eSSadaf Ebrahimi   NullWalker(const NullWalker&) = delete;
28*ccdc9c3eSSadaf Ebrahimi   NullWalker& operator=(const NullWalker&) = delete;
29*ccdc9c3eSSadaf Ebrahimi };
30*ccdc9c3eSSadaf Ebrahimi 
31*ccdc9c3eSSadaf Ebrahimi // Called after visiting re's children.  child_args contains the return
32*ccdc9c3eSSadaf Ebrahimi // value from each of the children's PostVisits (i.e., whether each child
33*ccdc9c3eSSadaf Ebrahimi // can match an empty string).  Returns whether this clause can match an
34*ccdc9c3eSSadaf Ebrahimi // empty string.
PostVisit(Regexp * re,bool parent_arg,bool pre_arg,bool * child_args,int nchild_args)35*ccdc9c3eSSadaf Ebrahimi bool NullWalker::PostVisit(Regexp* re, bool parent_arg, bool pre_arg,
36*ccdc9c3eSSadaf Ebrahimi                                   bool* child_args, int nchild_args) {
37*ccdc9c3eSSadaf Ebrahimi   return false;
38*ccdc9c3eSSadaf Ebrahimi }
39*ccdc9c3eSSadaf Ebrahimi 
40*ccdc9c3eSSadaf Ebrahimi // Returns whether re can match an empty string.
NullWalk()41*ccdc9c3eSSadaf Ebrahimi void Regexp::NullWalk() {
42*ccdc9c3eSSadaf Ebrahimi   NullWalker w;
43*ccdc9c3eSSadaf Ebrahimi   w.Walk(this, false);
44*ccdc9c3eSSadaf Ebrahimi }
45*ccdc9c3eSSadaf Ebrahimi 
46*ccdc9c3eSSadaf Ebrahimi }  // namespace re2
47