void Action::update_max_duration(double delta)
{
- double_update(&max_duration_, delta, sg_surf_precision);
+ if (max_duration_ != NO_MAX_DURATION)
+ double_update(&max_duration_, delta, sg_surf_precision);
}
void Action::update_remains(double delta)
{
++it; // increment iterator here since the following calls to action.finish() may invalidate it
action.update_remains(action.get_variable()->get_value() * delta);
-
- if (action.get_max_duration() != NO_MAX_DURATION)
- action.update_max_duration(delta);
+ action.update_max_duration(delta);
if (((action.get_remains_no_update() <= 0) && (action.get_variable()->get_weight() > 0)) ||
((action.get_max_duration() != NO_MAX_DURATION) && (action.get_max_duration() <= 0))) {
return;
double delta = now - get_last_update();
- double max_duration = get_max_duration();
if (get_remains_no_update() > 0) {
XBT_DEBUG("Updating action(%p): remains was %f, last_update was: %f", this, get_remains_no_update(),
XBT_DEBUG("Updating action(%p): remains is now %f", this, get_remains_no_update());
}
- if (max_duration > NO_MAX_DURATION) {
- double_update(&max_duration, delta, sg_surf_precision);
- set_max_duration(max_duration);
- }
+ update_max_duration(delta);
if ((get_remains_no_update() <= 0 && (get_variable()->get_weight() > 0)) ||
- ((max_duration > NO_MAX_DURATION) && (max_duration <= 0))) {
+ ((get_max_duration() != NO_MAX_DURATION) && (get_max_duration() <= 0))) {
finish(Action::State::FINISHED);
get_model()->get_action_heap().remove(this);
}
}
}
action.update_remains(action.get_cost() * delta / action.initial_latency_);
- if (action.get_max_duration() != NO_MAX_DURATION)
- action.update_max_duration(delta);
+ action.update_max_duration(delta);
if ((action.get_remains_no_update() <= 0) ||
((action.get_max_duration() != NO_MAX_DURATION) && (action.get_max_duration() <= 0))) {
XBT_DEBUG("Action (%p) : remains (%g) updated by %g.", &action, action.get_remains(),
action.get_variable()->get_value() * delta);
action.update_remains(action.get_variable()->get_value() * delta);
-
- if (action.get_max_duration() > NO_MAX_DURATION)
- action.update_max_duration(delta);
+ action.update_max_duration(delta);
XBT_DEBUG("Action (%p) : remains (%g).", &action, action.get_remains());
StorageAction& action = static_cast<StorageAction&>(*it);
++it; // increment iterator here since the following calls to action.finish() may invalidate it
action.update_remains(lrint(action.get_variable()->get_value() * delta));
-
- if (action.get_max_duration() > NO_MAX_DURATION)
- action.update_max_duration(delta);
+ action.update_max_duration(delta);
if (((action.get_remains_no_update() <= 0) && (action.get_variable()->get_weight() > 0)) ||
((action.get_max_duration() > NO_MAX_DURATION) && (action.get_max_duration() <= 0))) {