#ifndef SURF_MODEL_CPUTI_H_
#define SURF_MODEL_CPUTI_H_
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_ti, surf_cpu,
- "Logging specific to the SURF CPU TRACE INTEGRATION module");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_ti, surf_cpu, "Logging specific to the SURF CPU TRACE INTEGRATION module");
namespace simgrid {
namespace surf {
-
+
static inline
void cpu_ti_action_update_index_heap(void *action, int i)
{
- ((simgrid::surf::CpuTiAction*)action)->updateIndexHeap(i);
+ (static_cast<simgrid::surf::CpuTiAction*>(action))->updateIndexHeap(i);
}
/*********
CpuTiTrace::CpuTiTrace(tmgr_trace_t speedTrace)
{
- s_tmgr_event_t val;
- unsigned int cpt;
double integral = 0;
double time = 0;
int i = 0;
- timePoints_ = (double*) xbt_malloc0(sizeof(double) *
- (xbt_dynar_length(speedTrace->event_list) + 1));
- integral_ = (double*) xbt_malloc0(sizeof(double) *
- (xbt_dynar_length(speedTrace->event_list) + 1));
- nbPoints_ = xbt_dynar_length(speedTrace->event_list) + 1;
- xbt_dynar_foreach(speedTrace->event_list, cpt, val) {
+ nbPoints_ = speedTrace->event_list.size() + 1;
+ timePoints_ = new double[nbPoints_];
+ integral_ = new double[nbPoints_];
+ for (auto val : speedTrace->event_list) {
timePoints_[i] = time;
integral_[i] = integral;
- integral += val.delta * val.value;
- time += val.delta;
+ integral += val.date_ * val.value_;
+ time += val.date_;
i++;
}
timePoints_[i] = time;
CpuTiTrace::~CpuTiTrace()
{
- xbt_free(timePoints_);
- xbt_free(integral_);
+ delete [] timePoints_;
+ delete [] integral_;
}
CpuTiTgmr::~CpuTiTgmr()
*/
double CpuTiTgmr::integrate(double a, double b)
{
- double first_chunk;
- double middle_chunk;
- double last_chunk;
- int a_index, b_index;
+ int a_index;
if ((a < 0.0) || (a > b)) {
- XBT_CRITICAL
- ("Error, invalid integration interval [%.2f,%.2f]. You probably have a task executing with negative computation amount. Check your code.",
- a, b);
- xbt_abort();
+ xbt_die("Error, invalid integration interval [%.2f,%.2f]. "
+ "You probably have a task executing with negative computation amount. Check your code.", a, b);
}
- if (a == b)
+ if (fabs(a -b) < EPSILON)
return 0.0;
if (type_ == TRACE_FIXED) {
return ((b - a) * value_);
}
- if (ceil(a / lastTime_) == a / lastTime_)
- a_index = 1 + (int) (ceil(a / lastTime_));
+ if (fabs(ceil(a / lastTime_) - a / lastTime_) < EPSILON)
+ a_index = 1 + static_cast<int>(ceil(a / lastTime_));
else
- a_index = (int) (ceil(a / lastTime_));
+ a_index = static_cast<int> (ceil(a / lastTime_));
- b_index = (int) (floor(b / lastTime_));
+ int b_index = static_cast<int> (floor(b / lastTime_));
if (a_index > b_index) { /* Same chunk */
- return trace_->integrateSimple(a - (a_index -
- 1) * lastTime_,
- b -
- (b_index) *
- lastTime_);
+ return trace_->integrateSimple(a - (a_index - 1) * lastTime_, b - (b_index) * lastTime_);
}
- first_chunk = trace_->integrateSimple(a - (a_index -
- 1) *
- lastTime_,
- lastTime_);
- middle_chunk = (b_index - a_index) * total_;
- last_chunk = trace_->integrateSimple(0.0,
- b -
- (b_index) *
- lastTime_);
+ double first_chunk = trace_->integrateSimple(a - (a_index - 1) * lastTime_, lastTime_);
+ double middle_chunk = (b_index - a_index) * total_;
+ double last_chunk = trace_->integrateSimple(0.0, b - (b_index) * lastTime_);
- XBT_DEBUG("first_chunk=%.2f middle_chunk=%.2f last_chunk=%.2f\n",
- first_chunk, middle_chunk, last_chunk);
+ XBT_DEBUG("first_chunk=%.2f middle_chunk=%.2f last_chunk=%.2f\n", first_chunk, middle_chunk, last_chunk);
return (first_chunk + middle_chunk + last_chunk);
}
double CpuTiTrace::integrateSimplePoint(double a)
{
double integral = 0;
- int ind;
double a_aux = a;
- ind = binarySearch(timePoints_, a, 0, nbPoints_ - 1);
+ int ind = binarySearch(timePoints_, a, 0, nbPoints_ - 1);
integral += integral_[ind];
+
XBT_DEBUG("a %f ind %d integral %f ind + 1 %f ind %f time +1 %f time %f",
- a, ind, integral, integral_[ind + 1], integral_[ind],
- timePoints_[ind + 1], timePoints_[ind]);
+ a, ind, integral, integral_[ind + 1], integral_[ind], timePoints_[ind + 1], timePoints_[ind]);
double_update(&a_aux, timePoints_[ind], sg_maxmin_precision*sg_surf_precision);
if (a_aux > 0)
- integral +=((integral_[ind + 1] -
- integral_[ind]) / (timePoints_[ind + 1] - timePoints_[ind])) * (a - timePoints_[ind]);
+ integral += ((integral_[ind + 1] - integral_[ind]) / (timePoints_[ind + 1] - timePoints_[ind])) *
+ (a - timePoints_[ind]);
XBT_DEBUG("Integral a %f = %f", a, integral);
return integral;
*/
double CpuTiTgmr::solve(double a, double amount)
{
- int quotient;
- double reduced_b;
- double reduced_amount;
- double reduced_a;
- double b;
-
-/* Fix very small negative numbers */
+ /* Fix very small negative numbers */
if ((a < 0.0) && (a > -EPSILON)) {
a = 0.0;
}
amount = 0.0;
}
-/* Sanity checks */
+ /* Sanity checks */
if ((a < 0.0) || (amount < 0.0)) {
- XBT_CRITICAL
- ("Error, invalid parameters [a = %.2f, amount = %.2f]. You probably have a task executing with negative computation amount. Check your code.",
- a, amount);
+ XBT_CRITICAL ("Error, invalid parameters [a = %.2f, amount = %.2f]. "
+ "You probably have a task executing with negative computation amount. Check your code.", a, amount);
xbt_abort();
}
-/* At this point, a and amount are positive */
-
+ /* At this point, a and amount are positive */
if (amount < EPSILON)
return a;
-/* Is the trace fixed ? */
+ /* Is the trace fixed ? */
if (type_ == TRACE_FIXED) {
return (a + (amount / value_));
}
XBT_DEBUG("amount %f total %f", amount, total_);
-/* Reduce the problem to one where amount <= trace_total */
- quotient = (int) (floor(amount / total_));
- reduced_amount = (total_) * ((amount / total_) -
- floor(amount / total_));
- reduced_a = a - (lastTime_) * (int) (floor(a / lastTime_));
-
- XBT_DEBUG("Quotient: %d reduced_amount: %f reduced_a: %f", quotient,
- reduced_amount, reduced_a);
-
-/* Now solve for new_amount which is <= trace_total */
-/*
- fprintf(stderr,"reduced_a = %.2f\n",reduced_a);
- fprintf(stderr,"reduced_amount = %.2f\n",reduced_amount);
- */
- reduced_b = solveSomewhatSimple(reduced_a, reduced_amount);
+ /* Reduce the problem to one where amount <= trace_total */
+ int quotient = static_cast<int>(floor(amount / total_));
+ double reduced_amount = (total_) * ((amount / total_) - floor(amount / total_));
+ double reduced_a = a - (lastTime_) * static_cast<int>(floor(a / lastTime_));
+
+ XBT_DEBUG("Quotient: %d reduced_amount: %f reduced_a: %f", quotient, reduced_amount, reduced_a);
+
+ /* Now solve for new_amount which is <= trace_total */
+ double reduced_b = solveSomewhatSimple(reduced_a, reduced_amount);
/* Re-map to the original b and amount */
- b = (lastTime_) * (int) (floor(a / lastTime_)) +
- (quotient * lastTime_) + reduced_b;
+ double b = (lastTime_) * static_cast<int>(floor(a / lastTime_)) + (quotient * lastTime_) + reduced_b;
return b;
}
*/
double CpuTiTgmr::solveSomewhatSimple(double a, double amount)
{
- double amount_till_end;
double b;
XBT_DEBUG("Solve integral: [%.2f, amount=%.2f]", a, amount);
- amount_till_end = integrate(a, lastTime_);
-/*
- fprintf(stderr,"amount_till_end=%.2f\n",amount_till_end);
- */
+ double amount_till_end = integrate(a, lastTime_);
if (amount_till_end > amount) {
b = trace_->solveSimple(a, amount);
*/
double CpuTiTrace::solveSimple(double a, double amount)
{
- double integral_a;
- int ind;
- double time;
- integral_a = integrateSimplePoint(a);
- ind = binarySearch(integral_, integral_a + amount, 0, nbPoints_ - 1);
- time = timePoints_[ind];
- time +=
- (integral_a + amount -
- integral_[ind]) / ((integral_[ind + 1] -
- integral_[ind]) /
- (timePoints_[ind + 1] -
- timePoints_[ind]));
+ double integral_a = integrateSimplePoint(a);
+ int ind = binarySearch(integral_, integral_a + amount, 0, nbPoints_ - 1);
+ double time = timePoints_[ind];
+ time += (integral_a + amount - integral_[ind]) /
+ ((integral_[ind + 1] - integral_[ind]) / (timePoints_[ind + 1] - timePoints_[ind]));
return time;
}
*/
double CpuTiTgmr::getPowerScale(double a)
{
- double reduced_a;
- int point;
- s_tmgr_event_t val;
-
- reduced_a = a - floor(a / lastTime_) * lastTime_;
- point = trace_->binarySearch(trace_->timePoints_, reduced_a, 0,
- trace_->nbPoints_ - 1);
- xbt_dynar_get_cpy(speedTrace_->event_list, point, &val);
- return val.value;
+ double reduced_a = a - floor(a / lastTime_) * lastTime_;
+ int point = trace_->binarySearch(trace_->timePoints_, reduced_a, 0, trace_->nbPoints_ - 1);
+ trace_mgr::DatedValue val = speedTrace_->event_list.at(point);
+ return val.value_;
}
/**
* \param value Percentage of CPU speed available (useful to fixed tracing)
* \return Integration trace structure
*/
-CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value)
+CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) :
+ speedTrace_(speedTrace)
{
double total_time = 0.0;
- s_tmgr_event_t val;
- unsigned int cpt;
trace_ = 0;
/* no availability file, fixed trace */
- if (!speedTrace) {
+ if (not speedTrace) {
type_ = TRACE_FIXED;
value_ = value;
XBT_DEBUG("No availability trace. Constant value = %f", value);
}
/* only one point available, fixed trace */
- if (xbt_dynar_length(speedTrace->event_list) == 1) {
- xbt_dynar_get_cpy(speedTrace->event_list, 0, &val);
+ if (speedTrace->event_list.size() == 1) {
+ trace_mgr::DatedValue val = speedTrace->event_list.front();
type_ = TRACE_FIXED;
- value_ = val.value;
+ value_ = val.value_;
return;
}
type_ = TRACE_DYNAMIC;
- speedTrace_ = speedTrace;
/* count the total time of trace file */
- xbt_dynar_foreach(speedTrace->event_list, cpt, val) {
- total_time += val.delta;
- }
+ for (auto val : speedTrace->event_list)
+ total_time += val.date_;
+
trace_ = new CpuTiTrace(speedTrace);
lastTime_ = total_time;
total_ = trace_->integrateSimple(0, total_time);
- XBT_DEBUG("Total integral %f, last_time %f ",
- total_, lastTime_);
+ XBT_DEBUG("Total integral %f, last_time %f ", total_, lastTime_);
}
/**
*/
int CpuTiTrace::binarySearch(double *array, double a, int low, int high)
{
- xbt_assert(low < high, "Wrong parameters: low (%d) should be smaller than"
- " high (%d)", low, high);
+ xbt_assert(low < high, "Wrong parameters: low (%d) should be smaller than high (%d)", low, high);
- int mid;
do {
- mid = low + (high - low) / 2;
- XBT_DEBUG("a %f low %d high %d mid %d value %f", a, low, high, mid,
- array[mid]);
+ int mid = low + (high - low) / 2;
+ XBT_DEBUG("a %f low %d high %d mid %d value %f", a, low, high, mid, array[mid]);
if (array[mid] > a)
high = mid;
void surf_cpu_model_init_ti()
{
- xbt_assert(!surf_cpu_model_pm,"CPU model already initialized. This should not happen.");
- xbt_assert(!surf_cpu_model_vm,"CPU model already initialized. This should not happen.");
+ xbt_assert(not surf_cpu_model_pm, "CPU model already initialized. This should not happen.");
+ xbt_assert(not surf_cpu_model_vm, "CPU model already initialized. This should not happen.");
surf_cpu_model_pm = new simgrid::surf::CpuTiModel();
- xbt_dynar_push(all_existing_models, &surf_cpu_model_pm);
+ all_existing_models->push_back(surf_cpu_model_pm);
surf_cpu_model_vm = new simgrid::surf::CpuTiModel();
- xbt_dynar_push(all_existing_models, &surf_cpu_model_vm);
+ all_existing_models->push_back(surf_cpu_model_vm);
}
namespace simgrid {
modifiedCpu_ = new CpuTiList();
- tiActionHeap_ = xbt_heap_new(8, NULL);
- xbt_heap_set_update_callback(tiActionHeap_,
- cpu_ti_action_update_index_heap);
+ tiActionHeap_ = xbt_heap_new(8, nullptr);
+ xbt_heap_set_update_callback(tiActionHeap_, cpu_ti_action_update_index_heap);
}
CpuTiModel::~CpuTiModel()
{
- surf_cpu_model_pm = NULL;
+ surf_cpu_model_pm = nullptr;
delete runningActionSetThatDoesNotNeedBeingChecked_;
delete modifiedCpu_;
xbt_heap_free(tiActionHeap_);
}
-Cpu *CpuTiModel::createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPerPstate, int core)
+Cpu *CpuTiModel::createCpu(simgrid::s4u::Host *host, std::vector<double>* speedPerPstate, int core)
{
return new CpuTi(this, host, speedPerPstate, core);
}
-double CpuTiModel::next_occuring_event(double now)
+double CpuTiModel::nextOccuringEvent(double now)
{
double min_action_duration = -1;
/* iterates over modified cpus to update share resources */
- for(CpuTiList::iterator it(modifiedCpu_->begin()), itend(modifiedCpu_->end())
- ; it != itend ;) {
+ for(CpuTiList::iterator it(modifiedCpu_->begin()), itend(modifiedCpu_->end()) ; it != itend ;) {
CpuTi *ti = &*it;
++it;
ti->updateActionsFinishTime(now);
void CpuTiModel::updateActionsState(double now, double /*delta*/)
{
- while ((xbt_heap_size(tiActionHeap_) > 0)
- && (xbt_heap_maxkey(tiActionHeap_) <= now)) {
- CpuTiAction *action = (CpuTiAction*) xbt_heap_pop(tiActionHeap_);
+ while ((xbt_heap_size(tiActionHeap_) > 0) && (xbt_heap_maxkey(tiActionHeap_) <= now)) {
+ CpuTiAction *action = static_cast<CpuTiAction*>(xbt_heap_pop(tiActionHeap_));
XBT_DEBUG("Action %p: finish", action);
action->finish();
/* set the remains to 0 due to precision problems when updating the remaining amount */
/************
* Resource *
************/
-CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, xbt_dynar_t speedPerPstate, int core)
+CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, std::vector<double> *speedPerPstate, int core)
: Cpu(model, host, speedPerPstate, core)
{
xbt_assert(core==1,"Multi-core not handled by this model yet");
actionSet_ = new ActionTiList();
- xbt_dynar_get_cpy(speedPerPstate, 0, &speed_.peak);
+ speed_.peak = speedPerPstate->front();
XBT_DEBUG("CPU create: peak=%f", speed_.peak);
- speedIntegratedTrace_ = new CpuTiTgmr(NULL, 1/*scale*/);
+ speedIntegratedTrace_ = new CpuTiTgmr(nullptr, 1/*scale*/);
}
CpuTi::~CpuTi()
speedIntegratedTrace_ = new CpuTiTgmr(trace, speed_.scale);
/* add a fake trace event if periodicity == 0 */
- if (trace && xbt_dynar_length(trace->event_list) > 1) {
- s_tmgr_event_t val;
- xbt_dynar_get_cpy(trace->event_list, xbt_dynar_length(trace->event_list) - 1, &val);
- if (val.delta == 0)
- speed_.event = future_evt_set->add_trace(tmgr_empty_trace_new(), 0.0, this);
+ if (trace && trace->event_list.size() > 1) {
+ trace_mgr::DatedValue val = trace->event_list.back();
+ if (val.date_ < 1e-12)
+ speed_.event = future_evt_set->add_trace(new simgrid::trace_mgr::trace(), this);
}
}
-void CpuTi::apply_event(tmgr_trace_iterator_t event, double value)
+void CpuTi::apply_event(tmgr_trace_event_t event, double value)
{
if (event == speed_.event) {
tmgr_trace_t speedTrace;
CpuTiTgmr *trace;
- s_tmgr_event_t val;
XBT_DEBUG("Finish trace date: value %f", value);
/* update remaining of actions and put in modified cpu swag */
modified(true);
speedTrace = speedIntegratedTrace_->speedTrace_;
- xbt_dynar_get_cpy(speedTrace->event_list, xbt_dynar_length(speedTrace->event_list) - 1, &val);
+ trace_mgr::DatedValue val = speedTrace->event_list.back();
delete speedIntegratedTrace_;
- speed_.scale = val.value;
+ speed_.scale = val.value_;
- trace = new CpuTiTgmr(TRACE_FIXED, val.value);
- XBT_DEBUG("value %f", val.value);
+ trace = new CpuTiTgmr(TRACE_FIXED, val.value_);
+ XBT_DEBUG("value %f", val.value_);
speedIntegratedTrace_ = trace;
} else if (event == stateEvent_) {
if (value > 0) {
if(isOff())
- xbt_dynar_push_as(host_that_restart, char*, (char *)getName());
+ host_that_restart.push_back(getHost());
turnOn();
} else {
turnOff();
double date = surf_get_clock();
/* put all action running on cpu to failed */
- for(ActionTiList::iterator it(actionSet_->begin()), itend(actionSet_->end())
- ; it != itend ; ++it) {
+ for(ActionTiList::iterator it(actionSet_->begin()), itend(actionSet_->end()); it != itend ; ++it) {
CpuTiAction *action = &*it;
if (action->getState() == Action::State::running
action->setFinishTime(date);
action->setState(Action::State::failed);
if (action->indexHeap_ >= 0) {
- CpuTiAction *heap_act = (CpuTiAction*)
- xbt_heap_remove(static_cast<CpuTiModel*>(getModel())->tiActionHeap_, action->indexHeap_);
+ CpuTiAction* heap_act = static_cast<CpuTiAction*>(
+ xbt_heap_remove(static_cast<CpuTiModel*>(model())->tiActionHeap_, action->indexHeap_));
if (heap_act != action)
DIE_IMPOSSIBLE;
}
void CpuTi::updateActionsFinishTime(double now)
{
CpuTiAction *action;
- double sum_priority = 0.0, total_area, min_finish = -1;
+ double sum_priority = 0.0;
+ double total_area;
/* update remaining amount of actions */
updateRemainingAmount(now);
for(ActionTiList::iterator it(actionSet_->begin()), itend(actionSet_->end()) ; it != itend ; ++it) {
action = &*it;
- min_finish = -1;
+ double min_finish = -1;
/* action not running, skip it */
- if (action->getStateSet() !=
- surf_cpu_model_pm->getRunningActionSet())
+ if (action->getStateSet() != surf_cpu_model_pm->getRunningActionSet())
continue;
/* verify if the action is really running on cpu */
if (action->suspended_ == 0 && action->getPriority() > 0) {
/* total area needed to finish the action. Used in trace integration */
- total_area =
- (action->getRemains()) * sum_priority *
- action->getPriority();
+ total_area = (action->getRemains()) * sum_priority * action->getPriority();
total_area /= speed_.peak;
action->setFinishTime(speedIntegratedTrace_->solve(now, total_area));
/* verify which event will happen before (max_duration or finish time) */
- if (action->getMaxDuration() != NO_MAX_DURATION &&
+ if (action->getMaxDuration() > NO_MAX_DURATION &&
action->getStartTime() + action->getMaxDuration() < action->finishTime_)
min_finish = action->getStartTime() + action->getMaxDuration();
else
min_finish = action->finishTime_;
} else {
/* put the max duration time on heap */
- if (action->getMaxDuration() != NO_MAX_DURATION)
+ if (action->getMaxDuration() > NO_MAX_DURATION)
min_finish = action->getStartTime() + action->getMaxDuration();
}
/* add in action heap */
XBT_DEBUG("action(%p) index %d", action, action->indexHeap_);
if (action->indexHeap_ >= 0) {
- CpuTiAction *heap_act = (CpuTiAction*)
- xbt_heap_remove(static_cast<CpuTiModel*>(getModel())->tiActionHeap_, action->indexHeap_);
+ CpuTiAction* heap_act = static_cast<CpuTiAction*>(
+ xbt_heap_remove(static_cast<CpuTiModel*>(model())->tiActionHeap_, action->indexHeap_));
if (heap_act != action)
DIE_IMPOSSIBLE;
}
- if (min_finish != NO_MAX_DURATION)
- xbt_heap_push(static_cast<CpuTiModel*>(getModel())->tiActionHeap_, action, min_finish);
-
- XBT_DEBUG
- ("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f",
- getName(), action, action->getStartTime(),
- action->finishTime_,
- action->getMaxDuration());
+ if (min_finish > NO_MAX_DURATION)
+ xbt_heap_push(static_cast<CpuTiModel*>(model())->tiActionHeap_, action, min_finish);
+
+ XBT_DEBUG("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f", cname(), action,
+ action->getStartTime(), action->finishTime_, action->getMaxDuration());
}
/* remove from modified cpu */
modified(false);
bool CpuTi::isUsed()
{
- return !actionSet_->empty();
+ return not actionSet_->empty();
}
double CpuTi::getAvailableSpeed()
for(ActionTiList::iterator it(actionSet_->begin()), itend(actionSet_->end()) ; it != itend ; ++it) {
CpuTiAction *action = &*it;
/* action not running, skip it */
- if (action->getStateSet() != getModel()->getRunningActionSet())
+ if (action->getStateSet() != model()->getRunningActionSet())
continue;
/* bogus priority, skip it */
CpuAction *CpuTi::execution_start(double size)
{
- XBT_IN("(%s,%g)", getName(), size);
- CpuTiAction *action = new CpuTiAction(static_cast<CpuTiModel*>(getModel()), size, isOff(), this);
+ XBT_IN("(%s,%g)", cname(), size);
+ CpuTiAction* action = new CpuTiAction(static_cast<CpuTiModel*>(model()), size, isOff(), this);
actionSet_->push_back(*action);
if (duration > 0)
duration = MAX(duration, sg_surf_precision);
- XBT_IN("(%s,%g)", getName(), duration);
- CpuTiAction *action = new CpuTiAction(static_cast<CpuTiModel*>(getModel()), 1.0, isOff(), this);
+ XBT_IN("(%s,%g)", cname(), duration);
+ CpuTiAction* action = new CpuTiAction(static_cast<CpuTiModel*>(model()), 1.0, isOff(), this);
action->maxDuration_ = duration;
action->suspended_ = 2;
/* Move to the *end* of the corresponding action set. This convention
is used to speed up update_resource_state */
action->getStateSet()->erase(action->getStateSet()->iterator_to(*action));
- action->stateSet_ = static_cast<CpuTiModel*>(getModel())->runningActionSetThatDoesNotNeedBeingChecked_;
- action->getStateSet()->push_back(*action);
+ action->stateSet_ = static_cast<CpuTiModel*>(model())->runningActionSetThatDoesNotNeedBeingChecked_;
+ action->getStateSet()->push_back(*action);
}
actionSet_->push_back(*action);
}
void CpuTi::modified(bool modified){
- CpuTiList *modifiedCpu = static_cast<CpuTiModel*>(getModel())->modifiedCpu_;
+ CpuTiList* modifiedCpu = static_cast<CpuTiModel*>(model())->modifiedCpu_;
if (modified) {
- if (!cpu_ti_hook.is_linked()) {
+ if (not cpu_ti_hook.is_linked()) {
modifiedCpu->push_back(*this);
}
} else {
CpuTiAction::CpuTiAction(CpuTiModel *model_, double cost, bool failed, CpuTi *cpu)
: CpuAction(model_, cost, failed)
+ , cpu_(cpu)
{
- cpu_ = cpu;
- indexHeap_ = -1;
cpu_->modified(true);
}
int CpuTiAction::unref()
{
refcount_--;
- if (!refcount_) {
+ if (not refcount_) {
if (action_hook.is_linked())
getStateSet()->erase(getStateSet()->iterator_to(*this));
/* remove from action_set */
this->setState(Action::State::failed);
xbt_heap_remove(getModel()->getActionHeap(), this->indexHeap_);
cpu_->modified(true);
- return;
}
void CpuTiAction::suspend()
/* add in action heap */
if (indexHeap_ >= 0) {
- CpuTiAction *heap_act = (CpuTiAction*)
- xbt_heap_remove(getModel()->getActionHeap(), indexHeap_);
+ CpuTiAction *heap_act = static_cast<CpuTiAction*>(xbt_heap_remove(getModel()->getActionHeap(), indexHeap_));
if (heap_act != this)
DIE_IMPOSSIBLE;
}