#ifdef STATISTICS #include "Behavioural/include/Stat.h" namespace morpheo { namespace behavioural { std::string Stat::print (uint32_t depth) { // log_printf(TRACE,Behavioural,"Stat::print","Component name : %s",_name_component.c_str()); // log_printf(TRACE,Behavioural,"Stat::print","Instance name : %s",_name_instance .c_str()); end_simulation(); cycle_t _cycle_sum = sc_simulation_time(); morpheo::behavioural::XML xml (_name_instance); xml.balise_open_begin(_name_component); xml.attribut("name",_name_instance); xml.balise_open_end(); // Print component for (std::list::iterator stat=_list_stat->begin(); stat != _list_stat->end(); stat ++) { xml.text((*stat)->print(1)); } // Test special case if (have_counter()) { if (_cycle_sum < _nb_cycle_before_begin) { xml.comment(_("Number of cycle is less than the number minimal")); } else { bool stop = false; cycle_t nb_cycle_min; cycle_t nb_cycle_max = _nb_cycle_before_begin-1; for (cycle_t period=0; stop==false; period++) { std::map::iterator operand=_list_operand->begin(); if (operand->second.save_counter.size()==0) throw(ERRORMORPHEO("Stat::generate_file",_("Queue 'save_counter' is empty."))); bool last = operand->second.save_counter.size()==1; nb_cycle_min = nb_cycle_max+1; if (last) nb_cycle_max = static_cast(_cycle_sum); else nb_cycle_max += _period; xml.balise_open_begin("period"); xml.attribut("number",toString(period)); xml.attribut("nb_cycle_min",toString(nb_cycle_min)); xml.attribut("nb_cycle_max",toString(nb_cycle_max)); xml.balise_open_end(); for (; operand!= _list_operand->end(); ++operand) { if (operand->second.type == TYPE_COUNTER) { xml.singleton_begin(operand->second.name); xml.attribut("value",toString(operand->second.save_counter.front())); xml.attribut("unit",operand->second.unit); xml.attribut("description",operand->second.description); xml.singleton_end(); } operand->second.save_counter.pop_front(); } xml.balise_close(); stop = last; } } } xml.balise_close(); return xml.get_body(depth); } }; }; #endif