See

<project-file type=“source”/> <content> #include “node.h” #include <simprocess.h> #include <genrand2.h> #include <iostream>

Node::Node(SimID nodeid, bool has_immunity)

  : SimEMIndividual(nodeid, has_immunity?new SimInfectionHistory():NULL)

{

Infected = false;

}

Node::~Node() { }

bool Node::isNeighbor(Node *node) const {

int n = Links.size(), i;
for (i = 0; i < n && Links[i]->neighbor() != node; i++);
return (i < n);

}

void Node::link(Node *node, float current_time, double contact_rate) {

  if (node == NULL || isNeighbor(node) || node == this) return;
  Link *link = new Link(node, contact_rate);
  Links.push_back(link);
  schedule(link);
link->updateEvent(current_time);
  link->neighbor()->checkLink(this, current_time);

}

void Node::unlink(Node *node) {

int n = Links.size(), i;
for (i = 0; i < n && Links[i]->neighbor() != node; i++);
if (i < n) { 
	delete Links[i];
	Links[i] = Links[n - 1];
	Links.pop_back();
}

}

void Node::reset() {

int n = Infections.size(), i;
  for (i = 0; i < n; i++) delete Infections[i];
  Infections.clear();
  if (ImmuneSystem != NULL) {
      delete ImmuneSystem;
      ImmuneSystem = new SimInfectionHistory();
  }
n = Links.size();
for (i = 0; i < n; i++) Links[i]->updateEvent(SIM_INFINITY);
Infected = false;

}

void Node::checkLink(Node *node, float CurrentTime) {

int n = Links.size(), i;
  for (i = 0; i < n && Links[i]->neighbor() != node; i++);
  // only wake up if the link is not scheduled
if (i < n) Links[i]->updateEvent(CurrentTime);

}

void Node::infectionStateChanged(float CurrentTime, SimInfectionState *State) {

SimEMIndividual::infectionStateChanged(CurrentTime, State);
if (infectious() && ! Infected) Infected = true;
int n = Links.size();
Link *link;
for (int i = 0; i < n; i++) {
	link = Links[i];
	link->updateEvent(CurrentTime);
	link->neighbor()->checkLink(this, CurrentTime);
}

} </content> <use name=“node.h”/>