Simplify IsAtEnd logic. (I forgot to mention that these iterators have a one time O(log n) cost to construct.)
This commit is contained in:
@@ -917,6 +917,8 @@ void NoteData::_all_tracks_iterator<ND, iter, TN>::Find()
|
||||
{
|
||||
int iMinRow = m_iEndRow+1;
|
||||
|
||||
// If no notes can be found in the range, m_iTrack will stay -1 and IsAtEnd() will return true.
|
||||
m_iTrack = -1;
|
||||
for( int iTrack = 0; iTrack < m_NoteData.GetNumTracks(); ++iTrack )
|
||||
{
|
||||
iter &i = m_vIters[iTrack];
|
||||
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
_all_tracks_iterator operator++( int dummy ); // postincrement
|
||||
inline int Track() const { return m_iTrack; }
|
||||
inline int Row() const { return m_vIters[m_iTrack]->first; }
|
||||
inline bool IsAtEnd() const { return m_vIters[m_iTrack] == m_NoteData.end( m_iTrack ) || Row() > m_iEndRow; }
|
||||
inline bool IsAtEnd() const { return m_iTrack == -1; }
|
||||
inline TN &operator*() { DEBUG_ASSERT( !IsAtEnd() ); return m_vIters[m_iTrack]->second; }
|
||||
inline TN *operator->() { DEBUG_ASSERT( !IsAtEnd() ); return &m_vIters[m_iTrack]->second; }
|
||||
inline const TN &operator*() const { DEBUG_ASSERT( !IsAtEnd() ); return m_vIters[m_iTrack]->second; }
|
||||
|
||||
Reference in New Issue
Block a user