Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not require doxygen in maintainer mode
[simgrid.git] / src / simix / smx_host.c
index b260c3d..57ea0d6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id$     */
+/*     $Id: smx_host.c 4895 2007-10-27 07:34:39Z mquinson $     */
 
 /* Copyright (c) 2007 Arnaud Legrand, Bruno Donassolo.
    All rights reserved.                                          */
@@ -9,17 +9,17 @@
 #include "private.h"
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
+#include "xbt/dict.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix,
                                "Logging specific to SIMIX (hosts)");
 
 /********************************* Host **************************************/
 smx_host_t __SIMIX_host_create(const char *name,
-                        void *workstation,
-                        void *data)
+                              void *workstation, void *data)
 {
-  smx_simdata_host_t simdata = xbt_new0(s_smx_simdata_host_t,1);
-  smx_host_t host = xbt_new0(s_smx_host_t,1);
+  smx_simdata_host_t simdata = xbt_new0(s_smx_simdata_host_t, 1);
+  smx_host_t host = xbt_new0(s_smx_host_t, 1);
   s_smx_process_t proc;
 
   /* Host structure */
@@ -29,10 +29,11 @@ smx_host_t __SIMIX_host_create(const char *name,
 
   simdata->host = workstation;
 
-  simdata->process_list = xbt_swag_new(xbt_swag_offset(proc, host_proc_hookup));
+  simdata->process_list =
+      xbt_swag_new(xbt_swag_offset(proc, host_proc_hookup));
   /* Update global variables */
 
-  xbt_fifo_unshift(simix_global->host, host);
+  xbt_dict_set(simix_global->host,host->name, host,&__SIMIX_host_destroy);
 
   return host;
 }
@@ -47,13 +48,13 @@ smx_host_t __SIMIX_host_create(const char *name,
  */
 void SIMIX_host_set_data(smx_host_t host, void *data)
 {
-  xbt_assert0((host!=NULL), "Invalid parameters");
+  xbt_assert0((host != NULL), "Invalid parameters");
   xbt_assert0((host->data == NULL), "Data already set");
 
   /* Assign data */
   host->data = data;
 
-  return ;
+  return;
 }
 
 /**
@@ -79,7 +80,8 @@ void *SIMIX_host_get_data(smx_host_t host)
 const char *SIMIX_host_get_name(smx_host_t host)
 {
 
-  xbt_assert0((host != NULL) && (host->simdata != NULL), "Invalid parameters");
+  xbt_assert0((host != NULL)
+             && (host->simdata != NULL), "Invalid parameters");
 
   /* Return data */
   return (host->name);
@@ -101,29 +103,31 @@ smx_host_t SIMIX_host_self(void)
  * MSG_host_destroy is just  a front_end that also removes it from 
  * msg_global->host
  */
-void __SIMIX_host_destroy(smx_host_t host)
+void __SIMIX_host_destroy(void* h)
 {
+  smx_host_t host = (smx_host_t)h;
   smx_simdata_host_t simdata = NULL;
 
   xbt_assert0((host != NULL), "Invalid parameters");
 
+
   /* Clean Simulator data */
   simdata = host->simdata;
 
   if (xbt_swag_size(simdata->process_list) != 0) {
-     char *msg=bprintf("Shutting down host %s, but it's not empty:", host->name);
-     char *tmp;
-     smx_process_t process = NULL;
-
-     xbt_swag_foreach(process, simdata->process_list) {
-       tmp = bprintf("%s\n\t%s",msg,process->name);
-       free(msg);
-       msg=tmp;
-     }
-     THROW1(arg_error,0,"%s",msg);
+    char *msg =
+       bprintf("Shutting down host %s, but it's not empty:", host->name);
+    char *tmp;
+    smx_process_t process = NULL;
+
+    xbt_swag_foreach(process, simdata->process_list) {
+      tmp = bprintf("%s\n\t%s", msg, process->name);
+      free(msg);
+      msg = tmp;
+    }
+    THROW1(arg_error, 0, "%s", msg);
   }
-      
+
   xbt_swag_free(simdata->process_list);
 
   free(simdata);
@@ -142,19 +146,36 @@ void __SIMIX_host_destroy(smx_host_t host)
  */
 int SIMIX_host_get_number(void)
 {
-  return (xbt_fifo_size(simix_global->host));
+  return (xbt_dict_size(simix_global->host));
 }
 
+
 /**
- * \brief Return a array of all the #smx_host_t.
+ * \brief Return an array of all the #smx_host_t.
  *
- * \return List of all hosts
+ * \return List of all hosts (in a newly allocated table)
  */
-smx_host_t *SIMIX_host_get_table(void)
-{
-  return ((smx_host_t *)xbt_fifo_to_array(simix_global->host));
+smx_host_t* SIMIX_host_get_table(void) {
+   smx_host_t *res = xbt_new(smx_host_t,xbt_dict_size(simix_global->host));
+   smx_host_t h;
+   xbt_dict_cursor_t c;
+   char *name;
+   int i=0;
+   
+   xbt_dict_foreach(simix_global->host,c,name,h)
+     res[i++] = h;
+   
+   return res;
 }
 
+/**
+ * \brief Return a dict of all the #smx_host_t.
+ *
+ * \return List of all hosts (as a #xbt_dict_t)
+ */
+xbt_dict_t SIMIX_host_get_dict(void) {
+   return simix_global->host;
+}
 
 /**
  * \brief Return the speed of the processor.
@@ -165,10 +186,10 @@ smx_host_t *SIMIX_host_get_table(void)
  */
 double SIMIX_host_get_speed(smx_host_t host)
 {
-  xbt_assert0((host!= NULL), "Invalid parameters");
+  xbt_assert0((host != NULL), "Invalid parameters");
 
-  return(surf_workstation_resource->
-        extension_public->get_speed(host->simdata->host,1.0));
+  return (surf_workstation_model->
+         extension_public->get_speed(host->simdata->host, 1.0));
 }
 
 /**
@@ -179,10 +200,10 @@ double SIMIX_host_get_speed(smx_host_t host)
  */
 double SIMIX_host_get_available_speed(smx_host_t host)
 {
-  xbt_assert0((host!= NULL), "Invalid parameters");
+  xbt_assert0((host != NULL), "Invalid parameters");
 
-  return(surf_workstation_resource->
-        extension_public->get_available_speed(host->simdata->host));
+  return (surf_workstation_model->
+         extension_public->get_available_speed(host->simdata->host));
 }
 
 /**
@@ -194,18 +215,29 @@ double SIMIX_host_get_available_speed(smx_host_t host)
  */
 smx_host_t SIMIX_host_get_by_name(const char *name)
 {
-  xbt_fifo_item_t i = NULL;
-  smx_host_t host = NULL;
-
   xbt_assert0(((simix_global != NULL)
-         && (simix_global->host != NULL)), "Environment not set yet");
+              && (simix_global->host != NULL)),
+             "Environment not set yet");
 
-  xbt_fifo_foreach(simix_global->host,i,host,smx_host_t) {
-    if(strcmp(host->name, name) == 0) return host;
-  }
-  return NULL;
+  return xbt_dict_get_or_null(simix_global->host, name);
 }
 
+/**
+ * \brief Returns a xbt_dynar_t consisting of the list of properties assigned to this host
+ *
+ * \param host a host
+ * \return the dynamic array consisting of property names
+ */
+xbt_dict_t SIMIX_host_get_properties(smx_host_t host)
+{
+  xbt_assert0((host != NULL), "Invalid parameters");
+
+  return (surf_workstation_model->
+         common_public->get_properties(host->simdata->host));
+
+}
+
+
 /**
  * \brief Return the state of a workstation
  *
@@ -215,11 +247,9 @@ smx_host_t SIMIX_host_get_by_name(const char *name)
  */
 int SIMIX_host_get_state(smx_host_t host)
 {
-  xbt_assert0((host!= NULL), "Invalid parameters");
+  xbt_assert0((host != NULL), "Invalid parameters");
 
-  return(surf_workstation_resource->
-        extension_public->get_state(host->simdata->host));
+  return (surf_workstation_model->
+         extension_public->get_state(host->simdata->host));
 
 }
-
-