diff --git a/stepmania/src/RageUtil.cpp b/stepmania/src/RageUtil.cpp index a287c9ee6e..a0517f79df 100644 --- a/stepmania/src/RageUtil.cpp +++ b/stepmania/src/RageUtil.cpp @@ -152,22 +152,34 @@ CString join( const CString &Deliminator, const CStringArray& Source) } -void split( const CString &Source, const CString &Deliminator, CStringArray& AddIt, const bool bIgnoreEmpty ) +template +void do_split( const S &Source, const S &Deliminator, vector &AddIt, const bool bIgnoreEmpty ) { - int startpos = 0; + unsigned startpos = 0; do { - int pos = Source.Find(Deliminator, startpos); - if ( pos == -1 ) pos=Source.GetLength(); + unsigned pos = Source.find_first_of(Deliminator, startpos); + if ( pos == Source.npos ) pos=Source.size(); - CString AddCString = Source.substr(startpos, pos-startpos); + S AddCString = Source.substr(startpos, pos-startpos); if( AddCString.empty() && bIgnoreEmpty ) ; // do nothing else AddIt.push_back(AddCString); - startpos=pos+Deliminator.GetLength(); - } while ( startpos <= Source.GetLength() ); + startpos=pos+Deliminator.size(); + } while ( startpos <= Source.size() ); +} + + +void split( const CString &Source, const CString &Deliminator, CStringArray &AddIt, const bool bIgnoreEmpty ) +{ + do_split(Source, Deliminator, AddIt, bIgnoreEmpty ); +} + +void split( const wstring &Source, const wstring &Deliminator, vector &AddIt, const bool bIgnoreEmpty ) +{ + do_split(Source, Deliminator, AddIt, bIgnoreEmpty ); } diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index 3e98eac29c..47d786b43c 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -155,6 +155,7 @@ void split( CStringArray& AddIt, const bool bIgnoreEmpty = true ); +void split( const wstring &Source, const wstring &Deliminator, vector &AddIt, const bool bIgnoreEmpty = true ); // Joins a CStringArray to create a CString according the Deliminator. CString join(