Initial
This commit is contained in:
74
midiwrt/INSTRMNT.CPP
Normal file
74
midiwrt/INSTRMNT.CPP
Normal file
@@ -0,0 +1,74 @@
|
||||
#include <stdlib.h>
|
||||
#include <midiwrt/instrmnt.hpp>
|
||||
|
||||
Instruments::Instruments(WORD startOrdinal,WORD endOrdinal)
|
||||
{
|
||||
loadInstruments(startOrdinal,endOrdinal);
|
||||
}
|
||||
|
||||
Instruments::~Instruments()
|
||||
{
|
||||
}
|
||||
|
||||
WORD Instruments::loadInstruments(WORD startOrdinal,WORD endOrdinal)
|
||||
{
|
||||
String semicolonString(";");
|
||||
String nullString("\\0");
|
||||
String ordinalString;
|
||||
String categoryString;
|
||||
String nameString;
|
||||
char *lpBuffer;
|
||||
BYTE lineFeed;
|
||||
|
||||
size((endOrdinal-startOrdinal)+1);
|
||||
for(short index=startOrdinal,offset=0;index<=endOrdinal;index++,offset++)
|
||||
{
|
||||
String tempString(index);
|
||||
lpBuffer=::strtok(tempString,semicolonString);
|
||||
if(!lpBuffer)continue;
|
||||
ordinalString=lpBuffer;
|
||||
lpBuffer=::strtok(0,semicolonString);
|
||||
if(!lpBuffer)continue;
|
||||
categoryString=lpBuffer;
|
||||
lpBuffer=::strtok(0,nullString);
|
||||
if(!lpBuffer)continue;
|
||||
nameString=lpBuffer;
|
||||
operator[](offset)=PureInstrument(::atoi(ordinalString),categoryString,nameString);
|
||||
}
|
||||
return (WORD)size();
|
||||
}
|
||||
|
||||
WORD Instruments::getInstruments(PureVector<PureInstrument> &vectoredInstruments)
|
||||
{
|
||||
vectoredInstruments.size(0);
|
||||
if(!size())return FALSE;
|
||||
vectoredInstruments.size(size());
|
||||
for(int i=0;i<size();i++)vectoredInstruments[i]=operator[](i);
|
||||
return vectoredInstruments.size();
|
||||
}
|
||||
|
||||
WORD Instruments::locateInstrument(WORD ordinalValue,PureInstrument &somePureInstrument)
|
||||
{
|
||||
short itemIndex;
|
||||
|
||||
if(!binarySearch(ordinalValue,itemIndex))return FALSE;
|
||||
somePureInstrument=operator[](itemIndex);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
WORD Instruments::binarySearch(WORD ordinal,short &itemIndex)
|
||||
{
|
||||
short lowerBound(0);
|
||||
short upperBound((short)size()-1);
|
||||
short indexItem;
|
||||
|
||||
do{
|
||||
indexItem=(lowerBound+upperBound)/2;
|
||||
if(operator[](indexItem).ordinal()<ordinal)lowerBound=indexItem+1;
|
||||
else upperBound=indexItem-1;
|
||||
}while(operator[](indexItem).ordinal()!=ordinal&&lowerBound<=upperBound);
|
||||
itemIndex=indexItem;
|
||||
return operator[](indexItem).ordinal()==ordinal;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user