[Avida-cvs] [Avida2-svn] r152 - trunk/source/tools
kaben at myxo.css.msu.edu
kaben at myxo.css.msu.edu
Fri Apr 15 04:10:37 PDT 2005
Author: kaben
Date: 2005-04-15 07:10:37 -0400 (Fri, 15 Apr 2005)
New Revision: 152
Added:
trunk/source/tools/change_list.cc
Log:
* Added missing file.
Added: trunk/source/tools/change_list.cc
===================================================================
--- trunk/source/tools/change_list.cc 2005-04-15 11:01:10 UTC (rev 151)
+++ trunk/source/tools/change_list.cc 2005-04-15 11:10:37 UTC (rev 152)
@@ -0,0 +1,72 @@
+//////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 1993 - 2005 California Institute of Technology //
+// //
+// Read the COPYING and README files, or contact 'avida at alife.org', //
+// before continuing. SOME RESTRICTIONS MAY APPLY TO USE OF THIS FILE. //
+//////////////////////////////////////////////////////////////////////////////
+
+#include "change_list.hh"
+
+
+void cChangeList::ResizeClear(int capacity){
+ m_change_list.ResizeClear(capacity);
+ m_change_tracking.ResizeClear(capacity);
+ m_change_list.SetAll(0);
+ m_change_tracking.SetAll(false);
+ m_change_count = 0;
+}
+
+cChangeList::cChangeList(int capacity)
+: m_change_list(0)
+, m_change_tracking(0)
+, m_change_count(0)
+{ ResizeClear(capacity); }
+
+int cChangeList::GetSize() const { return m_change_list.GetSize(); }
+
+int cChangeList::GetChangeCount() const { return m_change_count; }
+
+// Note that decreasing size invalidates stored changes.
+void cChangeList::Resize(int capacity) {
+ if (capacity < m_change_list.GetSize()){
+ ResizeClear(capacity);
+ } else {
+ m_change_list.Resize(capacity);
+ m_change_tracking.Resize(capacity, false);
+ }
+}
+
+// Unsafe version : assumes index is within change count.
+int cChangeList::GetChangeAt(int index) const {
+ return m_change_list[index];
+}
+
+// Safe version : returns -1 if index is outside change count.
+int cChangeList::CheckChangeAt(int index) const {
+ return (index < m_change_count) ? ((int) GetChangeAt(index)) : (-1);
+}
+
+// Unsafe version : assumes changed_index is within capacity.
+void cChangeList::MarkChange(int changed_index) {
+ if (!m_change_tracking[changed_index]) {
+ m_change_tracking[changed_index] = true;
+ m_change_list[m_change_count] = changed_index;
+ m_change_count++;
+ }
+}
+
+// Safe version : will resize to accommodate changed_index greater
+// than capacity.
+void cChangeList::PushChange(int changed_index) {
+ if (m_change_list.GetSize() <= changed_index) {
+ Resize(changed_index + 1);
+ }
+ MarkChange(changed_index);
+}
+
+void cChangeList::Reset() {
+ for (int i = 0; i < m_change_count; i++) {
+ m_change_tracking[m_change_list[i]] = false;
+ }
+ m_change_count = 0;
+}
More information about the Avida-cvs
mailing list