about summary refs log tree commit diff homepage
path: root/tools/klee-exec-tree/DFSVisitor.h
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;
};