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;
}
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;
}
{
xbt_assert(trace_list.find(name) == trace_list.end(), "Refusing to define trace %s twice", name.c_str());
trace_list.insert({name,this});
- cb(event_list);
+ get_enough_events(0);
}
} // namespace profile
std::vector<DatedValue> 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
Profile* ProfileBuilder::from_void() {
- static Profile void_profile("__void__",[](std::vector<DatedValue>&){},-1.0);
+ static Profile void_profile("__void__", nullptr, -1.0);
return &void_profile;
}