+#include "private.h"
#include "simdag/simdag.h"
#include "xbt/dict.h"
#include "xbt/sysdep.h"
-#include "private.h"
-/* Creates a workstation.
+/* Creates a workstation and registers it in SG.
*/
-SG_workstation_t SG_workstation_create(void *data, const char *name, double power,
- double available_power) {
- xbt_assert0(power >= 0 && available_power >= 0, "Invalid parameter"); /* or > 0 ? */
-
- SG_workstation_t workstation = xbt_new0(s_SG_workstation_t, 1);
+SG_workstation_t __SG_workstation_create(const char *name, void *surf_workstation, void *data) {
+ SG_workstation_data_t sgdata = xbt_new0(s_SG_workstation_data_t, 1); /* workstation private data */
+ sgdata->surf_workstation = surf_workstation;
- workstation->data = data;
+ SG_workstation_t workstation = xbt_new0(s_SG_workstation_t, 1);
workstation->name = xbt_strdup(name);
- /*workstation->power = power;
- workstation->available_power = power;*/
+ workstation->data = data; /* user data */
+ workstation->sgdata = sgdata; /* private data */
+
+ xbt_dict_set(sg_global->workstations, name, workstation, free); /* add the workstation to the dictionary */
+
/* TODO: route */
return workstation;
return sg_global->workstation_count;
}
-/* Sets the data of a workstation.
+/* Sets the data of a workstation. The new data can be NULL. The old data should have been freed first if it was not NULL.
*/
void SG_workstation_set_data(SG_workstation_t workstation, void *data) {
xbt_assert0(workstation != NULL, "Invalid parameter");
workstation->data = data;
}
-/* Returns the data of a workstation.
+/* Returns the data of a workstation. The user data can be NULL.
*/
void* SG_workstation_get_data(SG_workstation_t workstation) {
xbt_assert0(workstation != NULL, "Invalid parameter");
/* Destroys a workstation. The user data (if any) should have been destroyed first.
*/
-void SG_workstation_destroy(SG_workstation_t workstation) {
+void __SG_workstation_destroy(SG_workstation_t workstation) {
xbt_assert0(workstation != NULL, "Invalid parameter");
- if (workstation->name)
- free(workstation->name);
-
+ if (workstation->sgdata != NULL) {
+ xbt_free(workstation->sgdata);
+ }
+
+ if (workstation->name != NULL) {
+ xbt_free(workstation->name);
+ }
+
/* TODO: route */
- free(workstation);
+ xbt_free(workstation);
}