Add operator== and operator!= as well as getting all matching steps for a particular song.

This commit is contained in:
Steve Checkoway
2006-07-30 11:30:29 +00:00
parent 3164f7a15f
commit 5fac8c030d
3 changed files with 32 additions and 9 deletions
+9
View File
@@ -35,6 +35,15 @@ public:
}
bool Matches( const Song *p ) const;
bool operator==( const SongCriteria &other ) const
{
#define X(x) (x == other.x)
return X(m_sGroupName) && X(m_bUseSongGenreAllowedList) && X(m_vsSongGenreAllowedList) &&
X(m_Selectable) && X(m_bUseSongAllowedList) && X(m_vpSongAllowedList) &&
X(m_iStagesForSong) && X(m_Tutorial) && X(m_Locked);
#undef X
}
bool operator!=( const SongCriteria &other ) const { return !operator==( other ); }
};
namespace SongUtil
+11 -7
View File
@@ -45,16 +45,20 @@ void StepsUtil::GetAllMatching( const SongCriteria &soc, const StepsCriteria &st
{
if( !soc.Matches(*so) )
continue;
FOREACH_CONST( Steps*, (*so)->GetAllSteps(), st )
{
if( !stc.Matches(*so,*st) )
continue;
SongAndSteps sas = { *so, *st };
out.push_back( sas );
}
GetAllMatching( *so, stc, out );
}
}
void StepsUtil::GetAllMatching( Song *pSong, const StepsCriteria &stc, vector<SongAndSteps> &out )
{
const vector<Steps*> &vSteps = ( stc.m_st == STEPS_TYPE_INVALID ? pSong->GetAllSteps() :
pSong->GetStepsByStepsType(stc.m_st) );
FOREACH_CONST( Steps*, vSteps, st )
if( stc.Matches(pSong, *st) )
out.push_back( SongAndSteps(pSong, *st) );
}
//
// Sorting stuff
+12 -2
View File
@@ -29,13 +29,22 @@ public:
}
bool Matches( const Song *pSong, const Steps *pSteps ) const;
bool operator==( const StepsCriteria &other ) const
{
#define X(x) (x == other.x)
return X(m_difficulty) && X(m_iLowMeter) && X(m_iHighMeter) && X(m_st) && X(m_Locked);
#undef X
}
bool operator!=( const StepsCriteria &other ) const { return !operator==( other ); }
};
class SongAndSteps
{
public:
Song* pSong;
Steps* pSteps;
Song *pSong;
Steps *pSteps;
SongAndSteps() : pSong(NULL), pSteps(NULL) { }
SongAndSteps( Song *pSong_, Steps *pSteps_ ) : pSong(pSong_), pSteps(pSteps_) { }
bool operator==( const SongAndSteps& other ) const { return pSong==other.pSong && pSteps==other.pSteps; }
bool operator<( const SongAndSteps& other ) const { return pSong<=other.pSong && pSteps<=other.pSteps; }
};
@@ -43,6 +52,7 @@ public:
namespace StepsUtil
{
void GetAllMatching( const SongCriteria &soc, const StepsCriteria &stc, vector<SongAndSteps> &out ); // look up in SONGMAN
void GetAllMatching( Song *pSong, const StepsCriteria &stc, vector<SongAndSteps> &out );
bool CompareNotesPointersByRadarValues(const Steps* pSteps1, const Steps* pSteps2);
bool CompareNotesPointersByMeter(const Steps *pSteps1, const Steps* pSteps2);