- //register the link container types
- if (new->kind == INSTR_LINK){
- xbt_dynar_push_as(allLinkTypes, type_t, new->type);
- }
- return new;
-}
-
-static container_t recursiveGetContainer (const char *name, container_t root)
-{
- if (strcmp (root->name, name) == 0) return root;
-
- xbt_dict_cursor_t cursor = NULL;
- container_t child;
- char *child_name;
- xbt_dict_foreach(root->children, cursor, child_name, child) {
- container_t ret = recursiveGetContainer(name, child);
- if (ret) return ret;
- }
- return NULL;
-}
-
-container_t getContainer (const char *name)
-{
- return recursiveGetContainer(name, rootContainer);
-}
-
-static type_t recursiveGetType (const char *name, type_t root)
-{
- if (strcmp (root->name, name) == 0) return root;
-
- xbt_dict_cursor_t cursor = NULL;
- type_t child;
- char *child_name;
- xbt_dict_foreach(root->children, cursor, child_name, child) {
- type_t ret = recursiveGetType(name, child);
- if (ret) return ret;
- }
- return NULL;
-}
-
-type_t getType (const char *name)
-{
- return recursiveGetType (name, rootType);
-}
-
-void destroyContainer (container_t container)
-{
- //remove me from my father
- if (container->father){
- xbt_dict_remove(container->father->children, container->name);
- }
-
- //trace my destruction
- pajeDestroyContainer(SIMIX_get_clock(), container->type->id, container->id);
-
- //free
- xbt_free (container->name);
- xbt_free (container->id);
- xbt_free (container->children);
- xbt_free (container);
- container = NULL;
-}
-
-static container_t findChild (container_t root, container_t a1)
-{
- if (root == a1) return root;
-
- xbt_dict_cursor_t cursor = NULL;
- container_t child;
- char *child_name;
- xbt_dict_foreach(root->children, cursor, child_name, child) {
- if (findChild (child, a1)) return child;
- }
- return NULL;
-}
-
-static container_t findCommonFather (container_t root, container_t a1, container_t a2)
-{
- if (a1->father == a2->father) return a1->father;
-
- xbt_dict_cursor_t cursor = NULL;
- container_t child;
- char *child_name;
- container_t a1_try = NULL;
- container_t a2_try = NULL;
- xbt_dict_foreach(root->children, cursor, child_name, child) {
- a1_try = findChild (child, a1);
- a2_try = findChild (child, a2);
- if (a1_try && a2_try) return child;
- }
- return NULL;
-}
-
-static void linkContainers (const char *a1, const char *a2)
-{
- //ignore loopback
- if (strcmp (a1, "__loopback__") == 0 || strcmp (a2, "__loopback__") == 0)
- return;
-
- container_t a1_container = ((container_t)xbt_dict_get (allContainers, a1));
- type_t a1_type = a1_container->type;
-
- container_t a2_container = ((container_t)xbt_dict_get (allContainers, a2));
- type_t a2_type = a2_container->type;
-
- container_t container = findCommonFather (rootContainer, a1_container, a2_container);
- xbt_assert0 (container != NULL, "common father not found");
-