cprover
Loading...
Searching...
No Matches
depth_iteratort Class Referencefinal

#include <expr_iterator.h>

Inheritance diagram for depth_iteratort:
Collaboration diagram for depth_iteratort:

Public Member Functions

 depth_iteratort ()=default
 Create an end iterator.
 depth_iteratort (exprt &expr)
 Create iterator starting at the supplied node (root) All mutations of the child nodes will be reflected on this node.
 depth_iteratort (const exprt &expr, std::function< exprt &()> mutate_root)
 Create iterator starting at the supplied node (root) If mutations of the child nodes are required then the passed mutate_root function will be called to get a non-const copy of the same root on which the mutations will be done.
exprtmutate ()
 Obtain non-const reference to the exprt instance currently pointed to by the iterator.
Public Member Functions inherited from depth_iterator_baset< depth_iteratort >
bool operator== (const depth_iterator_baset< other_depth_iterator_t > &other) const
bool operator!= (const depth_iterator_baset< other_depth_iterator_t > &other) const
depth_iteratortoperator++ ()
 Preincrement operator Do not call on the end() iterator.
depth_iteratortnext_sibling_or_parent ()
const exprtoperator* () const
 Dereference operator Dereferencing end() iterator is undefined behaviour.
const exprtoperator-> () const
 Dereference operator (member access) Dereferencing end() iterator is undefined behaviour.

Private Attributes

std::function< exprt &()> mutate_root
 If this is non-empty then the root is currently const and this function must be called before any mutations occur.

Additional Inherited Members

Public Types inherited from depth_iterator_baset< depth_iteratort >
typedef void difference_type
typedef exprt value_type
typedef const exprtpointer
typedef const exprtreference
typedef std::forward_iterator_tag iterator_category
Protected Member Functions inherited from depth_iterator_baset< depth_iteratort >
 ~depth_iterator_baset ()=default
 Destructor Protected to discourage upcasting.
depth_iterator_basetoperator= (const depth_iterator_baset &)=default
const exprtget_root ()
exprtmutate ()
 Obtain non-const exprt reference.
bool push_expr (const exprt &expr)
 Pushes expression onto the stack If overridden, this function should be called from the inheriting class by the override function.

Detailed Description

Definition at line 228 of file expr_iterator.h.

Constructor & Destructor Documentation

◆ depth_iteratort() [1/3]

depth_iteratort::depth_iteratort ( )
default

Create an end iterator.

◆ depth_iteratort() [2/3]

depth_iteratort::depth_iteratort ( exprt & expr)
inlineexplicit

Create iterator starting at the supplied node (root) All mutations of the child nodes will be reflected on this node.

Parameters
exprThe root node to begin iteration at

Definition at line 243 of file expr_iterator.h.

◆ depth_iteratort() [3/3]

depth_iteratort::depth_iteratort ( const exprt & expr,
std::function< exprt &()> mutate_root )
inlineexplicit

Create iterator starting at the supplied node (root) If mutations of the child nodes are required then the passed mutate_root function will be called to get a non-const copy of the same root on which the mutations will be done.

Parameters
exprThe root node to begin iteration at
mutate_rootThe function to call to get a non-const copy of the same root expression passed in the expr parameter

Definition at line 254 of file expr_iterator.h.

Member Function Documentation

◆ mutate()

exprt & depth_iteratort::mutate ( )
inline

Obtain non-const reference to the exprt instance currently pointed to by the iterator.

If the iterator is currently using a const root exprt then calls mutate_root to get a non-const root and copies it if it is shared

Returns
A non-const reference to the element this iterator is currently pointing to

Definition at line 270 of file expr_iterator.h.

Member Data Documentation

◆ mutate_root

std::function<exprt &()> depth_iteratort::mutate_root
private

If this is non-empty then the root is currently const and this function must be called before any mutations occur.

Definition at line 234 of file expr_iterator.h.


The documentation for this class was generated from the following file: