X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/23329ae4f5be747063de64604ed51c57a122e0ee..93e5688a00110496a7b1b9d03656bc3b9c87b69c:/src/instr/instr_paje.c diff --git a/src/instr/instr_paje.c b/src/instr/instr_paje.c index 7bc4bbfb35..ef88e61775 100644 --- a/src/instr/instr_paje.c +++ b/src/instr/instr_paje.c @@ -24,6 +24,46 @@ void instr_paje_init (container_t root) rootContainer = root; } +static long long int new_type_id (void) +{ + static long long int type_id = 0; + return type_id++; +} + +static val_t newValue (const char *valuename, const char *color, type_t father) +{ + val_t ret = xbt_new0(s_val_t, 1); + ret->name = xbt_strdup (valuename); + ret->father = father; + ret->color = xbt_strdup (color); + + char str_id[INSTR_DEFAULT_STR_SIZE]; + snprintf (str_id, INSTR_DEFAULT_STR_SIZE, "%lld", new_type_id()); + ret->id = xbt_strdup (str_id); + + xbt_dict_set (father->values, valuename, ret, NULL); + DEBUG2("new value %s, child of %s", ret->name, ret->father->name); + return ret; +} + +val_t getValue (const char *valuename, const char *color, type_t father) +{ + if (father->kind == TYPE_VARIABLE) return NULL; //Variables can't have different values + + val_t ret = (val_t)xbt_dict_get_or_null (father->values, valuename); + if (ret == NULL){ + ret = newValue (valuename, color, father); + DEBUG4("EntityValue %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); + new_pajeDefineEntityValue(ret); + } + return ret; +} + +val_t getValueByName (const char *valuename, type_t father) +{ + return getValue (valuename, NULL, father); +} + static type_t newType (const char *typename, const char *key, const char *color, e_entity_types kind, type_t father) { type_t ret = xbt_new0(s_type_t, 1); @@ -31,11 +71,11 @@ static type_t newType (const char *typename, const char *key, const char *color, ret->father = father; ret->kind = kind; ret->children = xbt_dict_new (); + ret->values = xbt_dict_new (); ret->color = xbt_strdup (color); - static long long int type_id = 0; char str_id[INSTR_DEFAULT_STR_SIZE]; - snprintf (str_id, INSTR_DEFAULT_STR_SIZE, "%lld", type_id++); + snprintf (str_id, INSTR_DEFAULT_STR_SIZE, "%lld", new_type_id()); ret->id = xbt_strdup (str_id); if (father != NULL){ @@ -239,9 +279,9 @@ static type_t recursiveGetType (const char *name, type_t root) return NULL; } -type_t getType (const char *name) +type_t getType (const char *name, type_t father) { - return recursiveGetType (name, rootType); + return recursiveGetType (name, father); } void destroyContainer (container_t container) @@ -291,6 +331,7 @@ static void recursiveDestroyType (type_t type) xbt_free (type->name); xbt_free (type->id); xbt_free (type->children); + xbt_free (type->values); xbt_free (type); type = NULL; }