More loops to tackle.
This commit is contained in:
+14
-21
@@ -42,13 +42,13 @@ bool StepsCriteria::Matches( const Song *pSong, const Steps *pSteps ) const
|
|||||||
void StepsUtil::GetAllMatching( const SongCriteria &soc, const StepsCriteria &stc, vector<SongAndSteps> &out )
|
void StepsUtil::GetAllMatching( const SongCriteria &soc, const StepsCriteria &stc, vector<SongAndSteps> &out )
|
||||||
{
|
{
|
||||||
const RString &sGroupName = soc.m_sGroupName.empty()? GROUP_ALL:soc.m_sGroupName;
|
const RString &sGroupName = soc.m_sGroupName.empty()? GROUP_ALL:soc.m_sGroupName;
|
||||||
const vector<Song*> &songs = SONGMAN->GetSongs( sGroupName );
|
const vector<Song*> &songs = SONGMAN->GetSongs( sGroupName );
|
||||||
|
|
||||||
FOREACH_CONST( Song*, songs, so )
|
for (Song *so : songs)
|
||||||
{
|
{
|
||||||
if( !soc.Matches(*so) )
|
if( !soc.Matches(so) )
|
||||||
continue;
|
continue;
|
||||||
GetAllMatching( *so, stc, out );
|
GetAllMatching( so, stc, out ); // TODO: Look into why this can't be const.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,34 +57,27 @@ void StepsUtil::GetAllMatching( Song *pSong, const StepsCriteria &stc, vector<So
|
|||||||
const vector<Steps*> &vSteps = ( stc.m_st == StepsType_Invalid ? pSong->GetAllSteps() :
|
const vector<Steps*> &vSteps = ( stc.m_st == StepsType_Invalid ? pSong->GetAllSteps() :
|
||||||
pSong->GetStepsByStepsType(stc.m_st) );
|
pSong->GetStepsByStepsType(stc.m_st) );
|
||||||
|
|
||||||
FOREACH_CONST( Steps*, vSteps, st )
|
for (Steps *st : vSteps)
|
||||||
if( stc.Matches(pSong, *st) )
|
if( stc.Matches(pSong, st) )
|
||||||
out.push_back( SongAndSteps(pSong, *st) );
|
out.push_back( SongAndSteps(pSong, st) );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StepsUtil::HasMatching( const SongCriteria &soc, const StepsCriteria &stc )
|
bool StepsUtil::HasMatching( const SongCriteria &soc, const StepsCriteria &stc )
|
||||||
{
|
{
|
||||||
const RString &sGroupName = soc.m_sGroupName.empty()? GROUP_ALL:soc.m_sGroupName;
|
const RString &sGroupName = soc.m_sGroupName.empty()? GROUP_ALL:soc.m_sGroupName;
|
||||||
const vector<Song*> &songs = SONGMAN->GetSongs( sGroupName );
|
const vector<Song*> &songs = SONGMAN->GetSongs( sGroupName );
|
||||||
|
|
||||||
FOREACH_CONST( Song*, songs, so )
|
return std::any_of(songs.begin(), songs.end(), [&](Song const *so) {
|
||||||
{
|
return soc.Matches(so) && HasMatching(so, stc);
|
||||||
if( soc.Matches(*so) && HasMatching(*so, stc) )
|
});
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StepsUtil::HasMatching( const Song *pSong, const StepsCriteria &stc )
|
bool StepsUtil::HasMatching( const Song *pSong, const StepsCriteria &stc )
|
||||||
{
|
{
|
||||||
const vector<Steps*> &vSteps = stc.m_st == StepsType_Invalid? pSong->GetAllSteps():pSong->GetStepsByStepsType( stc.m_st );
|
const vector<Steps*> &vSteps = stc.m_st == StepsType_Invalid? pSong->GetAllSteps():pSong->GetStepsByStepsType( stc.m_st );
|
||||||
|
return std::any_of(vSteps.begin(), vSteps.end(), [&](Steps const *st) {
|
||||||
FOREACH_CONST( Steps*, vSteps, st )
|
return stc.Matches(pSong, st);
|
||||||
{
|
});
|
||||||
if( stc.Matches(pSong, *st) )
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sorting stuff
|
// Sorting stuff
|
||||||
|
|||||||
Reference in New Issue
Block a user