#ifndef _OTB_TRISKELE_TREE_STATS_HPP #define _OTB_TRISKELE_TREE_STATS_HPP #include #include #include #include #include #include #include #include #include "ArrayTree/triskeleArrayTreeBase.hpp" namespace otb { namespace triskele { using namespace otb::triskele::arrayTree; using namespace std; namespace ba = boost::accumulators; typedef ba::accumulator_set > TreeStatsDim; typedef ba::accumulator_set > TreeStatsDouble; enum TimeType { buildTreeStats, buildSetupStats, buildToTilesStats, buildEdgesStats, buildParentsStats, buildFromTilesStats, buildMergeStats, buildIndexStats, buildCompressStats, buildChildrenStats, setAPStats, areaStats, averageStats, xyStats, moiStats, sdStats, filteringStats, copyImageStats, readStats, writeStats, allStats, TimeTypeCard }; class TreeStats { public : void reset (); inline void addDim (const TreeType &treeType, const DimImg& leafCount, const DimImg& compCount); inline void addTime (const TimeType &timeType, const double &duration); inline const TreeStatsDouble &getTimeStats (const TimeType &timeType); // nice ostream struct CPrintDim { const TreeStats &treeStats; CPrintDim (const TreeStats &treeStats); ostream &print (ostream &out) const; ostream &print (ostream &out, const TreeStatsDim stats[], const string &msg) const; }; CPrintDim printDim () const; friend ostream &operator << (ostream& out, const CPrintDim &cpd) { return cpd.print (out); } struct CPrintTime { const TreeStats &treeStats; CPrintTime (const TreeStats &treeStats); ostream &print (ostream &out) const; }; CPrintTime printTime () const; friend ostream &operator << (ostream& out, const CPrintTime &cpt) { return cpt.print (out); } private : TreeStatsDim leavesStats[TreeTypeCard], compStats[TreeTypeCard]; TreeStatsDouble timeStats[TimeTypeCard]; }; static TreeStats globalTreeStats; #include "TreeStats.tpp" } // triskele } // otb #endif // _OTB_TRISKELE_TREE_HPP