Ignore:
Timestamp:
Mar 4, 2019, 2:53:55 PM (5 years ago)
Author:
tdelisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
874ffa4
Parents:
675716e
Message:

Added better support for enabling/disabling/compiling-out statistics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/Stats/Base.h

    r675716e r1cb7fab2  
    1616#pragma once
    1717
    18 #include <string>
    19 
    2018namespace Stats {
    2119        namespace Base {
     20                class TreeImpl;
     21
     22                struct TreeTop {
     23                        TreeImpl * head = nullptr;
     24                        TreeImpl * tail = nullptr;
     25
     26                        inline void append(TreeImpl * node);
     27                };
     28
     29                template<typename func_t>
     30                void ForAll(TreeTop & range, size_t level, func_t func, bool destroy = false);
     31
    2232                class TreeImpl {
    2333                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 
    3534                        virtual void print(std::ostream &) = 0;
    3635
    37                         const std::string name;
    38                         TreeImpl(const std::string & name) : name(name) {}
     36                        const char * const name;
     37                        TreeImpl(const char * const name) : name(name) {}
    3938
    4039                protected:
     
    4241
    4342                        TreeImpl * next = nullptr;
    44                         Top children;
     43                        TreeTop children;
     44
     45                        friend struct TreeTop;
    4546
    4647                        template<typename func_t>
    47                         friend void ForAll(TreeImpl::Top & range, size_t level, func_t func, bool destroy = false);
     48                        friend void ForAll(TreeTop & range, size_t level, func_t func, bool destroy);
    4849                };
    4950
     51                void TreeTop::append(TreeImpl * node) {
     52                        if(!head) { head = node; }
     53                        else      { tail->next = node;}
     54                        tail = node;
     55                }
     56
    5057                template<typename func_t>
    51                 inline void ForAll(TreeImpl::Top & range, size_t level, func_t func, bool destroy) {
     58                inline void ForAll(TreeTop & range, size_t level, func_t func, bool destroy) {
    5259                        auto it = range.head;
    5360                        while(it) {
     
    6067                }
    6168
    62                 template<TreeImpl::Top & top>
     69                template<TreeTop & top>
    6370                class Tree : public TreeImpl {
    6471                public:
    65                         Tree(const std::string & name) : TreeImpl{name} {
     72                        Tree(const char * const name) : TreeImpl{name} {
    6673                                top.append(this);
    6774                        }
    6875
    69                         Tree(const std::string & name, Tree * parent) : TreeImpl{name} {
     76                        Tree(const char * const name, Tree * parent) : TreeImpl{name} {
    7077                                parent->children.append(this);
    7178                        }
Note: See TracChangeset for help on using the changeset viewer.