diff --git a/stepmania/src/IniFile.cpp b/stepmania/src/IniFile.cpp index 5239b105b3..bb0c66c0b4 100644 --- a/stepmania/src/IniFile.cpp +++ b/stepmania/src/IniFile.cpp @@ -124,67 +124,29 @@ bool IniFile::GetValue( const CString &keyname, const CString &valuename, CStrin return true; } -bool IniFile::GetValue(const CString &keyname, const CString &valuename, int& value) const -{ - CString sValue; - if( !GetValue(keyname,valuename,sValue) ) - return false; - sscanf( sValue.c_str(), "%d", &value ); - return true; -} - -bool IniFile::GetValue(const CString &keyname, const CString &valuename, unsigned &value) const -{ - CString sValue; - if( !GetValue(keyname,valuename,sValue) ) - return false; - sscanf( sValue.c_str(), "%u", &value ); - return true; -} - -bool IniFile::GetValue(const CString &keyname, const CString &valuename, float& value) const -{ - CString sValue; - if( !GetValue(keyname,valuename,sValue) ) - return false; - value = strtof( sValue, NULL ); - return true; -} - -bool IniFile::GetValue( const CString &keyname, const CString &valuename, bool& value ) const -{ - CString sValue; - if( !GetValue(keyname,valuename,sValue) ) - return false; - value = atoi(sValue) != 0; - return true; -} - bool IniFile::SetValue( const CString &keyname, const CString &valuename, const CString &value ) { keys[keyname][valuename] = value; return true; } -bool IniFile::SetValue( const CString &keyname, const CString &valuename, int value ) -{ - return SetValue( keyname, valuename, ssprintf("%d",value) ); -} +#define TYPE(T) \ + bool IniFile::GetValue( const CString &keyname, const CString &valuename, T &value ) const \ + { \ + CString sValue; \ + if( !GetValue(keyname,valuename,sValue) ) \ + return false; \ + return FromString( sValue, value ); \ + } \ + bool IniFile::SetValue( const CString &keyname, const CString &valuename, T value ) \ + { \ + return SetValue( keyname, valuename, ToString(value) ); \ + } -bool IniFile::SetValue( const CString &keyname, const CString &valuename, unsigned value ) -{ - return SetValue( keyname, valuename, ssprintf("%u",value) ); -} - -bool IniFile::SetValue( const CString &keyname, const CString &valuename, float value ) -{ - return SetValue( keyname, valuename, ssprintf("%f",value) ); -} - -bool IniFile::SetValue( const CString &keyname, const CString &valuename, bool value ) -{ - return SetValue( keyname, valuename, ssprintf("%d",value) ); -} +TYPE(int); +TYPE(unsigned); +TYPE(float); +TYPE(bool); bool IniFile::DeleteValue(const CString &keyname, const CString &valuename) { diff --git a/stepmania/src/RageUtil.cpp b/stepmania/src/RageUtil.cpp index ce4816ba4e..a9cef89292 100644 --- a/stepmania/src/RageUtil.cpp +++ b/stepmania/src/RageUtil.cpp @@ -1282,6 +1282,61 @@ void CollapsePath( CString &sPath, bool bRemoveLeadingDot ) } +bool FromString( const CString &sValue, int &out ) +{ + if( sscanf( sValue.c_str(), "%d", &out ) == 1 ) + return true; + + out = 0; + return false; +} + +bool FromString( const CString &sValue, unsigned &out ) +{ + if( sscanf( sValue.c_str(), "%u", &out ) == 1 ) + return true; + + out = 0; + return false; +} + +bool FromString( const CString &sValue, float &out ) +{ + const char *endptr = sValue.data() + sValue.size(); + out = strtof( sValue, (char **) &endptr ); + return endptr != sValue.data(); +} + +bool FromString( const CString &sValue, bool &out ) +{ + if( sValue.size() == 0 ) + return false; + + out = (atoi(sValue) != 0); + return true; +} + +CString ToString( int value ) +{ + return ssprintf( "%i", value ); +} + +CString ToString( unsigned value ) +{ + return ssprintf( "%u", value ); +} + +CString ToString( float value ) +{ + return ssprintf( "%f", value ); +} + +CString ToString( bool value ) +{ + return ssprintf( "%i", value ); +} + + // // Helper function for reading/writing scores // diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index 4edf575168..e5448d2c4a 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -352,6 +352,17 @@ void FixSlashesInPlace( CString &sPath ); CString FixSlashes( CString sPath ); void CollapsePath( CString &sPath, bool bRemoveLeadingDot=false ); +bool FromString( const CString &sValue, int &out ); +bool FromString( const CString &sValue, unsigned &out ); +bool FromString( const CString &sValue, float &out ); +bool FromString( const CString &sValue, bool &out ); + +CString ToString( int value ); +CString ToString( unsigned value ); +CString ToString( float value ); +CString ToString( bool value ); + + // helper file functions used by Bookkeeper and ProfileManager // // Helper function for reading/writing scores