Simplify the implementation of statistics::calculate_stats().

This commit is contained in:
J. Tyne 2012-09-08 16:17:27 +00:00
parent 7a984b0a98
commit 887b552b1b
3 changed files with 13 additions and 18 deletions

View file

@ -565,25 +565,20 @@ void reset_turn_stats(const std::string & save_id)
s.save_id = save_id;
}
stats calculate_stats(int category, const std::string & save_id)
stats calculate_stats(const std::string & save_id)
{
DBG_NG << "calculate_stats, category: " << category << " side: " << save_id << " master_stats.size: " << master_stats.size() << "\n";
if(category == 0) {
stats res;
// We are going from last to first to include correct turn stats in result
for(int i = int(master_stats.size()); i > 0 ; --i) {
merge_stats(res,calculate_stats(i,save_id));
}
stats res;
return res;
} else {
const size_t index = master_stats.size() - size_t(category);
if(index < master_stats.size() && master_stats[index].team_stats.find(save_id) != master_stats[index].team_stats.end()) {
return master_stats[index].team_stats[save_id];
} else {
return stats();
}
DBG_NG << "calculate_stats, side: " << save_id << " master_stats.size: " << master_stats.size() << "\n";
// The order of this loop matters since the turn stats are taken from the
// last stats merged.
for ( size_t i = 0; i != master_stats.size(); ++i ) {
team_stats_t::const_iterator find_it = master_stats[i].team_stats.find(save_id);
if ( find_it != master_stats[i].team_stats.end() )
merge_stats(res, find_it->second);
}
return res;
}
config write_stats()

View file

@ -110,7 +110,7 @@ namespace statistics
void clear_current_scenario();
void reset_turn_stats(const std::string & save_id);
stats calculate_stats(int category, const std::string & save_id);
stats calculate_stats(const std::string & save_id);
} // end namespace statistics
#endif

View file

@ -144,7 +144,7 @@ statistics_dialog::statistics_dialog(game_display &disp,
add_button(new gui::standard_dialog_button(disp.video(), _("Close"), 1, true),
gui::dialog::BUTTON_STANDARD);
stats_ = statistics::calculate_stats(0, team_id);
stats_ = statistics::calculate_stats(team_id);
int n, cost;
std::vector<std::string> items;
// Prepare the menu items