diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index 3a695d0dce..55f6e987ed 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -127,15 +127,19 @@ void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, CString sSMNoteData out.Convert2sAnd3sToHoldNotes(); } -CString NoteDataUtil::GetSMNoteDataString(NoteData &in) +void NoteDataUtil::GetSMNoteDataString( const NoteData &in_, CString &out ) { - in.ConvertHoldNotesTo2sAnd3s(); + NoteData in; + in_.Get2sAnd3s( in ); float fLastBeat = in.GetLastBeat(); int iLastMeasure = int( fLastBeat/BEATS_PER_MEASURE ); - CString sRet = "\n"; /* data begins on a new line when written to disk */ + CString &sRet = out; + sRet = "\n"; /* data begins on a new line when written to disk */ + sRet.reserve( 1024*32 ); + for( int m=0; m<=iLastMeasure; m++ ) // foreach measure { NoteType nt = GetSmallestNoteTypeForMeasure( in, m ); @@ -170,10 +174,6 @@ CString NoteDataUtil::GetSMNoteDataString(NoteData &in) sRet.append(1, ','); } - - in.Convert2sAnd3sToHoldNotes(); - - return sRet; } float NoteDataUtil::GetRadarValue( const NoteData &in, RadarCategory rv, float fSongSeconds ) diff --git a/stepmania/src/NoteDataUtil.h b/stepmania/src/NoteDataUtil.h index 65ebca5c14..e6f73c2a5e 100644 --- a/stepmania/src/NoteDataUtil.h +++ b/stepmania/src/NoteDataUtil.h @@ -28,7 +28,7 @@ namespace NoteDataUtil { NoteType GetSmallestNoteTypeForMeasure( const NoteData &n, int iMeasureIndex ); void LoadFromSMNoteDataString( NoteData &out, CString sSMNoteData ); - CString GetSMNoteDataString(NoteData &in); + void GetSMNoteDataString( const NoteData &in, CString &out ); float GetStreamRadarValue( const NoteData &in, float fSongSeconds ); float GetVoltageRadarValue( const NoteData &in, float fSongSeconds ); diff --git a/stepmania/src/Steps.cpp b/stepmania/src/Steps.cpp index ce2ec8523f..d9a5e1c13c 100644 --- a/stepmania/src/Steps.cpp +++ b/stepmania/src/Steps.cpp @@ -101,7 +101,8 @@ CString Steps::GetSMNoteData() const if(!notes_comp) { if(!notes) return ""; /* no data is no data */ - notes_comp = new CString(NoteDataUtil::GetSMNoteDataString(*notes)); + notes_comp = new CString; + NoteDataUtil::GetSMNoteDataString( *notes, *notes_comp ); } return *notes_comp; @@ -195,7 +196,8 @@ void Steps::Compress() const if(!notes_comp) { if(!notes) return; /* no data is no data */ - notes_comp = new CString(NoteDataUtil::GetSMNoteDataString(*notes)); + notes_comp = new CString; + NoteDataUtil::GetSMNoteDataString( *notes, *notes_comp ); } delete notes;