Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
ns3: inline a header file
[simgrid.git] / src / surf / surf_interface.cpp
index 67c6b6b..b69e677 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2004-2018. 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. */
@@ -8,8 +8,10 @@
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/sg_config.h"
 #include "src/instr/instr_private.hpp" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
+#include "src/kernel/lmm/maxmin.hpp"   // Constraint
 #include "src/kernel/routing/NetPoint.hpp"
 #include "src/surf/HostImpl.hpp"
+#include "xbt/utility.hpp"
 
 #include <fstream>
 #include <set>
@@ -319,7 +321,7 @@ void surf_exit()
 {
   TRACE_end();                  /* Just in case it was not called by the upper layer (or there is no upper layer) */
 
-  sg_host_exit();
+  simgrid::s4u::Engine::shutdown();
   sg_link_exit();
   for (auto const& e : storage_types) {
     simgrid::surf::StorageType* stype = e.second;
@@ -344,7 +346,6 @@ void surf_exit()
 
   tmgr_finalize();
   sg_platf_exit();
-  simgrid::s4u::Engine::shutdown();
 
   NOW = 0;                      /* Just in case the user plans to restart the simulation afterward */
 }
@@ -374,6 +375,8 @@ Model::~Model(){
   delete runningActionSet_;
   delete failedActionSet_;
   delete doneActionSet_;
+  delete modifiedSet_;
+  delete maxminSystem_;
 }
 
 Action* Model::actionHeapPop()
@@ -416,7 +419,7 @@ double Model::nextOccuringEventLazy(double now)
     action->updateRemainingLazy(now);
 
     double min = -1;
-    double share = lmm_variable_getvalue(action->getVariable());
+    double share = action->getVariable()->get_value();
 
     if (share > 0) {
       double time_to_completion;
@@ -465,7 +468,7 @@ double Model::nextOccuringEventFull(double /*now*/) {
   double min = -1;
 
   for (Action& action : *getRunningActionSet()) {
-    double value = lmm_variable_getvalue(action.getVariable());
+    double value = action.getVariable()->get_value();
     if (value > 0) {
       if (action.getRemains() > 0)
         value = action.getRemainsNoUpdate() / value;
@@ -539,6 +542,11 @@ void Resource::turnOff()
   isOn_ = false;
 }
 
+double Resource::getLoad()
+{
+  return constraint_->get_usage();
+}
+
 Model* Resource::model() const
 {
   return model_;
@@ -570,15 +578,6 @@ lmm_constraint_t Resource::constraint() const
  * Action *
  **********/
 
-const char *surf_action_state_names[6] = {
-  "SURF_ACTION_READY",
-  "SURF_ACTION_RUNNING",
-  "SURF_ACTION_FAILED",
-  "SURF_ACTION_DONE",
-  "SURF_ACTION_TO_FREE",
-  "SURF_ACTION_NOT_IN_THE_SYSTEM"
-};
-
 namespace simgrid {
 namespace surf {
 
@@ -622,7 +621,7 @@ Action::State Action::getState() const
 
 void Action::setState(Action::State state)
 {
-  stateSet_->erase(stateSet_->iterator_to(*this));
+  simgrid::xbt::intrusive_erase(*stateSet_, *this);
   switch (state) {
   case Action::State::ready:
     stateSet_ = model_->getReadyActionSet();
@@ -646,14 +645,14 @@ void Action::setState(Action::State state)
 
 double Action::getBound() const
 {
-  return (variable_) ? lmm_variable_getbound(variable_) : 0;
+  return variable_ ? variable_->get_bound() : 0;
 }
 
 void Action::setBound(double bound)
 {
   XBT_IN("(%p,%g)", this, bound);
   if (variable_)
-    lmm_update_variable_bound(getModel()->getMaxminSystem(), variable_, bound);
+    getModel()->getMaxminSystem()->update_variable_bound(variable_, bound);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate() != surf_get_clock())
     heapRemove(getModel()->getActionHeap());
@@ -680,7 +679,7 @@ void Action::setSharingWeight(double weight)
 {
   XBT_IN("(%p,%g)", this, weight);
   sharingWeight_ = weight;
-  lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), weight);
+  getModel()->getMaxminSystem()->update_variable_weight(getVariable(), weight);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY)
     heapRemove(getModel()->getActionHeap());
@@ -691,7 +690,7 @@ void Action::cancel(){
   setState(Action::State::failed);
   if (getModel()->getUpdateMechanism() == UM_LAZY) {
     if (action_lmm_hook.is_linked())
-      getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
+      simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this);
     heapRemove(getModel()->getActionHeap());
   }
 }
@@ -700,14 +699,14 @@ int Action::unref(){
   refcount_--;
   if (not refcount_) {
     if (action_hook.is_linked())
-      stateSet_->erase(stateSet_->iterator_to(*this));
+      simgrid::xbt::intrusive_erase(*stateSet_, *this);
     if (getVariable())
-      lmm_variable_free(getModel()->getMaxminSystem(), getVariable());
+      getModel()->getMaxminSystem()->variable_free(getVariable());
     if (getModel()->getUpdateMechanism() == UM_LAZY) {
       /* remove from heap */
       heapRemove(getModel()->getActionHeap());
       if (action_lmm_hook.is_linked())
-        getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
+        simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this);
     }
     delete this;
     return 1;
@@ -718,8 +717,8 @@ int Action::unref(){
 void Action::suspend()
 {
   XBT_IN("(%p)", this);
-  if (suspended_ != 2) {
-    lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), 0.0);
+  if (suspended_ != SuspendStates::sleeping) {
+    getModel()->getMaxminSystem()->update_variable_weight(getVariable(), 0.0);
     if (getModel()->getUpdateMechanism() == UM_LAZY){
       heapRemove(getModel()->getActionHeap());
       if (getModel()->getUpdateMechanism() == UM_LAZY && stateSet_ == getModel()->getRunningActionSet() &&
@@ -728,7 +727,7 @@ void Action::suspend()
         updateRemainingLazy(surf_get_clock());
       }
     }
-    suspended_ = 1;
+    suspended_ = SuspendStates::suspended;
   }
   XBT_OUT();
 }
@@ -736,9 +735,9 @@ void Action::suspend()
 void Action::resume()
 {
   XBT_IN("(%p)", this);
-  if (suspended_ != 2) {
-    lmm_update_variable_weight(getModel()->getMaxminSystem(), getVariable(), getPriority());
-    suspended_ = 0;
+  if (suspended_ != SuspendStates::sleeping) {
+    getModel()->getMaxminSystem()->update_variable_weight(getVariable(), getPriority());
+    suspended_ = SuspendStates::not_suspended;
     if (getModel()->getUpdateMechanism() == UM_LAZY)
       heapRemove(getModel()->getActionHeap());
   }
@@ -747,7 +746,7 @@ void Action::resume()
 
 bool Action::isSuspended()
 {
-  return suspended_ == 1;
+  return suspended_ == SuspendStates::suspended;
 }
 /* insert action on heap using a given key and a hat (heap_action_type)
  * a hat can be of three types for communications: