/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__RUNTIME_STATPHASEMGR_H #define POLYGRAPH__RUNTIME_STATPHASEMGR_H #include "xstd/Array.h" #include "runtime/StatIntvl.h" class StatPhase; // iterates through stat phases // flushes all sats and terminates program when the last phase is over class StatPhaseMgr { public: StatPhaseMgr(); ~StatPhaseMgr(); void addPhase(StatPhase *ph); void start(); StatPhase *operator ->() { return thePhase; } StatPhase *operator *() { return thePhase; } int phaseSyncPos() const; void forceFlush(); void noteDone(StatPhase *ph); void reportCfg(ostream &os) const; protected: void nextPhase(); protected: Array thePhases; // all phases are stored here StatPhase *thePhase; // current phase, thePhases[thePhaseIdx] int thePhaseIdx; }; extern StatPhaseMgr TheStatPhaseMgr; #endif