+#include "loba_least_loaded.h"
+
+#include <xbt/log.h>
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(loba);
+
+/* simple version:
+ * load balance with a least-loaded neighbor,
+ * without breaking the ping-pong condition
+ */
+double loba_least_loaded::load_balance(double my_load)
+{
+ int imin = -1;
+ int imax = -1;
+ double min = my_load;
+ double max = -1.0;
+ for (unsigned i = 0 ; i < neigh.size() ; ++i) {
+ double l = neigh[i].get_load();
+ if (l >= my_load)
+ continue;
+ if (l < min) {
+ imin = i;
+ min = l;
+ }
+ if (l > max) {
+ imax = i;
+ max = l;
+ }
+ }
+ if (imin != -1) {
+ // found someone
+ double balance = (my_load - max) / 2;
+ DEBUG6("%d:%g %d:%g %g %g", imin, min, imax, max, my_load, balance);
+ neigh[imin].set_to_send(balance);
+ return balance;
+ } else {
+ return 0.0;
+ }
+}
+
+// Local variables:
+// mode: c++
+// End: