source: src/Common/Stats/Base.h@ 675716e

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr persistent-indexer pthread-emulation qualifiedEnum stuck-waitfor-destruct
Last change on this file since 675716e was 675716e, checked in by tdelisle <tdelisle@…>, 7 years ago

Instrumented PassVisitor to print average/max depth

  • Property mode set to 100644
File size: 1.6 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// Heap.h --
8//
9// Author : Thierry Delisle
10// Created On : Fri Mar 03 14:53:53 2019
11// Last Modified By :
12// Last Modified On :
13// Update Count :
14//
15
16#pragma once
17
18#include <string>
19
20namespace Stats {
21 namespace Base {
22 class TreeImpl {
23 public:
24 struct Top {
25 TreeImpl * head = nullptr;
26 TreeImpl * tail = nullptr;
27
28 void append(TreeImpl * node) {
29 if(!head) { head = node; }
30 else { tail->next = node;}
31 tail = node;
32 }
33 };
34
35 virtual void print(std::ostream &) = 0;
36
37 const std::string name;
38 TreeImpl(const std::string & name) : name(name) {}
39
40 protected:
41 virtual ~TreeImpl() = default;
42
43 TreeImpl * next = nullptr;
44 Top children;
45
46 template<typename func_t>
47 friend void ForAll(TreeImpl::Top & range, size_t level, func_t func, bool destroy = false);
48 };
49
50 template<typename func_t>
51 inline void ForAll(TreeImpl::Top & range, size_t level, func_t func, bool destroy) {
52 auto it = range.head;
53 while(it) {
54 auto next = it->next;
55 func(it, level);
56 ForAll(it->children, level + 1, func);
57 if(destroy) delete it;
58 it = next;
59 }
60 }
61
62 template<TreeImpl::Top & top>
63 class Tree : public TreeImpl {
64 public:
65 Tree(const std::string & name) : TreeImpl{name} {
66 top.append(this);
67 }
68
69 Tree(const std::string & name, Tree * parent) : TreeImpl{name} {
70 parent->children.append(this);
71 }
72 protected:
73 virtual ~Tree() = default;
74 };
75 }
76}
Note: See TracBrowser for help on using the repository browser.