Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Get ride of ???Ptr types in C++: make pointers explicit
[simgrid.git] / src / surf / network_interface.hpp
index 159a650..1893836 100644 (file)
@@ -3,6 +3,9 @@
 
 /* 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 <boost/unordered_map.hpp>
+
 #include "xbt/fifo.h"
 #include "surf_interface.hpp"
 #include "surf_routing.hpp"
  * Classes *
  ***********/
 class NetworkModel;
-typedef NetworkModel *NetworkModelPtr;
-
 class NetworkAction;
-typedef NetworkAction *NetworkActionPtr;
 
 /*************
  * Callbacks *
@@ -27,33 +27,33 @@ typedef NetworkAction *NetworkActionPtr;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emits the callbacks after Link creation
- * @details Callback functions have the following signature: `void(LinkPtr)`
+ * @details Callback functions have the following signature: `void(Link*)`
  */
-XBT_PUBLIC_DATA( surf_callback(void, LinkPtr)) networkLinkCreatedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, Link*)) networkLinkCreatedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emits the callbacks after Link destruction
- * @details Callback functions have the following signature: `void(LinkPtr)`
+ * @details Callback functions have the following signature: `void(Link*)`
  */
-XBT_PUBLIC_DATA( surf_callback(void, LinkPtr)) networkLinkDestructedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, Link*)) networkLinkDestructedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emits the callbacks after Link State changed
- * @details Callback functions have the following signature: `void(LinkActionPtr action, e_surf_resource_state_t old, e_surf_resource_state_t current)`
+ * @details Callback functions have the following signature: `void(LinkAction *action, e_surf_resource_state_t old, e_surf_resource_state_t current)`
  */
-XBT_PUBLIC_DATA( surf_callback(void, LinkPtr, e_surf_resource_state_t, e_surf_resource_state_t)) networkLinkStateChangedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, Link*, e_surf_resource_state_t, e_surf_resource_state_t)) networkLinkStateChangedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emits the callbacks after NetworkAction State changed
- * @details Callback functions have the following signature: `void(NetworkActionPtr action, e_surf_action_state_t old, e_surf_action_state_t current)`
+ * @details Callback functions have the following signature: `void(NetworkAction *action, e_surf_action_state_t old, e_surf_action_state_t current)`
  */
-XBT_PUBLIC_DATA( surf_callback(void, NetworkActionPtr, e_surf_action_state_t, e_surf_action_state_t)) networkActionStateChangedCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, NetworkAction*, e_surf_action_state_t, e_surf_action_state_t)) networkActionStateChangedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emits the callbacks after communication created
- * @details Callback functions have the following signature: `void(NetworkActionPtr action, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate)`
+ * @details Callback functions have the following signature: `void(NetworkAction *action, RoutingEdge *src, RoutingEdge *dst, double size, double rate)`
  */
-XBT_PUBLIC_DATA( surf_callback(void, NetworkActionPtr, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate)) networkCommunicateCallbacks;
+XBT_PUBLIC_DATA( surf_callback(void, NetworkAction*, RoutingEdge *src, RoutingEdge *dst, double size, double rate)) networkCommunicateCallbacks;
 
 /*********
  * Tools *
@@ -105,7 +105,7 @@ public:
    * @param properties Dictionary of properties associated to this Resource
    * @return The created Link
    */
-  virtual LinkPtr createLink(const char *name,
+  virtual Link* createLink(const char *name,
                                    double bw_initial,
                                    tmgr_trace_t bw_trace,
                                    double lat_initial,
@@ -115,7 +115,7 @@ public:
                                    e_surf_link_sharing_policy_t policy,
                                    xbt_dict_t properties)=0;
 
-  virtual void gapAppend(double /*size*/, const LinkPtr /*link*/, NetworkActionPtr /*action*/) {};
+  virtual void gapAppend(double /*size*/, const Link* /*link*/, NetworkAction */*action*/) {};
 
   /**
    * @brief Create a communication between two hosts.
@@ -129,7 +129,7 @@ public:
    * unlimited.
    * @return The action representing the communication
    */
-  virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
+  virtual Action *communicate(RoutingEdge *src, RoutingEdge *dst,
                                           double size, double rate)=0;
 
   /**
@@ -193,7 +193,7 @@ public:
    * @param name The name of the Link
    * @param props Dictionary of properties associated to this Link
    */
-  Link(NetworkModelPtr model, const char *name, xbt_dict_t props);
+  Link(NetworkModel *model, const char *name, xbt_dict_t props);
 
   /**
    * @brief Link constructor
@@ -205,7 +205,7 @@ public:
    * @param history [TODO]
    * @param state_trace [TODO]
    */
-  Link(NetworkModelPtr model, const char *name, xbt_dict_t props,
+  Link(NetworkModel *model, const char *name, xbt_dict_t props,
               lmm_constraint_t constraint,
               tmgr_history_t history,
               tmgr_trace_t state_trace);
@@ -243,8 +243,24 @@ public:
   tmgr_trace_event_t p_latEvent;
 
   /* LMM */
-  tmgr_trace_event_t p_stateEvent;
+  tmgr_trace_event_t p_stateEvent = NULL;
   s_surf_metric_t p_power;
+
+  /* User data */
+public:
+  void *getData()        { return userData;}
+  void  setData(void *d) { userData=d;}
+private:
+  void *userData = NULL;
+
+  /* List of all links */
+private:
+  static boost::unordered_map<std::string, Link *> *links;
+public:
+  static Link *byName(const char* name);
+  static int linksAmount();
+  static Link **linksList();
+  static void linksExit();
 };
 
 /**********
@@ -263,7 +279,7 @@ public:
    * @param cost The cost of this  NetworkAction in [TODO]
    * @param failed [description]
    */
-  NetworkAction(ModelPtr model, double cost, bool failed)
+  NetworkAction(Model *model, double cost, bool failed)
   : Action(model, cost, failed) {}
 
   /**
@@ -275,7 +291,7 @@ public:
    * @param var The lmm variable associated to this Action if it is part of a
    * LMM component
    */
-  NetworkAction(ModelPtr model, double cost, bool failed, lmm_variable_t var)
+  NetworkAction(Model *model, double cost, bool failed, lmm_variable_t var)
   : Action(model, cost, failed, var) {};
 
   void setState(e_surf_action_state_t state);