simplify SetTimeSignatureAtRow, should fix crashes

This commit is contained in:
AJ Kelly
2011-03-16 17:02:10 -05:00
parent 6a0fc6720c
commit 7f4815db37
+10 -20
View File
@@ -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<m_TickcountSegments.size(); i++ )
if( m_TickcountSegments[i].m_iStartRow >= iRow )
break;
if( i == m_TickcountSegments.size() || m_TickcountSegments[i].m_iStartRow != iRow )
{
// No TickcountSegment here. Make a new segment if required.