aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Timers/src/CactusTimerSet.hh
blob: c53fa5bc355f7a5a353381830f545bf59c9c8620 (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef CACTUSTIMERSET_HH
#define CACTUSTIMERSET_HH

#include <iostream>
#include <set>

#include <cctk.h>
#include "CactusTimer.hh"



namespace Timers {
  
  class CactusTimerSet;
  extern CactusTimerSet timerSet;
  
  using namespace std;
  
  // A set of timers
  class CactusTimerSet {
    
    typedef set<CactusTimer*> timers_t;
    timers_t timers;
    
  public:
    
    // Add a timer
    void add(CactusTimer* timer);
    
    // Remove a timer
    void remove(CactusTimer* timer);

    // Print all timer names
    void printNames() const;
    
    // Print all timer data
    void printData();
    
    // Write all timer data of the global timer set to a file
    static void writeData(cGH const* cctkGH, char const* filename);
    
#if 0
    // Reduce each timer in the set across all processes and update
    // each timer with the reduction information.
    void reduce();
    
    ostream& serialise(ostream &os);
#endif
    
  private:
    
    // If filename is not empty, then redirect stdout to a file,
    // returning the old stdout file descriptor
    static int redirect(cGH const* cctkGH, char const* filename);
    
    // Redirect stdout back
    static void unredirect(int oldfd);
  }; // class CactusTimerSet
  
} // namespace Timers

#endif // CACTUSTIMERSET_HH