From: Christian Heinrich Date: Thu, 28 Jun 2018 09:36:34 +0000 (+0200) Subject: [SMPI] Remove code-generating macro X-Git-Tag: v3_21~613 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6e0df0c4cb4b49fb4b82e8beafa39cd6d475bf9a [SMPI] Remove code-generating macro Using a lambda function, we can achieve the same thing but in a cleaner way --- diff --git a/src/smpi/colls/smpi_coll.cpp b/src/smpi/colls/smpi_coll.cpp index e450b75b81..e167de885c 100644 --- a/src/smpi/colls/smpi_coll.cpp +++ b/src/smpi/colls/smpi_coll.cpp @@ -25,12 +25,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_coll, smpi, "Logging specific to SMPI (coll xbt_die("Collective " #cat " set to nullptr!"); \ } -#define SET_COLL(coll) \ - name = simgrid::config::get_value("smpi/" #coll); \ - if (name.empty()) \ - name = selector_name; \ - set_##coll(name); - namespace simgrid{ namespace smpi{ @@ -99,25 +93,39 @@ COLL_APPLY(COLL_SETTER,COLL_BCAST_SIG,""); COLL_APPLY(COLL_SETTER,COLL_ALLTOALL_SIG,""); COLL_APPLY(COLL_SETTER,COLL_ALLTOALLV_SIG,""); - void Colls::set_collectives(){ std::string selector_name = simgrid::config::get_value("smpi/coll-selector"); if (selector_name.empty()) selector_name = "default"; - std::string name; - - SET_COLL(gather); - SET_COLL(allgather); - SET_COLL(allgatherv); - SET_COLL(allreduce); - SET_COLL(alltoall); - SET_COLL(alltoallv); - SET_COLL(reduce); - SET_COLL(reduce_scatter); - SET_COLL(scatter); - SET_COLL(bcast); - SET_COLL(barrier); + std::map> setter_callbacks = { + {"gather", &Colls::set_gather}, {"allgather", &Colls::set_allgather}, + {"allgatherv", &Colls::set_allgatherv}, {"allreduce", &Colls::set_allreduce}, + {"alltoall", &Colls::set_alltoall}, {"alltoallv", &Colls::set_alltoallv}, + {"reduce", &Colls::set_reduce}, {"reduce_scatter", &Colls::set_reduce_scatter}, + {"scatter", &Colls::set_scatter}, {"bcast", &Colls::set_bcast}, + {"barrier", &Colls::set_barrier}}; + + // This only prevents code duplication + std::function setup = [selector_name, &setter_callbacks](std::string coll) { + std::string name = simgrid::config::get_value(("smpi/" + coll).c_str()); + if (name.empty()) + name = selector_name; + + setter_callbacks[coll](name); + }; + + setup("gather"); + setup("allgather"); + setup("allgatherv"); + setup("allreduce"); + setup("alltoall"); + setup("alltoallv"); + setup("reduce"); + setup("reduce_scatter"); + setup("scatter"); + setup("bcast"); + setup("barrier"); }