Simplify. Remove the condition from the iterator. Almost nothing uses it (although other things could), it seems more trouble than it's worth.
This commit is contained in:
@@ -925,18 +925,7 @@ void NoteData::_all_tracks_iterator<ND, iter, TN>::Find( bool bReverse )
|
|||||||
for( int iTrack = m_pNoteData->GetNumTracks() - 1; iTrack >= 0; --iTrack )
|
for( int iTrack = m_pNoteData->GetNumTracks() - 1; iTrack >= 0; --iTrack )
|
||||||
{
|
{
|
||||||
iter &i( m_vCurrentIters[iTrack] );
|
iter &i( m_vCurrentIters[iTrack] );
|
||||||
const iter &begin = m_vBeginIters[iTrack];
|
|
||||||
const iter &end = m_vEndIters[iTrack];
|
const iter &end = m_vEndIters[iTrack];
|
||||||
if( m_Cond )
|
|
||||||
{
|
|
||||||
while( i != end && i->first > iMaxRow && !m_Cond(i->second) )
|
|
||||||
{
|
|
||||||
if( i == begin )
|
|
||||||
i = end;
|
|
||||||
else
|
|
||||||
--i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( i != end && i->first > iMaxRow )
|
if( i != end && i->first > iMaxRow )
|
||||||
{
|
{
|
||||||
iMaxRow = i->first;
|
iMaxRow = i->first;
|
||||||
@@ -952,11 +941,6 @@ void NoteData::_all_tracks_iterator<ND, iter, TN>::Find( bool bReverse )
|
|||||||
{
|
{
|
||||||
iter &i = m_vCurrentIters[iTrack];
|
iter &i = m_vCurrentIters[iTrack];
|
||||||
const iter &end = m_vEndIters[iTrack];
|
const iter &end = m_vEndIters[iTrack];
|
||||||
if( m_Cond )
|
|
||||||
{
|
|
||||||
while( i != end && i->first < iMinRow && !m_Cond(i->second) )
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
if( i != end && i->first < iMinRow )
|
if( i != end && i->first < iMinRow )
|
||||||
{
|
{
|
||||||
iMinRow = i->first;
|
iMinRow = i->first;
|
||||||
@@ -967,8 +951,8 @@ void NoteData::_all_tracks_iterator<ND, iter, TN>::Find( bool bReverse )
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename ND, typename iter, typename TN>
|
template<typename ND, typename iter, typename TN>
|
||||||
NoteData::_all_tracks_iterator<ND, iter, TN>::_all_tracks_iterator( ND &nd, int iStartRow, int iEndRow, bool bReverse, NoteData::IteratorCond cond, bool bInclusive ) :
|
NoteData::_all_tracks_iterator<ND, iter, TN>::_all_tracks_iterator( ND &nd, int iStartRow, int iEndRow, bool bReverse, bool bInclusive ) :
|
||||||
m_pNoteData(&nd), m_iTrack(0), m_bReverse(bReverse), m_Cond(cond)
|
m_pNoteData(&nd), m_iTrack(0), m_bReverse(bReverse)
|
||||||
{
|
{
|
||||||
ASSERT( m_pNoteData->GetNumTracks() > 0 );
|
ASSERT( m_pNoteData->GetNumTracks() > 0 );
|
||||||
|
|
||||||
@@ -1006,7 +990,6 @@ NoteData::_all_tracks_iterator<ND, iter, TN>::_all_tracks_iterator( const _all_t
|
|||||||
COPY_OTHER( m_pNoteData ),
|
COPY_OTHER( m_pNoteData ),
|
||||||
COPY_OTHER( m_iTrack ),
|
COPY_OTHER( m_iTrack ),
|
||||||
COPY_OTHER( m_bReverse ),
|
COPY_OTHER( m_bReverse ),
|
||||||
COPY_OTHER( m_Cond ),
|
|
||||||
COPY_OTHER( m_vBeginIters ),
|
COPY_OTHER( m_vBeginIters ),
|
||||||
COPY_OTHER( m_vEndIters ),
|
COPY_OTHER( m_vEndIters ),
|
||||||
COPY_OTHER( m_vCurrentIters )
|
COPY_OTHER( m_vCurrentIters )
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ public:
|
|||||||
void swap( NoteData &nd ) { m_TapNotes.swap( nd.m_TapNotes ); }
|
void swap( NoteData &nd ) { m_TapNotes.swap( nd.m_TapNotes ); }
|
||||||
|
|
||||||
|
|
||||||
typedef bool (*IteratorCond)( const TapNote& );
|
|
||||||
// This is ugly to make it templated but I don't want to have to write the same class twice.
|
// This is ugly to make it templated but I don't want to have to write the same class twice.
|
||||||
template<typename ND, typename iter, typename TN>
|
template<typename ND, typename iter, typename TN>
|
||||||
class _all_tracks_iterator
|
class _all_tracks_iterator
|
||||||
@@ -58,11 +57,10 @@ public:
|
|||||||
vector<iter> m_vEndIters;
|
vector<iter> m_vEndIters;
|
||||||
int m_iTrack;
|
int m_iTrack;
|
||||||
bool m_bReverse;
|
bool m_bReverse;
|
||||||
IteratorCond m_Cond;
|
|
||||||
|
|
||||||
void Find( bool bReverse );
|
void Find( bool bReverse );
|
||||||
public:
|
public:
|
||||||
_all_tracks_iterator( ND &nd, int iStartRow, int iEndRow, bool bReverse, IteratorCond cond, bool bInclusive );
|
_all_tracks_iterator( ND &nd, int iStartRow, int iEndRow, bool bReverse, bool bInclusive );
|
||||||
_all_tracks_iterator( const _all_tracks_iterator &other );
|
_all_tracks_iterator( const _all_tracks_iterator &other );
|
||||||
_all_tracks_iterator &operator++(); // preincrement
|
_all_tracks_iterator &operator++(); // preincrement
|
||||||
_all_tracks_iterator operator++( int dummy ); // postincrement
|
_all_tracks_iterator operator++( int dummy ); // postincrement
|
||||||
@@ -115,21 +113,21 @@ public:
|
|||||||
/* Return an iterator range including exactly iStartRow to iEndRow. */
|
/* Return an iterator range including exactly iStartRow to iEndRow. */
|
||||||
void GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, const_iterator &begin, const_iterator &end ) const;
|
void GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, const_iterator &begin, const_iterator &end ) const;
|
||||||
void GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end );
|
void GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end );
|
||||||
all_tracks_iterator GetTapNoteRangeAllTracks( int iStartRow, int iEndRow, IteratorCond cond = NULL, bool bInclusive = false )
|
all_tracks_iterator GetTapNoteRangeAllTracks( int iStartRow, int iEndRow, bool bInclusive = false )
|
||||||
{
|
{
|
||||||
return all_tracks_iterator( *this, iStartRow, iEndRow, false, cond, bInclusive );
|
return all_tracks_iterator( *this, iStartRow, iEndRow, false, bInclusive );
|
||||||
}
|
}
|
||||||
all_tracks_const_iterator GetTapNoteRangeAllTracks( int iStartRow, int iEndRow, IteratorCond cond = NULL, bool bInclusive = false ) const
|
all_tracks_const_iterator GetTapNoteRangeAllTracks( int iStartRow, int iEndRow, bool bInclusive = false ) const
|
||||||
{
|
{
|
||||||
return all_tracks_const_iterator( *this, iStartRow, iEndRow, false, cond, bInclusive );
|
return all_tracks_const_iterator( *this, iStartRow, iEndRow, false, bInclusive );
|
||||||
}
|
}
|
||||||
all_tracks_reverse_iterator GetTapNoteRangeAllTracksReverse( int iStartRow, int iEndRow, IteratorCond cond = NULL, bool bInclusive = false )
|
all_tracks_reverse_iterator GetTapNoteRangeAllTracksReverse( int iStartRow, int iEndRow, bool bInclusive = false )
|
||||||
{
|
{
|
||||||
return all_tracks_iterator(*this, iStartRow, iEndRow, true, cond, bInclusive );
|
return all_tracks_iterator(*this, iStartRow, iEndRow, true, bInclusive );
|
||||||
}
|
}
|
||||||
all_tracks_const_reverse_iterator GetTapNoteRangeAllTracksReverse( int iStartRow, int iEndRow, IteratorCond cond = NULL, bool bInclusive = false ) const
|
all_tracks_const_reverse_iterator GetTapNoteRangeAllTracksReverse( int iStartRow, int iEndRow, bool bInclusive = false ) const
|
||||||
{
|
{
|
||||||
return all_tracks_const_iterator(*this, iStartRow, iEndRow, true, cond, bInclusive );
|
return all_tracks_const_iterator(*this, iStartRow, iEndRow, true, bInclusive );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return an iterator range include iStartRow to iEndRow. Extend the range to include
|
/* Return an iterator range include iStartRow to iEndRow. Extend the range to include
|
||||||
|
|||||||
@@ -62,13 +62,15 @@ int GetNumHoldNotesWithScore( const NoteData &in, TapNote::SubType subType, Hold
|
|||||||
return iNumSuccessfulHolds;
|
return iNumSuccessfulHolds;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvoidedMines( const TapNote &tn ) { return tn.type == TapNote::mine && tn.result.tns == TNS_AvoidMine; }
|
|
||||||
int GetSuccessfulMines( const NoteData &in, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW )
|
int GetSuccessfulMines( const NoteData &in, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW )
|
||||||
{
|
{
|
||||||
int iNumSuccessfulMinesNotes = 0;
|
int iNumSuccessfulMinesNotes = 0;
|
||||||
NoteData::all_tracks_const_iterator iter = in.GetTapNoteRangeAllTracks( iStartIndex, iEndIndex, AvoidedMines );
|
NoteData::all_tracks_const_iterator iter = in.GetTapNoteRangeAllTracks( iStartIndex, iEndIndex );
|
||||||
for( ; !iter.IsAtEnd(); ++iter )
|
for( ; !iter.IsAtEnd(); ++iter )
|
||||||
iNumSuccessfulMinesNotes++;
|
{
|
||||||
|
if( iter->type == TapNote::mine && iter->result.tns == TNS_AvoidMine )
|
||||||
|
++iNumSuccessfulMinesNotes;
|
||||||
|
}
|
||||||
return iNumSuccessfulMinesNotes;
|
return iNumSuccessfulMinesNotes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2397,7 +2397,7 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now )
|
|||||||
int iNumHoldsMissedThisRow = 0;
|
int iNumHoldsMissedThisRow = 0;
|
||||||
|
|
||||||
// start at r-1 so that we consider holds whose end rows are equal to the checkpoint row
|
// start at r-1 so that we consider holds whose end rows are equal to the checkpoint row
|
||||||
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, NULL, true );
|
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( r-1, r, true );
|
||||||
for( ; !iter.IsAtEnd(); ++iter )
|
for( ; !iter.IsAtEnd(); ++iter )
|
||||||
{
|
{
|
||||||
TapNote &tn = *iter;
|
TapNote &tn = *iter;
|
||||||
|
|||||||
Reference in New Issue
Block a user