5
* Created by tyson on 21/04/11.
11
#include <commonoptions.h>
14
// ------------------------------------------------------------------
16
void RunStats::set_int( std::string name, int64_t value )
18
int_stats[name] = value;
21
void RunStats::add_to_int( std::string name, int64_t increment )
24
bool exists = get_int( name, value );
30
set_int( name, value );
33
int64_t RunStats::get_int( std::string name )
35
std::map<std::string, int64_t>::iterator iter = int_stats.find( name );
36
if ( iter == int_stats.end() ) { return ~0; }
40
bool RunStats::get_int( std::string name, int64_t& value )
42
std::map<std::string, int64_t>::iterator iter = int_stats.find( name );
43
if ( iter == int_stats.end() )
51
void RunStats::update_min_int( std::string name, int64_t value )
54
bool exists = get_int( name, current_min );
55
if ( !exists ) { current_min = value; }
56
int_stats[name] = std::min( value, current_min );
59
void RunStats::update_max_int( std::string name, int64_t value )
62
bool exists = get_int( name, current_max );
63
if ( !exists ) { current_max = value; }
64
int_stats[name] = std::max( value, current_max );
67
// ------------------------------------------------------------------
69
void RunStats::set_double( std::string name, double value )
71
double_stats[name] = value;
74
void RunStats::add_to_double( std::string name, double increment )
77
bool exists = get_double( name, value );
83
set_double( name, value );
86
double RunStats::get_double( std::string name )
88
std::map<std::string, double>::iterator iter = double_stats.find( name );
89
if ( iter == double_stats.end() ) { return UNINITIALIZED_DOUBLE; }
93
bool RunStats::get_double( std::string name, double& value )
95
std::map<std::string, double>::iterator iter = double_stats.find( name );
96
if ( iter == double_stats.end() )
100
value = iter->second;
104
void RunStats::update_min_double( std::string name, double value )
107
bool exists = get_double( name, current_min );
108
if ( !exists ) { current_min = value; }
109
double_stats[name] = std::min( value, current_min );
112
void RunStats::update_max_double( std::string name, double value )
115
bool exists = get_double( name, current_max );
116
if ( !exists ) { current_max = value; }
117
double_stats[name] = std::max( value, current_max );
120
// ------------------------------------------------------------------
122
void RunStats::add_per_frame_int( std::string name, int frame, int64_t value )
124
std::vector<PerFrameInt>& sequence = per_frame_int_stats[name];
125
sequence.push_back( PerFrameInt(frame,value) );
128
bool RunStats::get_per_frame_ints( std::string name, std::vector<PerFrameInt>& sequence )
130
std::map<std::string, std::vector<PerFrameInt> >::iterator iter = per_frame_int_stats.find( name );
131
if ( iter == per_frame_int_stats.end() )
135
sequence = iter->second;
139
// ------------------------------------------------------------------
141
void RunStats::add_per_frame_double( std::string name, int frame, double value )
143
std::vector<PerFrameDouble>& sequence = per_frame_double_stats[name];
144
sequence.push_back( PerFrameDouble(frame,value) );
147
bool RunStats::get_per_frame_doubles( std::string name, std::vector<PerFrameDouble>& sequence )
149
std::map<std::string, std::vector<PerFrameDouble> >::iterator iter = per_frame_double_stats.find( name );
150
if ( iter == per_frame_double_stats.end() )
154
sequence = iter->second;
158
// ------------------------------------------------------------------
160
void RunStats::write_to_file( const char* filename )
162
std::ofstream file( filename );
165
if ( !int_stats.empty() )
167
file << "int_stats: " << std::endl << "----------" << std::endl;
168
std::map<std::string, int64_t>::iterator int_iterator = int_stats.begin();
169
for ( ; int_iterator != int_stats.end(); ++int_iterator )
171
file << int_iterator->first << ": " << int_iterator->second << std::endl;
178
if ( !double_stats.empty() )
180
file << "double_stats: " << std::endl << "----------" << std::endl;
181
std::map<std::string, double>::iterator double_iterator = double_stats.begin();
182
for ( ; double_iterator != double_stats.end(); ++double_iterator )
184
file << double_iterator->first << ": " << double_iterator->second << std::endl;
191
if ( !per_frame_int_stats.empty() )
193
file << "per_frame_int_stats: " << std::endl << "----------" << std::endl;
194
std::map<std::string, std::vector<PerFrameInt> >::iterator pfi_iter = per_frame_int_stats.begin();
195
for ( ; pfi_iter != per_frame_int_stats.end(); ++pfi_iter )
197
file << pfi_iter->first << ": " << std::endl;
198
std::vector<PerFrameInt>& sequence = pfi_iter->second;
199
for ( unsigned int i = 0; i < sequence.size(); ++i )
201
file << sequence[i].first << " " << sequence[i].second << std::endl;
209
if ( !per_frame_double_stats.empty() )
211
file << "per_frame_double_stats: " << std::endl << "----------" << std::endl;
212
std::map<std::string, std::vector<PerFrameDouble> >::iterator pfd_iter = per_frame_double_stats.begin();
213
for ( ; pfd_iter != per_frame_double_stats.end(); ++pfd_iter )
215
file << pfd_iter->first << ": " << std::endl;
216
std::vector<PerFrameDouble>& sequence = pfd_iter->second;
217
for ( unsigned int i = 0; i < sequence.size(); ++i )
219
file << sequence[i].first << " " << sequence[i].second << std::endl;
227
// ------------------------------------------------------------------
229
void RunStats::clear()
232
double_stats.clear();
233
per_frame_int_stats.clear();
234
per_frame_double_stats.clear();