From: Chris C. <ca...@al...> - 2002-04-16 18:12:49
|
Richard Bown wrote: > rosegardenguidoc.cpp::convertToSinglePoint() > > C & G you might want to have a look at this to make sure it's doing > everything right. Well, it doesn't look terribly efficient, but I'm not sure I want to get into that at the moment -- it's probably okay in real-world circumstances. As for the detail, I'd say there were a couple of things you'd be well advised to do differently: -- I suggest you don't use the MatrixHelper methods to add and remove events, but simply use Segment::insert and Segment::eraseSingle. And then _after_ all the work on notes is done, call Segment::normalizeRests on the whole segment to fix up the rests. This also means you could (and should) lose all the calls to Segment::fillWithRests in the method that actually builds up the recording segment. (Take a look at MidiFile.cpp, we're doing a similar thing there these days.) -- It's generally dangerous to erase things from a segment while iterating over it, because erasing will invalidate the iterator. I presume it works for you, but I'm slightly surprised that it should because I'd have thought deleting *it would cause trouble; maybe the immediate insert happens in the same place by coincidence, or something. You should be able to delete *oIt ithout problems though. My generally paranoid approach has been to build up a vector of iterators to erase and a vector of events to insert and then erase and insert them all in a single-minded loop at the end. (grep for "toErase" or "toInsert".) Guillaume may have more reasonable suggestions. > Lots of annoying work at the moment trying to fix stuff that's kind of > gone off all for not much measurable gain. Yeah, we seem to have gone a bit sour on quality lately. We'd probably benefit from forgetting about new features for a week or so and concentrating on getting the ones we have working correctly -- I'm certainly going to try to work up the discipline to do that myself. Chris |