From 7f4815db379a567fc6f4e4d12c65c7c0542bf55c Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 16 Mar 2011 17:02:10 -0500 Subject: [PATCH] simplify SetTimeSignatureAtRow, should fix crashes --- src/TimingData.cpp | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 274858179f..64289ac230 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -111,36 +111,26 @@ void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) void TimingData::SetTimeSignatureAtRow( int iRow, int iNumerator, int iDenominator ) { - LOG->Trace("[TimingData::SetTimeSignatureAtRow] iRow = %i, iNumerator = %i, iDenominator = %i", iRow, iNumerator, iDenominator); - ASSERT_M(iDenominator > 0,ssprintf("Denominator must be greater than 0; iDenominator = %i",iDenominator)); - unsigned i; for( i = 0; i < m_vTimeSignatureSegments.size(); i++ ) { if( m_vTimeSignatureSegments[i].m_iStartRow >= iRow) break; // We found our segment. } - TimeSignatureSegment &ts = m_vTimeSignatureSegments[i]; - TimeSignatureSegment &prev = m_vTimeSignatureSegments[i-1]; - if( i == m_vTimeSignatureSegments.size() || ts.m_iStartRow != iRow ) + + if( i == m_vTimeSignatureSegments.size() ) // there is no TimeSignature Segment at the current beat { - // There is no TimeSignatureSegment at the specified beat. - // If the TimeSignatureSegment being set differs - // from the last TimeSignature, create a new TimeSignatureSegment. - if( i == 0 || ( prev.m_iNumerator != iNumerator || prev.m_iDenominator != iDenominator ) ) - AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) ); + AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) ); } - else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i] + else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i] { - if( i > 0 && prev.m_iNumerator == iNumerator - && prev.m_iDenominator == iDenominator ) - m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i, - m_vTimeSignatureSegments.begin()+i+1 ); - else + if( iNumerator > 0 && iDenominator > 0 ) { - ts.m_iNumerator = iNumerator; - ts.m_iDenominator = iDenominator; + m_vTimeSignatureSegments[i].m_iNumerator = iNumerator; + m_vTimeSignatureSegments[i].m_iDenominator = iDenominator; } + else + m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i, m_vTimeSignatureSegments.begin()+i+1 ); } } @@ -168,7 +158,7 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) for( i=0; i= iRow ) break; - + if( i == m_TickcountSegments.size() || m_TickcountSegments[i].m_iStartRow != iRow ) { // No TickcountSegment here. Make a new segment if required.