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;
|
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 )
|
for( int iTrack = 0; iTrack < m_NoteData.GetNumTracks(); ++iTrack )
|
||||||
{
|
{
|
||||||
iter &i = m_vIters[iTrack];
|
iter &i = m_vIters[iTrack];
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public:
|
|||||||
_all_tracks_iterator operator++( int dummy ); // postincrement
|
_all_tracks_iterator operator++( int dummy ); // postincrement
|
||||||
inline int Track() const { return m_iTrack; }
|
inline int Track() const { return m_iTrack; }
|
||||||
inline int Row() const { return m_vIters[m_iTrack]->first; }
|
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 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; }
|
inline const TN &operator*() const { DEBUG_ASSERT( !IsAtEnd() ); return m_vIters[m_iTrack]->second; }
|
||||||
|
|||||||
Reference in New Issue
Block a user