From: Gabriel Corona Date: Thu, 23 Jul 2015 09:52:33 +0000 (+0200) Subject: [mc] Simplify lookup of maps X-Git-Tag: v3_12~438^2~16 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/a109dc72a412b706828aefaa315f2ba710dee2df [mc] Simplify lookup of maps --- diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index 01daaf5f15..c31683e0f3 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -393,6 +393,7 @@ endif() set(SIMGRID_SRC src/simgrid/sg_config.c + src/simgrid/util.hpp ) set(MSG_SRC diff --git a/src/mc/mc_dwarf.cpp b/src/mc/mc_dwarf.cpp index efb506efb2..ed26c43a96 100644 --- a/src/mc/mc_dwarf.cpp +++ b/src/mc/mc_dwarf.cpp @@ -15,9 +15,12 @@ #include #include +#include #include #include +#include + #include "mc_object_info.h" #include "mc_private.h" @@ -1068,11 +1071,8 @@ static void MC_post_process_variables(mc_object_info_t info) for(simgrid::mc::Variable& variable : info->global_variables) if (variable.type_id) { - auto i = info->types.find(variable.type_id); - if (i != info->types.end()) - variable.type = &(i->second); - else - variable.type = nullptr; + variable.type = simgrid::util::find_map_ptr( + info->types, variable.type_id); } } @@ -1091,11 +1091,8 @@ static void mc_post_process_scope(mc_object_info_t info, mc_frame_t scope) // Direct: for (simgrid::mc::Variable& variable : scope->variables) if (variable.type_id) { - auto i = info->types.find(variable.type_id); - if (i != info->types.end()) - variable.type = &(i->second); - else - variable.type = nullptr; + variable.type = simgrid::util::find_map_ptr( + info->types, variable.type_id); } // Recursive post-processing of nested-scopes: @@ -1110,23 +1107,19 @@ static void MC_resolve_subtype(mc_object_info_t info, mc_type_t type) { if (!type->type_id) return; - auto i = info->types.find(type->type_id); - if (i != info->types.end()) - type->subtype = &(i->second); - else { - type->subtype = nullptr; + type->subtype = simgrid::util::find_map_ptr(info->types, type->type_id); + if (type->subtype == nullptr) return; - } if (type->subtype->byte_size != 0) return; if (type->subtype->name.empty()) return; // Try to find a more complete description of the type: // We need to fix in order to support C++. - - auto j = info->full_types_by_name.find(type->subtype->name); - if (j != info->full_types_by_name.end()) - type->subtype = j->second; + simgrid::mc::Type** subtype = simgrid::util::find_map_ptr( + info->full_types_by_name, type->subtype->name); + if (subtype) + type->subtype = *subtype; } static void MC_post_process_types(mc_object_info_t info) diff --git a/src/simgrid/util.hpp b/src/simgrid/util.hpp new file mode 100644 index 0000000000..944a895efe --- /dev/null +++ b/src/simgrid/util.hpp @@ -0,0 +1,38 @@ +/* Copyright (c) 2015. The SimGrid Team. + * All rights reserved. */ + +#ifndef SIMGRID_UTIL_HTPP +#define SIMGRID_UTIL_HTPP + +#include + +namespace simgrid { +namespace util { + +/** Find a pointer to a value stores in a map (or nullptr) */ +template +inline +typename C::mapped_type* find_map_ptr(C& c, K const& k) +{ + typename C::iterator i = c.find(k); + if (i == c.end()) + return nullptr; + else + return &i->second; +} + +template +inline +typename C::mapped_type const* find_map_ptr(C const& c, K const& k) +{ + typename C::const_iterator i = c.find(k); + if (i == c.end()) + return nullptr; + else + return &i->second; +} + +} +} + +#endif