From c299a7a4f70b425b5ac963d9d4479255a63d3bac Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Fri, 21 Jul 2006 07:59:41 +0000 Subject: [PATCH] GetTapNoteRangeAllTracks() returns an all_tracks_iterator which can be used to iterate over all of the tracks in all of the rows in the range. Also, you can specify a condition on the notes to be returned. Simplify. --- stepmania/src/NoteData.cpp | 50 ++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index 5488696305..7de9855e98 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -14,6 +14,34 @@ #include "RageUtil_AutoPtr.h" REGISTER_CLASS_TRAITS( NoteData, new NoteData(*pCopy) ) +bool IteratorCondition::TapsHoldsAndMines( const TapNote &tn ) +{ + switch( tn.type ) + { + case TapNote::tap: + case TapNote::hold_head: + case TapNote::mine: + return true; + } + return false; +} + +bool IteratorCondition::TapsAndHolds( const TapNote &tn ) +{ + switch( tn.type ) + { + case TapNote::tap: + case TapNote::hold_head: + return true; + } + return false; +} + +bool IteratorCondition::Mines( const TapNote &tn ) +{ + return tn.type == TapNote::mine; +} + NoteData::NoteData() { Init(); @@ -893,21 +921,17 @@ XNode* NoteData::CreateNode() const { XNode *p = new XNode; p->m_sName = "NoteData"; - - FOREACH_NONEMPTY_ROW_ALL_TRACKS( *this, row ) + + all_tracks_const_iterator iter = GetTapNoteRangeAllTracks( 0, GetLastRow(), IteratorCondition::All ); + + for( ; !iter.IsAtEnd(); ++iter ) { - set s; - GetTapNonEmptyTracks( row, s ); - FOREACHS_CONST( int, s, t ) - { - TapNote tn = this->GetTapNote(*t, row); - XNode *p2 = tn.CreateNode(); - p2->AppendAttr( "Track", *t ); - p2->AppendAttr( "Row", row ); - p->AppendChild( p2 ); - } + XNode *p2 = iter->CreateNode(); + + p2->AppendAttr( "Track", iter.Track() ); + p2->AppendAttr( "Row", iter.Row() ); + p->AppendChild( p2 ); } - return p; }