diff Agent.cpp @ 9:4f6626f9ffac

Many fixes. This now compiles and passes the plugin tester, but I don't expect it produces any results yet.
author Chris Cannam
date Fri, 30 Sep 2011 15:39:17 +0100
parents f04f87b5e643
children 59520cd6abac
line wrap: on
line diff
--- a/Agent.cpp	Fri Sep 30 11:37:25 2011 +0100
+++ b/Agent.cpp	Fri Sep 30 15:39:17 2011 +0100
@@ -27,7 +27,6 @@
 int Agent::idCounter = 0;
 
 double Agent::innerMargin = 0.0;
-double Agent::outerMargin = 0.0;
 double Agent::correctionFactor = 0.0;
 double Agent::expiryTime = 0.0;
 double Agent::decayFactor = 0.0;
@@ -38,7 +37,9 @@
 	accept(e, 0, 1);
 	return true;
     } else {			// subsequent events
-	if (e.time - events.l.getLast().keyDown > expiryTime) {
+        EventList::iterator last = events.end();
+        --last;
+	if (e.time - last->time > expiryTime) {
 	    phaseScore = -1.0;	// flag agent to be deleted
 	    return false;
 	}
@@ -46,7 +47,7 @@
 	err = e.time - beatTime - beats * beatInterval;
 	if ((beats > 0) && (-preMargin <= err) && (err <= postMargin)) {
 	    if (fabs(err) > innerMargin)	// Create new agent that skips this
-		a.push_back(Agent(*this));	//  event (avoids large phase jump)
+		a.add(Agent(*this));	//  event (avoids large phase jump)
 	    accept(e, err, (int)beats);
 	    return true;
 	}
@@ -55,24 +56,24 @@
 } // considerAsBeat()
 
 
-void fillBeats(double start) {
+void Agent::fillBeats(double start) {
     double prevBeat = 0, nextBeat, currentInterval, beats;
-    EventList::iterator list = events.begin();
-    if (list != events.end()) {
-	++list;
-	prevBeat = list->time;
-	--list;
+    EventList::iterator ei = events.begin();
+    if (ei != events.end()) {
+	++ei;
+	prevBeat = ei->time;
+	--ei;
     }
-    for ( ; list != events.end(); ++list) {
-	++list;
-	nextBeat = list->time;
-	--list;
+    for ( ; ei != events.end(); ++ei) {
+	++ei;
+	nextBeat = ei->time;
+	--ei; // so as to insert before nextBeat
 	beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow
 	currentInterval = (nextBeat - prevBeat) / beats;
 	for ( ; (nextBeat > start) && (beats > 1.5); beats--) {
 	    prevBeat += currentInterval;
-	    //!!! need to insert this event after current itr
-	    list.add(BeatTracker::newBeat(prevBeat, 0));	// more than once OK??
+            events.insert(ei, BeatTracker::newBeat(prevBeat, 0));
+            ++ei;
 	}
 	prevBeat = nextBeat;
     }