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

Extracted out BaseCounter? as a generic key-value tree

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/Stats/Counter.cc

    r79de2210 r8e70823  
    1818#include <algorithm>
    1919#include <cstring>
     20#include <functional>
    2021#include <iomanip>
    2122
    2223namespace Stats {
    2324        namespace Counters {
    24 
    25                 template<typename T>
    26                 void ForAllCounters(BaseCounter::list_t & range, size_t level, T func) {
    27                         auto it = range.head;
    28                         while(it) {
    29                                 auto next = it->next;
    30                                 func(it, level);
    31                                 ForAllCounters(it->children, level + 1, func);
    32                                 it = next;
    33                         }
    34                 }
    35 
    3625                void print() {
    37                         if(!BaseCounter::top.head) return;
     26                        if(!top.head) return;
    3827                        size_t nc = 0;
    39                         ForAllCounters(BaseCounter::top, 0, [&](BaseCounter * node, size_t level) {
    40                                 nc = std::max(nc, (4 * level) + std::strlen(node->name));
     28                        Base::ForAll(top, 0, [&](Base::TreeImpl * node, size_t level) {
     29                                nc = std::max(nc, (4 * level) + node->name.size());
    4130                        });
    4231
    43                         const char * const title = "Counter Statistic";
     32                        const std::string & title = "Counter Statistic";
    4433                        size_t nct = nc + 14;
    4534                        std::cerr << std::string(nct, '=') << std::endl;
    46                         std::cerr << std::string((nct - std::strlen(title)) / 2, ' ');
     35                        std::cerr << std::string((nct - title.size()) / 2, ' ');
    4736                        std::cerr << title << std::endl;
    4837                        std::cerr << std::string(nct, '-') << std::endl;
    4938
    5039
    51                         ForAllCounters(BaseCounter::top, 0, [&](BaseCounter * node, size_t level) {
     40                        Base::ForAll(top, 0, [&](Base::TreeImpl * node, size_t level) {
    5241                                std::cerr << std::string(level * 4, ' ');
    5342                                std::cerr << node->name;
    54                                 std::cerr << std::string(nc - ((level * 4) + std::strlen(node->name)), ' ');
     43                                std::cerr << std::string(nc - ((level * 4) + node->name.size()), ' ');
    5544                                std::cerr << " | ";
    5645                                std::cerr << std::setw(9);
     
    5847                                std::cerr << " |";
    5948                                std::cerr << '\n';
    60                                 delete node;
    61                         });
     49                        }, true);
    6250
    6351                        std::cerr << std::string(nct, '-') << std::endl;
    6452                }
    6553
    66                 BaseCounter::list_t BaseCounter::top;
     54                Base::TreeImpl::Top top;
    6755        }
    6856}
Note: See TracChangeset for help on using the changeset viewer.