#ifndef NEIGHBOR_H
#define NEIGHBOR_H
-#include <limits>
-#include <string>
+#include <utility>
+#include <xbt/log.h>
+#include "hostdata.h"
class neighbor {
public:
- neighbor(const char* const name_)
- : name(name_)
- , load(std::numeric_limits<double>::infinity()) {
- }
- const std::string& getName() const { return name; }
- double getLoad() const { return load; }
- void setLoad(double l) { load = l; }
+ neighbor(const char* hostname);
+ ~neighbor();
+
+ // returns name, ctrl or data mbox
+ const char* get_name() const { return host->get_name(); }
+ const char* get_ctrl_mbox() const { return host->get_ctrl_mbox(); }
+ const char* get_data_mbox() const { return host->get_data_mbox(); }
+
+ // Getter and setter for load
+ double get_load() const { return load; }
+ void set_load(double amount) { load = amount; }
+
+ // Getter and setter for debt
+ double get_debt() const { return debt; }
+ void set_debt(double amount) { debt = amount; }
+
+ // Getter and setter for credit
+ double get_credit() const { return credit; }
+ void set_credit(double amount) { credit = amount; }
+
+ // Getter and setter for to_send
+ double get_to_send() const { return to_send; }
+ void set_to_send(double amount) { to_send = amount; }
+
+ // Prints its name and load on given category, with given
+ // priority. If verbose is true, prints debt and to_send too.
+ void print(bool verbose = false,
+ e_xbt_log_priority_t logp = xbt_log_priority_info,
+ xbt_log_category_t cat = _XBT_LOGV(default)) const;
private:
- std::string name;
- double load;
+ const hostdata* host; // pointer to this neighbor's hostdata
+
+ double load; // the load information we know for it
+ double debt; // the load we had to send to it, but
+ // that we have not currently sent
+ // (bookkeeping mode)
+ double credit; // the load we have to receive from it
+ // (bookkeeping mode)
+
+ double to_send; // the load we have to send to it
};
#endif // !NEIGHBOR_H