s/FindLargestCommonSubstring/FindLargestInitialSubstring/
do it without lots of string copying/comparing
This commit is contained in:
@@ -119,19 +119,17 @@ static bool ConvertRawTrackToTapNote( int iRawTrack, BmsTrack &bmsTrackOut, bool
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find the largest common substring at the start of both strings.
|
// Find the largest common substring at the start of both strings.
|
||||||
static CString FindLargestCommonSubstring( CString string1, CString string2 )
|
static CString FindLargestInitialSubstring( CString string1, CString string2 )
|
||||||
{
|
{
|
||||||
// First see if the whole first string matches an appropriately-sized
|
// First see if the whole first string matches an appropriately-sized
|
||||||
// substring of the second, then keep chopping off the last character of
|
// substring of the second, then keep chopping off the last character of
|
||||||
// each until they match.
|
// each until they match.
|
||||||
for( int i=string1.GetLength(); i > 0; i-- )
|
int i;
|
||||||
{
|
for( i = 0; i < string1.size() && i < string2.size(); ++i )
|
||||||
if( string1.substr(0,i) == string2.substr(0,i) )
|
if( string1[i] != string2[i] )
|
||||||
return string1.substr(0,i);
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
// If all else fails, give them nothing.
|
return string1.substr(0,i);
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static StepsType DetermineStepsType( int iPlayer, const NoteData &nd )
|
static StepsType DetermineStepsType( int iPlayer, const NoteData &nd )
|
||||||
@@ -891,7 +889,7 @@ bool BMSLoader::LoadFromDir( CString sDir, Song &out )
|
|||||||
if( !GetTagFromMap( aBMSData[i], "#title", sTitle ) )
|
if( !GetTagFromMap( aBMSData[i], "#title", sTitle ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
commonSubstring = FindLargestCommonSubstring( commonSubstring, sTitle );
|
commonSubstring = FindLargestInitialSubstring( commonSubstring, sTitle );
|
||||||
if( commonSubstring == "" )
|
if( commonSubstring == "" )
|
||||||
{
|
{
|
||||||
// All bets are off; the titles don't match at all.
|
// All bets are off; the titles don't match at all.
|
||||||
@@ -924,7 +922,7 @@ bool BMSLoader::LoadFromDir( CString sDir, Song &out )
|
|||||||
|
|
||||||
// XXX: We should do this with filenames too, I have plenty of examples.
|
// XXX: We should do this with filenames too, I have plenty of examples.
|
||||||
// however, filenames will be trickier, as stuffs at the beginning AND
|
// however, filenames will be trickier, as stuffs at the beginning AND
|
||||||
// end change per-file, so we'll need a fancier FindLargestCommonSubstring()
|
// end change per-file, so we'll need a fancier FindLargestInitialSubstring()
|
||||||
|
|
||||||
// Any of [L7] [L14] (LIGHT7) (LIGHT14) (LIGHT) [L] <LIGHT7> <L7>... you get the idea.
|
// Any of [L7] [L14] (LIGHT7) (LIGHT14) (LIGHT) [L] <LIGHT7> <L7>... you get the idea.
|
||||||
// XXX: This matches (double), but I haven't seen it used. Again, MORE EXAMPLES NEEDED
|
// XXX: This matches (double), but I haven't seen it used. Again, MORE EXAMPLES NEEDED
|
||||||
|
|||||||
Reference in New Issue
Block a user