#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
# include <map>
# define MAP_TEMPLATE std::map
#endif
+#include <vector>
#include <msg/msg.h>
#include <xbt/log.h>
#include "communicator.h"
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;
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