From: Arnaud Giersch Date: Fri, 25 Mar 2022 08:36:50 +0000 (+0100) Subject: Make it possible to have an empty profile callback. X-Git-Tag: v3.32~394 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/fbd3494dc9a7b377cccbc749586313d0f75c15cd?ds=sidebyside Make it possible to have an empty profile callback. --- diff --git a/src/kernel/resource/profile/Profile.cpp b/src/kernel/resource/profile/Profile.cpp index 0f17aa7dd1..a00d6bc40f 100644 --- a/src/kernel/resource/profile/Profile.cpp +++ b/src/kernel/resource/profile/Profile.cpp @@ -38,14 +38,11 @@ Event* Profile::schedule(FutureEvtSet* fes, resource::Resource* resource) fes_ = fes; - if(event_list.empty()) - cb(event_list); - - if(event_list.empty()) { + if (get_enough_events(0)) { + fes_->add_event(event_list[0].date_, event); + } else { event->free_me = true; tmgr_trace_event_unref(&event); - } else { - fes_->add_event(event_list[0].date_, event); } return event; } @@ -59,15 +56,13 @@ DatedValue Profile::next(Event* event) event->idx++; - if (event->idx == event_list.size()) - cb(event_list); - if(event->idx>=event_list.size()) - event->free_me = true; - else { - const DatedValue& nextDateVal = event_list.at(event->idx); + if (get_enough_events(event->idx)) { + const DatedValue& nextDateVal = event_list[event->idx]; xbt_assert(nextDateVal.date_>=0); xbt_assert(nextDateVal.value_>=0); fes_->add_event(event_date +nextDateVal.date_, event); + } else { + event->free_me = true; } return dateVal; } @@ -77,7 +72,7 @@ Profile::Profile(const std::string& name, const std::function event_list; FutureEvtSet* fes_ = nullptr; double repeat_delay; + + bool get_enough_events(size_t index) + { + if (index >= event_list.size() && cb) + cb(event_list); + return index < event_list.size(); + } }; } // namespace profile diff --git a/src/kernel/resource/profile/ProfileBuilder.cpp b/src/kernel/resource/profile/ProfileBuilder.cpp index ba7a2259f4..d7ba428fb9 100644 --- a/src/kernel/resource/profile/ProfileBuilder.cpp +++ b/src/kernel/resource/profile/ProfileBuilder.cpp @@ -237,7 +237,7 @@ Profile* ProfileBuilder::from_file(const std::string& path) Profile* ProfileBuilder::from_void() { - static Profile void_profile("__void__",[](std::vector&){},-1.0); + static Profile void_profile("__void__", nullptr, -1.0); return &void_profile; }