+/* Copyright (c) 2013-2014. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
#include "network_constant.hpp"
#include "surf/random_mgr.h"
sg_platf_host_add_cb(netcste_count_hosts);
- ModelPtr model = static_cast<ModelPtr>(surf_network_model);
+ ModelPtr model = surf_network_model;
xbt_dynar_push(model_list, &model);
}
for(ActionList::iterator it(actionSet->begin()), itend(actionSet->end())
; it != itend ; ++it) {
action = static_cast<NetworkConstantActionPtr>(&*it);
- if (action->m_latency > 0) {
- if (min < 0)
- min = action->m_latency;
- else if (action->m_latency < min)
- min = action->m_latency;
- }
+ if (action->m_latency > 0 && (min < 0 || action->m_latency < min))
+ min = action->m_latency;
}
return min;
action = static_cast<NetworkConstantActionPtr>(&*it);
if (action->m_latency > 0) {
if (action->m_latency > delta) {
- double_update(&(action->m_latency), delta);
+ double_update(&(action->m_latency), delta, sg_surf_precision);
} else {
action->m_latency = 0.0;
}
if (action->getMaxDuration() != NO_MAX_DURATION)
action->updateMaxDuration(delta);
- if (action->getRemains() <= 0) {
+ if (action->getRemainsNoUpdate() <= 0) {
action->finish();
action->setState(SURF_ACTION_DONE);
} else if ((action->getMaxDuration() != NO_MAX_DURATION)
ActionPtr NetworkConstantModel::communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
double size, double rate)
{
- char *src_name = src->p_name;
- char *dst_name = dst->p_name;
+ char *src_name = src->getName();
+ char *dst_name = dst->getName();
XBT_IN("(%s,%s,%g,%g)", src_name, dst_name, size, rate);
NetworkConstantActionPtr action = new NetworkConstantAction(this, size, sg_latency_factor);
XBT_OUT();
+ surf_callback_emit(networkCommunicateCallbacks, action, src, dst, size, rate);
return action;
}