diff Agent.cpp @ 16:33d0b18b2509

Allocate Agents separately on the heap and make AgentList contain pointers only (much quicker)
author Chris Cannam
date Wed, 12 Oct 2011 17:01:57 +0100
parents 887c629502a9
children 55969570044e
line wrap: on
line diff
--- a/Agent.cpp	Wed Oct 12 10:55:52 2011 +0100
+++ b/Agent.cpp	Wed Oct 12 17:01:57 2011 +0100
@@ -81,11 +81,13 @@
         std::cerr << "Ag#" << idNumber << ": time " << e.time << ", err " << err << " for beats " << beats << std::endl;
 #endif
 	if ((beats > 0) && (-preMargin <= err) && (err <= postMargin)) {
-	    if (fabs(err) > innerMargin) {	// Create new agent that skips this
+	    if (fabs(err) > innerMargin) {
 #ifdef DEBUG_BEATROOT
                 std::cerr << "Ag#" << idNumber << ": creating another new agent" << std::endl;
 #endif
-		a.add(clone());	//  event (avoids large phase jump)
+                // Create new agent that skips this event (avoids
+                // large phase jump)
+		a.add(clone());
             }
 	    accept(e, err, (int)beats);
 	    return true;
@@ -102,9 +104,11 @@
         EventList::iterator ni = ei;
 	prevBeat = (++ni)->time;
     }
-    for ( ; ei != events.end(); ) {
+    while (ei != events.end()) {
         EventList::iterator ni = ei;
-	nextBeat = (++ni)->time;
+        ++ni;
+        if (ni == events.end()) break;
+	nextBeat = ni->time;
 	beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow
 	currentInterval = (nextBeat - prevBeat) / beats;
 	for ( ; (nextBeat > start) && (beats > 1.5); beats--) {