]> AND Private Git Repository - loba.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Define process::pneigh_sort_by_load().
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 7 Feb 2011 09:58:35 +0000 (10:58 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 7 Feb 2011 10:29:22 +0000 (11:29 +0100)
loba_fairstrategy.cpp
loba_makhoul.cpp
process.h

index 552f060bd0315dedc795b3049ee1abe4c096c05c..5530f5a5be94a2a6d989fefa50a17d733b464bff 100644 (file)
@@ -1,4 +1,3 @@
-#include <algorithm>
 #include <xbt/log.h>
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
@@ -9,7 +8,7 @@ void loba_fairstrategy::load_balance()
 {
     const double delta = 0.001;
 
-    std::sort(pneigh.begin(), pneigh.end(), pneigh_load_greater());
+    pneigh_sort_by_load(std::greater<double>());
 
     print_loads_p(false, xbt_log_priority_debug);
 
index 7309e6c52beccc33572a1b0c744ea798cf84ac7b..bbf855f7c34e9f25a20ed56a65da5528b0a3f7c0 100644 (file)
@@ -1,4 +1,3 @@
-#include <algorithm>
 #include <xbt/log.h>
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
@@ -7,7 +6,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
 
 void loba_makhoul::load_balance()
 {
-    std::sort(pneigh.begin(), pneigh.end(), pneigh_load_less());
+    pneigh_sort_by_load(std::less<double>());
 
     print_loads_p(false, xbt_log_priority_debug);
 
index 152f5ed1c5e45a02f413e08394e93ee602bcde2c..38a6c42d8e24b9cf3621a9bf299ca98dbe4dd4f4 100644 (file)
--- a/process.h
+++ b/process.h
@@ -4,7 +4,8 @@
 #define USE_UNORDERED_MAP 1
 //#undef USE_UNORDERED_MAP
 
-#include <vector>
+#include <algorithm>
+#include <tr1/functional>
 #ifdef USE_UNORDERED_MAP
 #  include <tr1/unordered_map>
 #  define MAP_TEMPLATE std::tr1::unordered_map
@@ -12,6 +13,7 @@
 #  include <map>
 #  define MAP_TEMPLATE std::map
 #endif
+#include <vector>
 #include <msg/msg.h>
 #include <xbt/log.h>
 #include "communicator.h"
@@ -40,6 +42,9 @@ protected:
     pneigh_type pneigh;         // list of pointers to neighbors that
                                 // we are free to reorder
 
+    template <typename Compare>
+    void pneigh_sort_by_load(const Compare& comp);
+
     // Get and set current load, which may be real load, or expected
     // load if opt::bookkeeping is true.
     double get_load() const;
@@ -132,19 +137,17 @@ void process::set_load(double load)
         real_load = load;
 }
 
-struct pneigh_load_less {
-    bool operator()(const neighbor* a, const neighbor* b)
-    {
-        return a->get_load() < b->get_load();
-    }
-};
-
-struct pneigh_load_greater {
-    bool operator()(const neighbor* a, const neighbor* b)
-    {
-        return a->get_load() > b->get_load();
-    }
-};
+template <typename Compare>
+void process::pneigh_sort_by_load(const Compare& comp)
+{
+    using std::tr1::bind;
+    using std::tr1::placeholders::_1;
+    using std::tr1::placeholders::_2;
+    std::sort(pneigh.begin(), pneigh.end(),
+              bind(comp,
+                   bind(&neighbor::get_load, _1),
+                   bind(&neighbor::get_load, _2)));
+}
 
 #endif // !PROCESS_H