Extract logic to NoteDataUtil::StringInterpretsAs

This commit is contained in:
Martin Kröning
2020-06-13 23:36:10 +02:00
parent dc25295879
commit 67bce17382
3 changed files with 23 additions and 39 deletions
+11
View File
@@ -11,6 +11,17 @@
#include "TimingData.h" #include "TimingData.h"
#include <utility> #include <utility>
bool NoteDataUtil::StringInterpretsAs( const std::string& str, int integer ) {
try
{
return std::stoi( str ) == integer;
}
catch ( const std::invalid_argument & )
{
return false;
}
}
// TODO: Remove these constants that aren't time signature-aware // TODO: Remove these constants that aren't time signature-aware
static const int BEATS_PER_MEASURE = 4; static const int BEATS_PER_MEASURE = 4;
static const int ROWS_PER_MEASURE = ROWS_PER_BEAT * BEATS_PER_MEASURE; static const int ROWS_PER_MEASURE = ROWS_PER_BEAT * BEATS_PER_MEASURE;
+5
View File
@@ -23,6 +23,11 @@ void LightTransformHelper( const NoteData &in, NoteData &out, const vector<int>
* and makes it much easier to change NoteData internally in the future. */ * and makes it much easier to change NoteData internally in the future. */
namespace NoteDataUtil namespace NoteDataUtil
{ {
/**
* @brief Whether a string can be interpreted as the provided signed integer
*/
bool StringInterpretsAs( const std::string& str, int integer );
NoteType GetSmallestNoteTypeForMeasure( const NoteData &nd, int iMeasureIndex ); NoteType GetSmallestNoteTypeForMeasure( const NoteData &nd, int iMeasureIndex );
NoteType GetSmallestNoteTypeInRange( const NoteData &nd, int iStartIndex, int iEndIndex ); NoteType GetSmallestNoteTypeInRange( const NoteData &nd, int iStartIndex, int iEndIndex );
void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData, bool bComposite ); void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData, bool bComposite );
+7 -39
View File
@@ -3,6 +3,7 @@
#include "BackgroundUtil.h" #include "BackgroundUtil.h"
#include "GameManager.h" #include "GameManager.h"
#include "MsdFile.h" #include "MsdFile.h"
#include "NoteDataUtil.h"
#include "NoteTypes.h" #include "NoteTypes.h"
#include "RageFileManager.h" #include "RageFileManager.h"
#include "RageLog.h" #include "RageLog.h"
@@ -974,58 +975,25 @@ bool SMLoader::LoadFromBGChangesVector( BackgroundChange &change, std::vector<RS
case 6: case 6:
// param 7 overrides this. // param 7 overrides this.
// Backward compatibility: // Backward compatibility:
if( change.m_def.m_sEffect.empty() ) if( change.m_def.m_sEffect.empty() && !NoteDataUtil::StringInterpretsAs( aBGChangeValues[5], 0 ) )
{ {
try change.m_def.m_sEffect = SBE_StretchNoLoop;
{
if( std::stoi( aBGChangeValues[5] ) != 0 )
{
change.m_def.m_sEffect = SBE_StretchNoLoop;
}
}
catch ( const std::invalid_argument & )
{
// Failed conversions mean it's not 0 as well
change.m_def.m_sEffect = SBE_StretchNoLoop;
}
} }
// fall through // fall through
case 5: case 5:
// param 7 overrides this. // param 7 overrides this.
// Backward compatibility: // Backward compatibility:
if( change.m_def.m_sEffect.empty() ) if( change.m_def.m_sEffect.empty() && !NoteDataUtil::StringInterpretsAs( aBGChangeValues[4], 0 ) )
{ {
try change.m_def.m_sEffect = SBE_StretchRewind;
{
if( std::stoi( aBGChangeValues[4] ) != 0 )
{
change.m_def.m_sEffect = SBE_StretchRewind;
}
}
catch ( const std::invalid_argument & )
{
// Failed conversions mean it's not 0 as well
change.m_def.m_sEffect = SBE_StretchRewind;
}
} }
// fall through // fall through
case 4: case 4:
// param 9 overrides this. // param 9 overrides this.
// Backward compatibility: // Backward compatibility:
if( change.m_sTransition.empty() ) if( change.m_sTransition.empty() && !NoteDataUtil::StringInterpretsAs( aBGChangeValues[3], 0 ) )
{ {
try change.m_sTransition = SBT_CrossFade;
{
if( std::stoi( aBGChangeValues[3] ) != 0 )
{
change.m_sTransition = SBT_CrossFade;
}
}
catch ( const std::invalid_argument & )
{
// Failed conversions mean it's not 0 as well
change.m_sTransition = SBT_CrossFade;
}
} }
// fall through // fall through
case 3: case 3: