Mercurial > hg > beatroot-vamp
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--) {