Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
sanitize the surf API
[simgrid.git] / src / surf / surf_interface.hpp
index f175f4c..aff65e2 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2004-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2004-2016. 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. */
@@ -15,7 +14,9 @@
 
 #include <boost/function.hpp>
 #include <boost/intrusive/list.hpp>
-#include "surf/trace_mgr.h"
+
+#include <xbt/signal.hpp>
+
 #include "xbt/lib.h"
 #include "surf/surf_routing.h"
 #include "simgrid/platf_interface.h"
 #include "src/surf/surf_private.h"
 #include "src/internal_config.h"
 
-#ifdef LIBSIGC
-#include <sigc++/sigc++.h>
-namespace simgrid {
-namespace surf {
-  // Wraps sigc++ signals with the interface of boost::signals2:
-  template<class T> class signal;
-  template<class R, class... P>
-  class signal<R(P...)> {
-  private:
-    sigc::signal<R, P...> sig_;
-  public:
-    template<class T> XBT_ALWAYS_INLINE
-    void connect(T&& slot)
-    {
-      sig_.connect(std::forward<T>(slot));
-    }
-    template<class Res, class... Args> XBT_ALWAYS_INLINE
-    void connect(Res(*slot)(Args...))
-    {
-      sig_.connect(sigc::ptr_fun(slot));
-    }
-    template<class... Args>
-    R operator()(Args&&... args) const
-    {
-      return sig_.emit(std::forward<Args>(args)...);
-    }
-  };
-}
-}
-#else
-#include <boost/signals2.hpp>
-namespace simgrid {
-namespace surf {
-  template<class T>
-  using signal = ::boost::signals2::signal<T>;
-}
-}
-#endif
-
-extern XBT_PRIVATE tmgr_history_t history;
 #define NO_MAX_DURATION -1.0
 
 /*********
@@ -87,7 +48,7 @@ extern XBT_PRIVATE double sg_sender_gap;
 namespace simgrid {
 namespace surf {
 
-extern XBT_PRIVATE simgrid::surf::signal<void(void)> surfExitCallbacks;
+extern XBT_PRIVATE simgrid::xbt::signal<void(void)> surfExitCallbacks;
 
 }
 }
@@ -110,11 +71,10 @@ enum heap_action_type{
  *********/
 /* For the trace and trace:connect tag (store their content till the end of the parsing) */
 XBT_PUBLIC_DATA(xbt_dict_t) traces_set_list;
-XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_host_avail;
-XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_power;
+XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_host_speed;
 XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_avail;
-XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_bandwidth;
-XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_latency;
+XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_bw;
+XBT_PUBLIC_DATA(xbt_dict_t) trace_connect_list_link_lat;
 
 /**********
  * Action *
@@ -378,7 +338,7 @@ public:
 
 protected:
   ActionLmmListPtr p_modifiedSet;
-  lmm_system_t p_maxminSystem;
+  lmm_system_t p_maxminSystem = nullptr;
   e_UM_t p_updateMechanism = UM_UNDEFINED;
   int m_selectiveUpdate;
   xbt_heap_t p_actionHeap;
@@ -403,7 +363,7 @@ private:
 typedef struct {
   double peak;              /**< The peak of the metric, ie its max value */
   double scale;             /**< Current availability of the metric according to the traces, in [0,1] */
-  tmgr_trace_event_t event; /**< The associated trace event associated to the metric */
+  tmgr_trace_iterator_t event; /**< The associated trace event associated to the metric */
 } s_surf_metric_t;
 
 namespace simgrid {
@@ -415,8 +375,6 @@ namespace surf {
  */
 XBT_PUBLIC_CLASS Resource {
 public:
-  Resource();
-
   /**
    * @brief Constructor of non-LMM Resources
    *
@@ -434,16 +392,16 @@ public:
    */
   Resource(Model *model, const char *name, lmm_constraint_t constraint);
 
-  Resource(Model *model, const char *name, lmm_constraint_t constraint, e_surf_resource_state_t stateInit);
+  Resource(Model *model, const char *name, lmm_constraint_t constraint, int initiallyOn);
 
   /**
    * @brief Resource constructor
    *
    * @param model Model associated to this Resource
    * @param name The name of the Resource
-   * @param stateInit the initial state of the Resource
+   * @param initiallyOn the initial state of the Resource
    */
-  Resource(Model *model, const char *name, e_surf_resource_state_t stateInit);
+  Resource(Model *model, const char *name, int initiallyOn);
 
   virtual ~Resource();
 
@@ -459,37 +417,31 @@ public:
    *
    * @param event_type [TODO]
    * @param value [TODO]
-   * @param date [TODO]
    */
-  virtual void updateState(tmgr_trace_event_t event_type, double value, double date)=0;
+  virtual void updateState(tmgr_trace_iterator_t event_type, double value)=0;
 
   /** @brief Check if the current Resource is used (if it currently serves an action) */
   virtual bool isUsed()=0;
 
   /** @brief Check if the current Resource is active */
-  bool isOn();
+  virtual bool isOn();
+  /** @brief Check if the current Resource is shut down */
+  virtual bool isOff();
   /** @brief Turn on the current Resource */
-  void turnOn();
+  virtual void turnOn();
   /** @brief Turn off the current Resource */
-  void turnOff();
-
-  /** @brief Get the [state](\ref e_surf_resource_state_t) of the current Resource */
-  virtual e_surf_resource_state_t getState();
-  /** @brief Set the [state](\ref e_surf_resource_state_t) of the current Resource */
-  virtual void setState(e_surf_resource_state_t state);
+  virtual void turnOff();
 
 private:
   const char *p_name;
   Model *p_model;
-  bool m_running;
-  e_surf_resource_state_t m_stateCurrent;
-
+  bool m_isOn;
 
 public: /* LMM */
   /** @brief Get the lmm constraint associated to this Resource if it is part of a LMM component */
   lmm_constraint_t getConstraint();
 protected:
-  lmm_constraint_t p_constraint;
+  lmm_constraint_t p_constraint = nullptr;
 };
 
 }