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

Private GIT Repository
Define class for message queue.
[loba.git] / process.h
index 24d4c395668b2d4209abaf6ddc5b4ebf8c315aa0..38a6c42d8e24b9cf3621a9bf299ca98dbe4dd4f4 100644 (file)
--- a/process.h
+++ b/process.h
@@ -4,7 +4,8 @@
 #define USE_UNORDERED_MAP 1
 //#undef USE_UNORDERED_MAP
 
 #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
 #ifdef USE_UNORDERED_MAP
 #  include <tr1/unordered_map>
 #  define MAP_TEMPLATE std::tr1::unordered_map
 #  include <map>
 #  define MAP_TEMPLATE std::map
 #endif
 #  include <map>
 #  define MAP_TEMPLATE std::map
 #endif
+#include <vector>
 #include <msg/msg.h>
 #include <xbt/log.h>
 #include "communicator.h"
 #include <msg/msg.h>
 #include <xbt/log.h>
 #include "communicator.h"
+#include "misc.h"
 #include "neighbor.h"
 #include "options.h"
 
 #include "neighbor.h"
 #include "options.h"
 
@@ -39,6 +42,9 @@ protected:
     pneigh_type pneigh;         // list of pointers to neighbors that
                                 // we are free to reorder
 
     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;
     // Get and set current load, which may be real load, or expected
     // load if opt::bookkeeping is true.
     double get_load() const;
@@ -131,6 +137,18 @@ void process::set_load(double load)
         real_load = load;
 }
 
         real_load = 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
 
 // Local variables:
 #endif // !PROCESS_H
 
 // Local variables: