[Avida-SVN] r2149 - branches/energy/source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Tue Oct 23 07:51:26 PDT 2007


Author: beckma24
Date: 2007-10-23 10:51:25 -0400 (Tue, 23 Oct 2007)
New Revision: 2149

Modified:
   branches/energy/source/main/cDeme.cc
   branches/energy/source/main/cDeme.h
   branches/energy/source/main/cOrgMessagePredicate.h
   branches/energy/source/main/cStats.cc
   branches/energy/source/main/cStats.h
Log:
Bug fix: removed predicates from stats and deme when event expires and is removed

Modified: branches/energy/source/main/cDeme.cc
===================================================================
--- branches/energy/source/main/cDeme.cc	2007-10-23 13:18:30 UTC (rev 2148)
+++ branches/energy/source/main/cDeme.cc	2007-10-23 14:51:25 UTC (rev 2149)
@@ -33,7 +33,7 @@
 
 cDeme::~cDeme() {
 //  delete stuff;
-  for(int i = 0; i < message_pred_list.GetSize(); i++) {
+  for(int i = 0; i < message_pred_list.Size(); i++) {
     delete message_pred_list[i];
   }
 }
@@ -116,17 +116,26 @@
   birth_count = 0; 
   _age = 0;
   deme_resource_count.ReinitializeResources();
-  //reset predicates
-  for(int i = 0; i < message_pred_list.GetSize(); i++) {
-    (*message_pred_list[i]).Reset();
-  }
   
-  //remove old events
+  //remove old events and corresponding predicates
   for(int i = cell_events.Size()-1; i >= 0; i--) {
     if(cell_events[i].GetTimeToLive() < m_world->GetStats().GetUpdate()) {
+      //remove predicates from stats and deme
+      for(int j = 0; j < message_pred_list.Size(); j++) {
+        if(message_pred_list[j]->GetEvent() == &(cell_events[j])) {
+          m_world->GetStats().RemoveMessagePredicate(message_pred_list[j]);
+          message_pred_list.RemoveAt(j);
+          break;
+        }
+      }
       cell_events.RemoveAt(i);
     }
   }
+
+  //reset remaining predicates
+  for(int i = 0; i < message_pred_list.Size(); i++) {
+    (*message_pred_list[i]).Reset();
+  }
   
   for(int i = 0; i < GetSize(); i++) {
     m_world->GetPopulation().GetCell(GetCellID(i)).SetCellData(0);
@@ -224,7 +233,7 @@
 }
 
 bool cDeme::MsgPredSatisfiedPreviously() {
-  for(int i = 0; i < message_pred_list.GetSize(); i++) {
+  for(int i = 0; i < message_pred_list.Size(); i++) {
     if(message_pred_list[i]->PreviouslySatisfied()) {
       message_pred_list[i]->UpdateStats(m_world->GetStats());
       return true;
@@ -242,7 +251,7 @@
     int sink_cell = GetCellID(GetSize()/2);
     cOrgMessagePred_EventReceivedCenter* pred = new cOrgMessagePred_EventReceivedCenter(&cell_events[i], sink_cell, times);
     m_world->GetStats().AddMessagePredicate(pred);
-    message_pred_list.Push(pred);
+    message_pred_list.Add(pred);
   }
 }
 
@@ -254,12 +263,12 @@
   for(int i = 0; i < cell_events.Size(); i++) {
     cOrgMessagePred_EventReceivedLeftSide* pred = new cOrgMessagePred_EventReceivedLeftSide(&cell_events[i], m_world->GetPopulation(), times);
     m_world->GetStats().AddMessagePredicate(pred);
-    message_pred_list.Push(pred);
+    message_pred_list.Add(pred);
   }
 }
 
 int cDeme::GetNumPredicates() {
-  return message_pred_list.GetSize();
+  return message_pred_list.Size();
 }
 
 bool cDeme::PredicatePreviouslySatisfied(int pred_id) {
@@ -267,6 +276,7 @@
 }
 
 cString cDeme::GetPredicateName(int pred_id) {
+  assert(pred_id < message_pred_list.Size());
   return message_pred_list[pred_id]->GetName();
 }
 

Modified: branches/energy/source/main/cDeme.h
===================================================================
--- branches/energy/source/main/cDeme.h	2007-10-23 13:18:30 UTC (rev 2148)
+++ branches/energy/source/main/cDeme.h	2007-10-23 14:51:25 UTC (rev 2149)
@@ -60,7 +60,7 @@
   tArray<int> energy_res_ids; //!< IDs of energy resources
   
   tVector<cDemeCellEvent> cell_events;
-  tArray<cOrgMessagePredicate*> message_pred_list;
+  tVector<cOrgMessagePredicate*> message_pred_list;
   
   std::map<int, cPopulationCell*> cells_blocked_from_sending;
   std::map<int, cPopulationCell*> cells_paused_from_sending;

Modified: branches/energy/source/main/cOrgMessagePredicate.h
===================================================================
--- branches/energy/source/main/cOrgMessagePredicate.h	2007-10-23 13:18:30 UTC (rev 2148)
+++ branches/energy/source/main/cOrgMessagePredicate.h	2007-10-23 14:51:25 UTC (rev 2149)
@@ -48,6 +48,7 @@
   virtual bool PreviouslySatisfied() = 0;
   virtual cString GetName() = 0;
   virtual void UpdateStats(cStats& stats) {}
+  virtual cDemeCellEvent* GetEvent() { return NULL; }
 };
 
 
@@ -213,6 +214,8 @@
     }
   }
   
+  cDemeCellEvent* GetEvent() { return m_event; }
+  
   int m_base_station;
   bool m_event_received;
   bool m_stats_updated;
@@ -294,6 +297,8 @@
     }
   }
   
+  cDemeCellEvent* GetEvent() { return m_event; }
+  
   cPopulation& pop;
   bool m_event_received;
   bool m_stats_updated;

Modified: branches/energy/source/main/cStats.cc
===================================================================
--- branches/energy/source/main/cStats.cc	2007-10-23 13:18:30 UTC (rev 2148)
+++ branches/energy/source/main/cStats.cc	2007-10-23 14:51:25 UTC (rev 2149)
@@ -117,6 +117,13 @@
   , num_used(0)
   , num_own_used(0)
   , sense_size(0)
+  , num_msg_sent_no_one(0)
+  , num_msg_sent(0)
+  , num_radio_busy(0)
+  , num_msg_received(0)
+  , num_msg_retrieved(0)
+  , num_msg_retrieved_incomplete(0)
+  , num_msg_collision(0)
 {
   const cEnvironment& env = m_world->GetEnvironment();
   const int num_tasks = env.GetNumTasks();
@@ -137,6 +144,7 @@
   task_cur_max_quality.SetAll(0);
   task_last_max_quality.SetAll(0);
   task_exe_count.SetAll(0);
+  from_to_message_list.clear();
 
 #if INSTRUCTION_COUNT
   sum_exe_inst_array.Resize(m_world->GetNumInstructions());
@@ -1166,6 +1174,15 @@
   m_message_predicates.push_back(predicate);
 }
 
+void cStats::RemoveMessagePredicate(cOrgMessagePredicate* predicate)
+{
+  for(message_pred_ptr_list::iterator iter = m_message_predicates.begin(); iter != m_message_predicates.end(); iter++) {
+    if((*iter) == predicate) {
+      m_message_predicates.erase(iter);
+      return;
+    }
+  }
+}
 
 /*! This method prints information contained within all active message predicates.
 

Modified: branches/energy/source/main/cStats.h
===================================================================
--- branches/energy/source/main/cStats.h	2007-10-23 13:18:30 UTC (rev 2148)
+++ branches/energy/source/main/cStats.h	2007-10-23 14:51:25 UTC (rev 2149)
@@ -625,16 +625,6 @@
 
   int GetNumSenseSlots();
 
-/*
-  // deme
-  double GetAveDemeAge() const { return sum_deme_age.Average(); }
-  double GetAveDemeBirthCount() const { return sum_deme_birth_count.Average(); }
-  double GetAveDemeOrgCount() const { return sum_deme_org_count.Average(); }
-  
-  // message
-  cIntSum inbox_size;
-*/
-
   // sleep
   int getNumAsleep(int demeID) { return numAsleep[demeID]; }
   void incNumAsleep(int demeID) { numAsleep[demeID]++; }
@@ -694,6 +684,8 @@
   void SentMessage(const cOrgMessage& msg);
   //! Adds a predicate that will be evaluated for each message.
   void AddMessagePredicate(cOrgMessagePredicate* predicate);
+  //! Removes a predicate.
+  void RemoveMessagePredicate(cOrgMessagePredicate* predicate);
   //! Prints information regarding messages that "passed" their predicate.
   void PrintPredicatedMessages(const cString& filename);
 




More information about the Avida-cvs mailing list