Initial
This commit is contained in:
77
guitar/requirements.cpp
Normal file
77
guitar/requirements.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include <guitar/requirements.hpp>
|
||||
#include <common/qsort.hpp>
|
||||
|
||||
void Requirements::setRequirements(Block<Note> ¬es)
|
||||
{
|
||||
size(notes.size());
|
||||
for(int index=0;index<notes.size();index++)
|
||||
{
|
||||
operator[](index)=FrettedNote(notes[index],-1,-1);
|
||||
}
|
||||
}
|
||||
|
||||
bool Requirements::satisfyRequirements(NotePaths ¬ePaths)
|
||||
{
|
||||
Array<Ordering> searchOrder;
|
||||
|
||||
searchOrder.size(notePaths.size());
|
||||
for(int index=0;index<notePaths.size();index++)
|
||||
{
|
||||
NotePath ¬ePath=notePaths[index];
|
||||
searchOrder[index]=Ordering(notePath.size(),index);
|
||||
}
|
||||
QuickSort<Ordering> sortOrder;
|
||||
sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets
|
||||
for(index=0;index<searchOrder.size();index++)
|
||||
{
|
||||
satisfyRequirement(notePaths[searchOrder[index].getValue()]);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Requirements::satisfyRequirement(NotePath ¬ePath)
|
||||
{
|
||||
bool satisfied=false;
|
||||
PtrRequirement requirement;
|
||||
|
||||
if(!notePath.size())return satisfied;
|
||||
for(int pathIndex=0;pathIndex<notePath.size();pathIndex++)
|
||||
{
|
||||
FrettedNote &frettedNote=notePath[pathIndex];
|
||||
if(isPositionAvailable(frettedNote,requirement))
|
||||
{
|
||||
*requirement=frettedNote;
|
||||
requirement->setSatisfied(true);
|
||||
satisfied=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return satisfied;
|
||||
}
|
||||
|
||||
bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement)
|
||||
{
|
||||
for(int index=0;index<size();index++)
|
||||
{
|
||||
requirement=&operator[](index);
|
||||
// ::OutputDebugString(requirement->toString()+String("\n"));
|
||||
// ::OutputDebugString(frettedNote.toString()+String("\n"));
|
||||
if(requirement->getNote()==frettedNote.getNote()&&
|
||||
requirement->getOctave()==frettedNote.getOctave()&&
|
||||
!requirement->getSatisfied())return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Requirements::haveRequirement(const FrettedNote &frettedNote)
|
||||
{
|
||||
for(int index=0;index<size();index++)
|
||||
{
|
||||
Requirement &requirement=operator[](index);
|
||||
if((requirement.getNote()==frettedNote.getNote())&&(requirement.getOctave()==frettedNote.getOctave())&&!requirement.getSatisfied())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user