X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/04c6c7d463281bc4abe2788699ed1bcc6368e83e..9ad3b281f6e187eeb20c48f88820a1c0091bcf8f:/src/instr/instr_paje_containers.cpp diff --git a/src/instr/instr_paje_containers.cpp b/src/instr/instr_paje_containers.cpp index 9208684f97..7541e6b35d 100644 --- a/src/instr/instr_paje_containers.cpp +++ b/src/instr/instr_paje_containers.cpp @@ -10,10 +10,13 @@ #include "src/instr/instr_private.h" +#include + XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_containers, instr, "Paje tracing event system (containers)"); static container_t rootContainer = nullptr; /* the root container */ -static xbt_dict_t allContainers = nullptr; /* all created containers indexed by name */ +static std::unordered_map + allContainers; /* all created containers indexed by name */ std::set trivaNodeTypes; /* all host types defined */ std::set trivaEdgeTypes; /* all link types defined */ @@ -23,16 +26,6 @@ long long int instr_new_paje_id () return type_id++; } -void PJ_container_alloc () -{ - allContainers = xbt_dict_new_homogeneous(nullptr); -} - -void PJ_container_release () -{ - xbt_dict_free (&allContainers); -} - void PJ_container_set_root (container_t root) { rootContainer = root; @@ -78,7 +71,7 @@ simgrid::instr::Container::Container(const char* name, simgrid::instr::e_contain char as_typename[INSTR_DEFAULT_STR_SIZE]; snprintf(as_typename, INSTR_DEFAULT_STR_SIZE, "L%d", this->level_); if (this->father_) { - this->type_ = simgrid::instr::Type::getOrNull(as_typename, this->father_->type_); + this->type_ = this->father_->type_->getChildOrNull(as_typename); if (this->type_ == nullptr) { this->type_ = simgrid::instr::Type::containerNew(as_typename, this->father_->type_); } @@ -114,7 +107,7 @@ simgrid::instr::Container::Container(const char* name, simgrid::instr::e_contain THROWF (tracing_error, 0, "new container kind is unknown."); break; } - simgrid::instr::Type* type = simgrid::instr::Type::getOrNull(typeNameBuff, this->father_->type_); + simgrid::instr::Type* type = this->father_->type_->getChildOrNull(typeNameBuff); if (type == nullptr){ this->type_ = simgrid::instr::Type::containerNew(typeNameBuff, this->father_->type_); }else{ @@ -128,11 +121,10 @@ simgrid::instr::Container::Container(const char* name, simgrid::instr::e_contain } //register all kinds by name - if (xbt_dict_get_or_null(allContainers, this->name_) != nullptr) { + if (not allContainers.emplace(this->name_, this).second) { THROWF(tracing_error, 1, "container %s already present in allContainers data structure", this->name_); } - xbt_dict_set(allContainers, this->name_, this, nullptr); XBT_DEBUG("Add container name '%s'", this->name_); //register NODE types for triva configuration @@ -158,7 +150,7 @@ simgrid::instr::Container::~Container() } // remove it from allContainers data structure - xbt_dict_remove(allContainers, name_); + allContainers.erase(name_); // free xbt_free(name_); @@ -166,7 +158,7 @@ simgrid::instr::Container::~Container() xbt_dict_free(&children_); } -container_t PJ_container_get (const char *name) +simgrid::instr::Container* PJ_container_get(const char* name) { container_t ret = PJ_container_get_or_null (name); if (ret == nullptr){ @@ -175,12 +167,13 @@ container_t PJ_container_get (const char *name) return ret; } -container_t PJ_container_get_or_null (const char *name) +simgrid::instr::Container* PJ_container_get_or_null(const char* name) { - return static_cast(name != nullptr ? xbt_dict_get_or_null(allContainers, name) : nullptr); + auto cont = allContainers.find(name); + return cont == allContainers.end() ? nullptr : cont->second; } -container_t PJ_container_get_root () +simgrid::instr::Container* PJ_container_get_root() { return rootContainer; } @@ -223,7 +216,7 @@ void PJ_container_free_all () rootContainer = nullptr; //checks - if (not xbt_dict_is_empty(allContainers)) { + if (not allContainers.empty()) { THROWF(tracing_error, 0, "some containers still present even after destroying all of them"); } }