-/* Copyright (c) 2012. The SimGrid Team.
+/* Copyright (c) 2012, 2014. 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. */
-#include "instr/instr_private.h"
+ * under the terms of the license (GNU LGPL) which comes with this package. */
-#ifdef HAVE_TRACING
+#include "instr/instr_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_types, instr, "Paje tracing event system (types)");
static type_t rootType = NULL; /* the root type */
-static xbt_dict_t allTypes = NULL; /* all declared types indexed by name */
void PJ_type_alloc ()
{
- allTypes = xbt_dict_new_homogeneous (NULL);
}
void PJ_type_release ()
{
- xbt_dict_free (&allTypes);
rootType = NULL;
- allTypes = NULL;
}
type_t PJ_type_get_root ()
xbt_dict_set (father->children, key, ret, NULL);
XBT_DEBUG("new type %s, child of %s", typename, father->name);
}
-
- xbt_dict_set (allTypes, typename, ret, NULL);
return ret;
}
void PJ_type_free (type_t type)
{
- xbt_dict_remove (allTypes, type->name);
-
val_t value;
char *value_name;
xbt_dict_cursor_t cursor = NULL;
{
recursiveDestroyType (PJ_type_get_root());
rootType = NULL;
+}
- //checks
- if (xbt_dict_length(allTypes) != 0){
- THROWF(tracing_error, 0, "some types still present even after destroying all of them");
+type_t PJ_type_get (const char *name, type_t father)
+{
+ type_t ret = PJ_type_get_or_null (name, father);
+ if (ret == NULL){
+ THROWF (tracing_error, 2, "type with name (%s) not found in father type (%s)", name, father->name);
}
+ return ret;
}
-static type_t recursiveGetType (const char *name, type_t root)
+type_t PJ_type_get_or_null (const char *name, type_t father)
{
- if (name == NULL || root == NULL){
- THROWF (tracing_error, 0, "can't get type with a NULL name (or a NULL father given)");
+ if (name == NULL || father == NULL){
+ THROWF (tracing_error, 0, "can't get type with a NULL name or from a NULL father");
}
- if (strcmp (root->name, name) == 0) return root;
-
- xbt_dict_cursor_t cursor = NULL;
- type_t child;
+ type_t ret = NULL, child;
char *child_name;
- type_t ret = NULL;
- xbt_dict_foreach(root->children, cursor, child_name, child) {
- type_t found = recursiveGetType(name, child);
- if (found){
- if (ret == NULL){
- ret = found;
+ xbt_dict_cursor_t cursor = NULL;
+ xbt_dict_foreach(father->children, cursor, child_name, child) {
+ if (strcmp (child->name, name) == 0){
+ if (ret != NULL){
+ THROWF (tracing_error, 0, "there are two children types with the same name?");
}else{
- THROWF(tracing_error, 0, "found two types with the same name");
+ ret = child;
}
}
}
return ret;
}
-type_t PJ_type_get (const char *name, type_t father)
-{
- return recursiveGetType (name, father);
-}
-
type_t PJ_type_container_new (const char *name, type_t father)
{
if (name == NULL){
THROWF (tracing_error, 0, "can't create a container type with a NULL name");
}
- type_t ret = (type_t)xbt_dict_get_or_null (allTypes, name);
- if (ret){
- THROWF(tracing_error, 1, "container type with name %s already exists", name);
- }
+ type_t ret = NULL;
ret = newType (name, name, NULL, TYPE_CONTAINER, father);
if (father == NULL){
return ret;
}
-type_t PJ_type_event_new (const char *name, const char *color, type_t father)
+type_t PJ_type_event_new (const char *name, type_t father)
{
if (name == NULL){
THROWF (tracing_error, 0, "can't create an event type with a NULL name");
}
- type_t ret = (type_t)xbt_dict_get_or_null (allTypes, name);
- if (ret){
- THROWF(tracing_error, 1, "event type with name %s already exists", name);
- }
-
- char white[INSTR_DEFAULT_STR_SIZE] = "1 1 1";
- if (!color){
- ret = newType (name, name, white, TYPE_EVENT, father);
- }else{
- ret = newType (name, name, color, TYPE_EVENT, father);
- }
+ type_t ret = newType (name, name, NULL, TYPE_EVENT, father);
XBT_DEBUG("EventType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id);
new_pajeDefineEventType(ret);
return ret;
THROWF (tracing_error, 0, "can't create a variable type with a NULL name");
}
- type_t ret = (type_t)xbt_dict_get_or_null (allTypes, name);
- if (ret){
- THROWF(tracing_error, 1, "variable type with name %s already exists", name);
- }
+ type_t ret = NULL;
char white[INSTR_DEFAULT_STR_SIZE] = "1 1 1";
if (!color){
THROWF (tracing_error, 0, "can't create a link type with a NULL name");
}
- type_t ret = (type_t)xbt_dict_get_or_null (allTypes, name);
- if (ret){
- THROWF(tracing_error, 1, "link type with name %s already exists", name);
- }
+ type_t ret = NULL;
char key[INSTR_DEFAULT_STR_SIZE];
snprintf (key, INSTR_DEFAULT_STR_SIZE, "%s-%s-%s", name, source->id, dest->id);
THROWF (tracing_error, 0, "can't create a state type with a NULL name");
}
- type_t ret = (type_t)xbt_dict_get_or_null (allTypes, name);
- if (ret){
- THROWF(tracing_error, 1, "state type with name %s already exists", name);
- }
+ type_t ret = NULL;
ret = newType (name, name, NULL, TYPE_STATE, father);
XBT_DEBUG("StateType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id);
new_pajeDefineStateType(ret);
return ret;
}
-
-#endif