From fbd3494dc9a7b377cccbc749586313d0f75c15cd Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 25 Mar 2022 09:36:50 +0100 Subject: [PATCH] Make it possible to have an empty profile callback. --- src/kernel/resource/profile/Profile.cpp | 21 +++++++------------ src/kernel/resource/profile/Profile.hpp | 7 +++++++ .../resource/profile/ProfileBuilder.cpp | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) 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; } -- 2.20.1