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

Private GIT Repository
Update .gitignore.
[loba.git] / process.h
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