- if (opt::bookkeeping) {
- double excess_load = real_load - expected_load;
- if (excess_load > 0.0) {
- load_to_send = compute_load_to_send(std::min(excess_load,
- nb.get_debt()));
- if (load_to_send > 0.0)
- nb.set_debt(nb.get_debt() - load_to_send);
- } else
- load_to_send = 0.0;
- } else {
+ if (opt::bookkeeping) { // bookkeeping
+ double excess_load; // load amount we are able to send
+ if (opt::egocentric)
+ excess_load = std::max(0.0, real_load - expected_load);
+ else
+ excess_load = real_load;
+
+ double balance = nb.get_debt() - nb.get_credit();
+ load_to_send = std::min(excess_load,
+ std::max(0.0, balance));
+
+ // adjust load to send (rounding, truncation, etc.)
+ load_to_send = compute_load_to_send(load_to_send);
+ if (load_to_send > 0.0)
+ nb.set_debt(nb.get_debt() - load_to_send);
+ } else { // !bookkeeping