blob: a61a3ff221a4d0635a615ad27a30a6521efe73c5 (
plain) (
blame)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 | //===-- DFSVisitor.h --------------------------------------------*- C++ -*-===//
//
//                     The KLEE Symbolic Virtual Machine
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#pragma once
#include "Tree.h"
#include <functional>
/// @brief Traverses an execution tree and calls registered callbacks for
/// intermediate and leaf nodes (not the classical Visitor pattern).
class DFSVisitor {
  // void _(node ID, node, depth)
  using callbackT = std::function<void(std::uint32_t, Node, std::uint32_t)>;
  const Tree &tree;
  callbackT cb_intermediate;
  callbackT cb_leaf;
  void run() const noexcept;
public:
  DFSVisitor(const Tree &tree, callbackT cb_intermediate,
             callbackT cb_leaf) noexcept;
  ~DFSVisitor() = default;
};
 |