[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