protected void hostLeft(NetID id) {
    this.checkTimeProgress();

    if (hostsSeen.contains(id)) {

      MessageCategory[] cats = MessageCategory.values();

      for (int i = 0; i < cats.length; i++) {
        Map<NetID, Integer> catMap = catMsgs.get(cats[i]);

        if (catMap.containsKey(id)) {
          catMap.remove(id);
          this.removeHost(id);
        }
      }
    }
  }
  protected void hostSeen(NetID id) {
    this.checkTimeProgress();

    if (!hostsSeen.contains(id)) {

      MessageCategory[] cats = MessageCategory.values();

      for (int i = 0; i < cats.length; i++) {
        Map<NetID, Integer> catMap = catMsgs.get(cats[i]);

        if (!catMap.containsKey(id)) {
          catMap.put(id, 0);
          this.addHostOrUpdateAll(id, newEmptyValueArray());
        }
      }
    }
  }
 protected void declareDistributions() {
   MessageCategory[] array = MessageCategory.values();
   for (int i = 0; i < array.length; i++) addDistribution(array[i].toString());
 }
 static {
   MessageCategory[] array = MessageCategory.values();
   for (int i = 0; i < array.length; i++) categoryPositions.put(array[i], i);
 }
 protected void resetCatMsgs() {
   catMsgs = new HashMap<MessageCategory, Map<NetID, Integer>>();
   MessageCategory[] array = MessageCategory.values();
   for (int i = 0; i < array.length; i++) catMsgs.put(array[i], new HashMap<NetID, Integer>());
 }
 static long[] newEmptyValueArray() {
   int length = MessageCategory.values().length;
   long[] result = new long[length];
   for (int i = 0; i < length; i++) result[i] = 0;
   return result;
 }