libabigail
abg-traverse.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- mode: C++ -*-
3 //
4 // Copyright (C) 2013-2023 Red Hat, Inc.
5 
6 /// @file
7 
8 #ifndef __ABG_TRAVERSE_H__
9 #define __ABG_TRAVERSE_H__
10 
11 #include "abg-fwd.h"
12 
13 namespace abigail
14 {
15 
16 namespace ir
17 {
18 
19 /// The base class for the visitor type hierarchy used for traversing
20 /// a hierarchy of nodes.
21 ///
22 /// Client code willing to get notified for a certain kind of node
23 /// during traversal might want to define a visitor class that inherit
24 /// \a node_visitor, define and overload a node_visitor::visit method
25 /// for it, like what is done for the ir_node_visitor::visit set of
26 /// functions, for traversing internal representation nodes.
28 {};
29 
30 /// The interface for types which are feeling social and want to be
31 /// visited during the traversal of a hierarchy of nodes.
32 ///
33 /// It is expected that classes derived from traversable_base define a
34 /// traverse method specialised to the node *visitor* type. Such
35 /// methods should visit nodes recursively, calling
36 /// ir_node_visitor::visit for each node. The method should return
37 /// true until all nodes have been visited.
39 {
40  struct priv;
41  std::unique_ptr<priv> priv_;
42 
43 protected:
44 
46 
47  bool visiting() const;
48 
49  void visiting(bool f);
50 
51 public:
52 
53  virtual ~traversable_base();
54 
55  /// This virtual method is overloaded and implemented by any single
56  /// type which instance is going to be visited during the traversal
57  /// of translation unit nodes.
58  ///
59  /// The method visits a given node and, for scopes, visits their
60  /// member nodes. Visiting a node means calling the
61  /// ir_node_visitor::visit method with the node passed as an
62  /// argument.
63  ///
64  /// @param v the visitor used during the traverse.
65  ///
66  /// @return true if traversed until the end of the type tree, false
67  /// otherwise.
68  ///
69  /// Note that each class that derives from this one and overloads
70  /// this method will have to define a type for its node visitor
71  /// argument (the one named v). That type will have to derive from
72  /// the node_visitor_base type. In that sense, this new overload
73  /// method will "hide" this one. That is why we are keeping this
74  /// method commented, for documentation purposes.
75 
76  // virtual bool traverse(node_visitor_base& v);
77 }; // end class traversable_base
78 
79 }// end namespace ir.
80 }//end namespace abigail
81 #endif //__ABG_TRAVERSE_H__
The interface for types which are feeling social and want to be visited during the traversal of a hie...
Definition: abg-traverse.h:39
virtual ~traversable_base()
Destructor of the traversable_base type.
Definition: abg-traverse.cc:39
bool visiting() const
This should returns false before and after the node has been visiting. During the visiting of the nod...
Definition: abg-traverse.cc:48
traversable_base()
Default constructor of the traversable_base type.
Definition: abg-traverse.cc:34
Toplevel namespace for libabigail.
The base class for the visitor type hierarchy used for traversing a hierarchy of nodes.
Definition: abg-traverse.h:28