@@ -626,7 +626,7 @@ private: | |||
void writeVC6Project (OutputStream& out) | |||
{ | |||
String defaultConfig (createConfigNameVC6 (project.getConfiguration (0))); | |||
const String defaultConfigName (createConfigNameVC6 (project.getConfiguration (0))); | |||
const bool isDLL = project.isAudioPlugin() || project.isBrowserPlugin(); | |||
String targetType, targetCode; | |||
@@ -641,7 +641,7 @@ private: | |||
<< "# Microsoft Developer Studio Generated Build File, Format Version 6.00" << newLine | |||
<< "# ** DO NOT EDIT **" << newLine | |||
<< "# TARGTYPE " << targetType << " " << targetCode << newLine | |||
<< "CFG=" << defaultConfig << newLine | |||
<< "CFG=" << defaultConfigName << newLine | |||
<< "!MESSAGE This is not a valid makefile. To build this project using NMAKE," << newLine | |||
<< "!MESSAGE use the Export Makefile command and run" << newLine | |||
<< "!MESSAGE " << newLine | |||
@@ -650,7 +650,7 @@ private: | |||
<< "!MESSAGE You can specify a configuration when running NMAKE" << newLine | |||
<< "!MESSAGE by defining the macro CFG on the command line. For example:" << newLine | |||
<< "!MESSAGE " << newLine | |||
<< "!MESSAGE NMAKE /f \"" << project.getProjectName() << ".mak\" CFG=\"" << defaultConfig << '"' << newLine | |||
<< "!MESSAGE NMAKE /f \"" << project.getProjectName() << ".mak\" CFG=\"" << defaultConfigName << '"' << newLine | |||
<< "!MESSAGE " << newLine | |||
<< "!MESSAGE Possible choices for configuration are:" << newLine | |||
<< "!MESSAGE " << newLine; | |||
@@ -676,29 +676,31 @@ private: | |||
const String configName (createConfigNameVC6 (config)); | |||
targetList << "# Name \"" << configName << '"' << newLine; | |||
const String outFile (windowsStylePath (getConfigTargetPath(config) + "/" + config.getTargetBinaryName().toString() + getTargetBinarySuffix())); | |||
const String binariesPath (getConfigTargetPath (config)); | |||
const String targetBinary (windowsStylePath (binariesPath + "/" + config.getTargetBinaryName().toString() + getTargetBinarySuffix())); | |||
const String optimisationFlag (((int) config.getOptimisationLevel().getValue() <= 1) ? "Od" : (config.getOptimisationLevel() == 2 ? "O2" : "O3")); | |||
const String defines (getPreprocessorDefs (config, " /D ")); | |||
const bool isDebug = (bool) config.isDebug().getValue(); | |||
const String extraDebugFlags (isDebug ? "/Gm /ZI /GZ" : ""); | |||
const String includes (getHeaderSearchPaths (config).joinIntoString (" /I ")); | |||
out << (i == 0 ? "!IF" : "!ELSEIF") << " \"$(CFG)\" == \"" << configName << '"' << newLine | |||
<< "# PROP BASE Use_MFC 0" << newLine | |||
<< "# PROP BASE Use_Debug_Libraries " << (isDebug ? "1" : "0") << newLine | |||
<< "# PROP BASE Output_Dir \"" << getConfigTargetPath (config) << '"' << newLine | |||
<< "# PROP BASE Output_Dir \"" << binariesPath << '"' << newLine | |||
<< "# PROP BASE Intermediate_Dir \"" << getIntermediatesPath (config) << '"' << newLine | |||
<< "# PROP BASE Target_Dir \"\"" << newLine | |||
<< "# PROP Use_MFC 0" << newLine | |||
<< "# PROP Use_Debug_Libraries " << (isDebug ? "1" : "0") << newLine | |||
<< "# PROP Output_Dir \"" << getConfigTargetPath (config) << '"' << newLine | |||
<< "# PROP Output_Dir \"" << binariesPath << '"' << newLine | |||
<< "# PROP Intermediate_Dir \"" << getIntermediatesPath (config) << '"' << newLine | |||
<< "# PROP Ignore_Export_Lib 0" << newLine | |||
<< "# PROP Target_Dir \"\"" << newLine | |||
<< "# ADD BASE CPP /nologo /W3 /GX /" << optimisationFlag << " /D " << defines | |||
<< " /YX /FD /c " << extraDebugFlags << " /Zm1024" << newLine | |||
<< "# ADD CPP /nologo " << (isDebug ? "/MTd" : "/MT") << " /W3 /GR /GX /" << optimisationFlag | |||
<< " /I " << includes << " /D " << defines << " /D \"_UNICODE\" /D \"UNICODE\" /FD /c " << extraDebugFlags << " /Zm1024" << newLine; | |||
<< " /I " << getHeaderSearchPaths (config).joinIntoString (" /I ") | |||
<< " /D " << defines << " /D \"_UNICODE\" /D \"UNICODE\" /FD /c " << extraDebugFlags | |||
<< " /Zm1024" << newLine; | |||
if (! isDebug) | |||
out << "# SUBTRACT CPP /YX" << newLine; | |||
@@ -707,7 +709,7 @@ private: | |||
out << "# ADD BASE MTL /nologo /D " << defines << " /mktyplib203 /win32" << newLine | |||
<< "# ADD MTL /nologo /D " << defines << " /mktyplib203 /win32" << newLine; | |||
out << "# ADD BASE RSC /l 0x40c /d " << defines << newLine | |||
out << "# ADD BASE RSC /l 0x40c /d " << defines << newLine | |||
<< "# ADD RSC /l 0x40c /d " << defines << newLine | |||
<< "BSC32=bscmake.exe" << newLine | |||
<< "# ADD BASE BSC32 /nologo" << newLine | |||
@@ -717,7 +719,7 @@ private: | |||
{ | |||
out << "LIB32=link.exe -lib" << newLine | |||
<< "# ADD BASE LIB32 /nologo" << newLine | |||
<< "# ADD LIB32 /nologo /out:\"" << outFile << '"' << newLine; | |||
<< "# ADD LIB32 /nologo /out:\"" << targetBinary << '"' << newLine; | |||
} | |||
else | |||
{ | |||
@@ -726,7 +728,7 @@ private: | |||
<< "# ADD LINK32 \"C:\\Program Files\\Microsoft Visual Studio\\VC98\\LIB\\shell32.lib\" " // This is avoid debug information corruption when mixing Platform SDK | |||
<< "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib " | |||
<< (isDebug ? " /debug" : "") | |||
<< " /nologo /machine:I386 /out:\"" << outFile << "\" " | |||
<< " /nologo /machine:I386 /out:\"" << targetBinary << "\" " | |||
<< (isDLL ? "/dll" : (project.isCommandLineApp() ? "/subsystem:console" | |||
: "/subsystem:windows")) << newLine; | |||
} | |||
@@ -43,7 +43,7 @@ | |||
#define JUCE_MAJOR_VERSION 1 | |||
#define JUCE_MINOR_VERSION 51 | |||
#define JUCE_BUILDNUMBER 10 | |||
#define JUCE_BUILDNUMBER 11 | |||
#define JUCE_VERSION ((JUCE_MAJOR_VERSION << 16) + (JUCE_MINOR_VERSION << 8) + JUCE_BUILDNUMBER) | |||
@@ -2050,7 +2050,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (elementToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -2310,7 +2310,7 @@ public: | |||
{ | |||
if (valueToRemove == *e) | |||
{ | |||
remove ((int) (e - data.elements.getData())); | |||
remove (static_cast <int> (e - data.elements.getData())); | |||
break; | |||
} | |||
@@ -2326,7 +2326,7 @@ public: | |||
if (endIndex > startIndex) | |||
{ | |||
ElementType* e = data.elements + startIndex; | |||
ElementType* const e = data.elements + startIndex; | |||
numberToRemove = endIndex - startIndex; | |||
for (int i = 0; i < numberToRemove; ++i) | |||
@@ -2495,82 +2495,109 @@ private: | |||
class MemoryBlock; | |||
class JUCE_API BitArray | |||
class JUCE_API BigInteger | |||
{ | |||
public: | |||
BitArray() throw(); | |||
BigInteger(); | |||
BitArray (const unsigned int value) throw(); | |||
BigInteger (unsigned int value); | |||
BitArray (const int value) throw(); | |||
BigInteger (int value); | |||
BitArray (int64 value) throw(); | |||
BigInteger (int64 value); | |||
BitArray (const BitArray& other) throw(); | |||
BigInteger (const BigInteger& other); | |||
~BitArray() throw(); | |||
~BigInteger(); | |||
BitArray& operator= (const BitArray& other) throw(); | |||
BigInteger& operator= (const BigInteger& other); | |||
bool operator== (const BitArray& other) const throw(); | |||
bool operator!= (const BitArray& other) const throw(); | |||
void swapWith (BigInteger& other) throw(); | |||
void clear() throw(); | |||
void clearBit (const int bitNumber) throw(); | |||
void setBit (const int bitNumber) throw(); | |||
void setBit (const int bitNumber, | |||
const bool shouldBeSet) throw(); | |||
void setRange (int startBit, | |||
int numBits, | |||
const bool shouldBeSet) throw(); | |||
void insertBit (const int bitNumber, | |||
const bool shouldBeSet) throw(); | |||
bool operator[] (const int bit) const throw(); | |||
bool operator[] (int bit) const throw(); | |||
bool isEmpty() const throw(); | |||
bool isZero() const throw(); | |||
const BitArray getBitRange (int startBit, int numBits) const throw(); | |||
bool isOne() const throw(); | |||
int getBitRangeAsInt (int startBit, int numBits) const throw(); | |||
int toInteger() const throw(); | |||
void setBitRangeAsInt (int startBit, int numBits, | |||
unsigned int valueToSet) throw(); | |||
void clear(); | |||
void orWith (const BitArray& other) throw(); | |||
void clearBit (int bitNumber) throw(); | |||
void andWith (const BitArray& other) throw(); | |||
void setBit (int bitNumber); | |||
void xorWith (const BitArray& other) throw(); | |||
void setBit (int bitNumber, bool shouldBeSet); | |||
void add (const BitArray& other) throw(); | |||
void setRange (int startBit, int numBits, bool shouldBeSet); | |||
void subtract (const BitArray& other) throw(); | |||
void insertBit (int bitNumber, bool shouldBeSet); | |||
void multiplyBy (const BitArray& other) throw(); | |||
const BigInteger getBitRange (int startBit, int numBits) const; | |||
void divideBy (const BitArray& divisor, BitArray& remainder) throw(); | |||
int getBitRangeAsInt (int startBit, int numBits) const throw(); | |||
const BitArray findGreatestCommonDivisor (BitArray other) const throw(); | |||
void setBitRangeAsInt (int startBit, int numBits, unsigned int valueToSet); | |||
void modulo (const BitArray& divisor) throw(); | |||
void shiftBits (int howManyBitsLeft, int startBit); | |||
void exponentModulo (const BitArray& exponent, const BitArray& modulus) throw(); | |||
int countNumberOfSetBits() const throw(); | |||
void inverseModulo (const BitArray& modulus) throw(); | |||
int findNextSetBit (int startIndex = 0) const throw(); | |||
void shiftBits (int howManyBitsLeft, | |||
int startBit = 0) throw(); | |||
int findNextClearBit (int startIndex = 0) const throw(); | |||
int compare (const BitArray& other) const throw(); | |||
int getHighestBit() const throw(); | |||
int compareAbsolute (const BitArray& other) const throw(); | |||
// All the standard arithmetic ops... | |||
BigInteger& operator+= (const BigInteger& other); | |||
BigInteger& operator-= (const BigInteger& other); | |||
BigInteger& operator*= (const BigInteger& other); | |||
BigInteger& operator/= (const BigInteger& other); | |||
BigInteger& operator|= (const BigInteger& other); | |||
BigInteger& operator&= (const BigInteger& other); | |||
BigInteger& operator^= (const BigInteger& other); | |||
BigInteger& operator%= (const BigInteger& other); | |||
BigInteger& operator<<= (int numBitsToShift); | |||
BigInteger& operator>>= (int numBitsToShift); | |||
BigInteger& operator++(); | |||
BigInteger& operator--(); | |||
const BigInteger operator++ (int); | |||
const BigInteger operator-- (int); | |||
const BigInteger operator-() const; | |||
const BigInteger operator+ (const BigInteger& other) const; | |||
const BigInteger operator- (const BigInteger& other) const; | |||
const BigInteger operator* (const BigInteger& other) const; | |||
const BigInteger operator/ (const BigInteger& other) const; | |||
const BigInteger operator| (const BigInteger& other) const; | |||
const BigInteger operator& (const BigInteger& other) const; | |||
const BigInteger operator^ (const BigInteger& other) const; | |||
const BigInteger operator% (const BigInteger& other) const; | |||
const BigInteger operator<< (int numBitsToShift) const; | |||
const BigInteger operator>> (int numBitsToShift) const; | |||
bool operator== (const BigInteger& other) const throw(); | |||
bool operator!= (const BigInteger& other) const throw(); | |||
bool operator< (const BigInteger& other) const throw(); | |||
bool operator<= (const BigInteger& other) const throw(); | |||
bool operator> (const BigInteger& other) const throw(); | |||
bool operator>= (const BigInteger& other) const throw(); | |||
int compare (const BigInteger& other) const throw(); | |||
int compareAbsolute (const BigInteger& other) const throw(); | |||
void divideBy (const BigInteger& divisor, BigInteger& remainder); | |||
const BigInteger findGreatestCommonDivisor (BigInteger other) const; | |||
void exponentModulo (const BigInteger& exponent, const BigInteger& modulus); | |||
void inverseModulo (const BigInteger& modulus); | |||
bool isNegative() const throw(); | |||
@@ -2578,32 +2605,29 @@ public: | |||
void negate() throw(); | |||
int countNumberOfSetBits() const throw(); | |||
int findNextSetBit (int startIndex = 0) const throw(); | |||
int findNextClearBit (int startIndex = 0) const throw(); | |||
int getHighestBit() const throw(); | |||
const String toString (const int base, const int minimumNumCharacters = 1) const throw(); | |||
const String toString (int base, int minimumNumCharacters = 1) const; | |||
void parseString (const String& text, | |||
const int base) throw(); | |||
void parseString (const String& text, int base); | |||
const MemoryBlock toMemoryBlock() const throw(); | |||
const MemoryBlock toMemoryBlock() const; | |||
void loadFromMemoryBlock (const MemoryBlock& data) throw(); | |||
void loadFromMemoryBlock (const MemoryBlock& data); | |||
juce_UseDebuggingNewOperator | |||
private: | |||
void ensureSize (const int numVals) throw(); | |||
HeapBlock <unsigned int> values; | |||
int numValues, highestBit; | |||
bool negative; | |||
void ensureSize (int numVals); | |||
static const BigInteger simpleGCD (BigInteger* m, BigInteger* n); | |||
}; | |||
OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const BigInteger& value); | |||
typedef BigInteger BitArray; | |||
#endif // __JUCE_BITARRAY_JUCEHEADER__ | |||
/*** End of inlined file: juce_BitArray.h ***/ | |||
@@ -3470,7 +3494,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (objectToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -3666,7 +3690,7 @@ public: | |||
{ | |||
if (objectToRemove == *e) | |||
{ | |||
remove ((int) (e - data.elements.getData()), deleteObject); | |||
remove (static_cast <int> (e - data.elements.getData()), deleteObject); | |||
break; | |||
} | |||
@@ -4947,7 +4971,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (objectToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -7067,9 +7091,9 @@ public: | |||
bool nextBool() throw(); | |||
const BitArray nextLargeNumber (const BitArray& maximumValue) throw(); | |||
const BigInteger nextLargeNumber (const BigInteger& maximumValue); | |||
void fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw(); | |||
void fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits); | |||
static Random& getSystemRandom() throw(); | |||
@@ -7503,13 +7527,12 @@ class JUCE_API Primes | |||
{ | |||
public: | |||
static const BitArray createProbablePrime (int bitLength, | |||
int certainty, | |||
const int* randomSeeds = 0, | |||
int numRandomSeeds = 0) throw(); | |||
static const BigInteger createProbablePrime (int bitLength, | |||
int certainty, | |||
const int* randomSeeds = 0, | |||
int numRandomSeeds = 0); | |||
static bool isProbablyPrime (const BitArray& number, | |||
int certainty) throw(); | |||
static bool isProbablyPrime (const BigInteger& number, int certainty); | |||
}; | |||
#endif // __JUCE_PRIMES_JUCEHEADER__ | |||
@@ -7527,26 +7550,26 @@ class JUCE_API RSAKey | |||
{ | |||
public: | |||
RSAKey() throw(); | |||
RSAKey(); | |||
RSAKey (const String& stringRepresentation) throw(); | |||
RSAKey (const String& stringRepresentation); | |||
~RSAKey() throw(); | |||
~RSAKey(); | |||
const String toString() const throw(); | |||
const String toString() const; | |||
bool applyToValue (BitArray& value) const throw(); | |||
bool applyToValue (BigInteger& value) const; | |||
static void createKeyPair (RSAKey& publicKey, | |||
RSAKey& privateKey, | |||
const int numBits, | |||
int numBits, | |||
const int* randomSeeds = 0, | |||
const int numRandomSeeds = 0) throw(); | |||
int numRandomSeeds = 0); | |||
juce_UseDebuggingNewOperator | |||
protected: | |||
BitArray part1, part2; | |||
BigInteger part1, part2; | |||
}; | |||
#endif // __JUCE_RSAKEY_JUCEHEADER__ | |||
@@ -14595,8 +14618,8 @@ public: | |||
virtual int getDefaultBufferSize() = 0; | |||
virtual const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
virtual const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSizeSamples) = 0; | |||
@@ -14618,9 +14641,9 @@ public: | |||
virtual int getCurrentBitDepth() = 0; | |||
virtual const BitArray getActiveOutputChannels() const = 0; | |||
virtual const BigInteger getActiveOutputChannels() const = 0; | |||
virtual const BitArray getActiveInputChannels() const = 0; | |||
virtual const BigInteger getActiveInputChannels() const = 0; | |||
virtual int getOutputLatencyInSamples() = 0; | |||
@@ -15068,7 +15091,7 @@ public: | |||
private: | |||
VoidArray inputs; | |||
BitArray inputsToDelete; | |||
BigInteger inputsToDelete; | |||
CriticalSection lock; | |||
AudioSampleBuffer tempBuffer; | |||
double currentSampleRate; | |||
@@ -17013,11 +17036,11 @@ public: | |||
int bufferSize; | |||
BitArray inputChannels; | |||
BigInteger inputChannels; | |||
bool useDefaultInputChannels; | |||
BitArray outputChannels; | |||
BigInteger outputChannels; | |||
bool useDefaultOutputChannels; | |||
}; | |||
@@ -17094,7 +17117,7 @@ private: | |||
SortedSet <AudioIODeviceCallback*> callbacks; | |||
int numInputChansNeeded, numOutputChansNeeded; | |||
String currentDeviceType; | |||
BitArray inputChannels, outputChannels; | |||
BigInteger inputChannels, outputChannels; | |||
ScopedPointer <XmlElement> lastExplicitSettings; | |||
mutable bool listNeedsScanning; | |||
bool useInputNames; | |||
@@ -17147,7 +17170,7 @@ private: | |||
void handleIncomingMidiMessageInt (MidiInput* source, const MidiMessage& message); | |||
const String restartDevice (int blockSizeToUse, double sampleRateToUse, | |||
const BitArray& ins, const BitArray& outs); | |||
const BigInteger& ins, const BigInteger& outs); | |||
void stopDevice(); | |||
void updateXml(); | |||
@@ -17810,7 +17833,7 @@ private: | |||
CriticalSection callbackLock, listenerLock; | |||
#ifdef JUCE_DEBUG | |||
BitArray changingParams; | |||
BigInteger changingParams; | |||
#endif | |||
AudioProcessor (const AudioProcessor&); | |||
@@ -19299,7 +19322,7 @@ public: | |||
SamplerSound (const String& name, | |||
AudioFormatReader& source, | |||
const BitArray& midiNotes, | |||
const BigInteger& midiNotes, | |||
const int midiNoteForNormalPitch, | |||
const double attackTimeSecs, | |||
const double releaseTimeSecs, | |||
@@ -19322,7 +19345,7 @@ private: | |||
String name; | |||
ScopedPointer <AudioSampleBuffer> data; | |||
double sourceSampleRate; | |||
BitArray midiNotes; | |||
BigInteger midiNotes; | |||
int length, attackSamples, releaseSamples; | |||
int midiRootNote; | |||
}; | |||
@@ -22459,7 +22482,7 @@ public: | |||
juce_UseDebuggingNewOperator | |||
protected: | |||
virtual const BitArray getRoots (StringArray& rootNames, StringArray& rootPaths); | |||
virtual const BigInteger getRoots (StringArray& rootNames, StringArray& rootPaths); | |||
private: | |||
@@ -26584,7 +26607,7 @@ private: | |||
int midiChannel, midiInChannelMask; | |||
float velocity; | |||
int noteUnderMouse, mouseDownNote; | |||
BitArray keysPressed, keysCurrentlyDrawnDown; | |||
BigInteger keysPressed, keysCurrentlyDrawnDown; | |||
int rangeStart, rangeEnd, firstKey; | |||
bool canScroll, mouseDragging, useMousePositionForVelocity; | |||
@@ -99,7 +99,7 @@ void MixerAudioSource::removeInputSource (AudioSource* input, const bool deleteI | |||
void MixerAudioSource::removeAllInputs() | |||
{ | |||
VoidArray inputsCopy; | |||
BitArray inputsToDeleteCopy; | |||
BigInteger inputsToDeleteCopy; | |||
{ | |||
const ScopedLock sl (lock); | |||
@@ -112,7 +112,7 @@ public: | |||
private: | |||
//============================================================================== | |||
VoidArray inputs; | |||
BitArray inputsToDelete; | |||
BigInteger inputsToDelete; | |||
CriticalSection lock; | |||
AudioSampleBuffer tempBuffer; | |||
double currentSampleRate; | |||
@@ -124,7 +124,7 @@ public: | |||
The bits that are set in this array indicate the channels of the | |||
input device that are active. | |||
*/ | |||
BitArray inputChannels; | |||
BigInteger inputChannels; | |||
/** If this is true, it indicates that the inputChannels array | |||
should be ignored, and instead, the device's default channels | |||
@@ -136,7 +136,7 @@ public: | |||
The bits that are set in this array indicate the channels of the | |||
input device that are active. | |||
*/ | |||
BitArray outputChannels; | |||
BigInteger outputChannels; | |||
/** If this is true, it indicates that the outputChannels array | |||
should be ignored, and instead, the device's default channels | |||
@@ -426,7 +426,7 @@ private: | |||
SortedSet <AudioIODeviceCallback*> callbacks; | |||
int numInputChansNeeded, numOutputChansNeeded; | |||
String currentDeviceType; | |||
BitArray inputChannels, outputChannels; | |||
BigInteger inputChannels, outputChannels; | |||
ScopedPointer <XmlElement> lastExplicitSettings; | |||
mutable bool listNeedsScanning; | |||
bool useInputNames; | |||
@@ -480,7 +480,7 @@ private: | |||
void handleIncomingMidiMessageInt (MidiInput* source, const MidiMessage& message); | |||
const String restartDevice (int blockSizeToUse, double sampleRateToUse, | |||
const BitArray& ins, const BitArray& outs); | |||
const BigInteger& ins, const BigInteger& outs); | |||
void stopDevice(); | |||
void updateXml(); | |||
@@ -203,9 +203,9 @@ public: | |||
//============================================================================== | |||
/** Tries to open the device ready to play. | |||
@param inputChannels a BitArray in which a set bit indicates that the corresponding | |||
@param inputChannels a BigInteger in which a set bit indicates that the corresponding | |||
input channel should be enabled | |||
@param outputChannels a BitArray in which a set bit indicates that the corresponding | |||
@param outputChannels a BigInteger in which a set bit indicates that the corresponding | |||
output channel should be enabled | |||
@param sampleRate the sample rate to try to use - to find out which rates are | |||
available, see getNumSampleRates() and getSampleRate() | |||
@@ -215,8 +215,8 @@ public: | |||
opening the device | |||
@see close | |||
*/ | |||
virtual const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
virtual const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSizeSamples) = 0; | |||
@@ -279,13 +279,13 @@ public: | |||
enabled. | |||
@see getOutputChannelNames | |||
*/ | |||
virtual const BitArray getActiveOutputChannels() const = 0; | |||
virtual const BigInteger getActiveOutputChannels() const = 0; | |||
/** Returns a mask showing which of the available input channels are currently | |||
enabled. | |||
@see getInputChannelNames | |||
*/ | |||
virtual const BitArray getActiveInputChannels() const = 0; | |||
virtual const BigInteger getActiveInputChannels() const = 0; | |||
/** Returns the device's output latency. | |||
@@ -79,7 +79,7 @@ void MidiBuffer::clear (const int startSample, | |||
if (end > start) | |||
{ | |||
const size_t bytesToMove = (size_t) (bytesUsed - (end - getData())); | |||
const int bytesToMove = bytesUsed - (int) (end - getData()); | |||
if (bytesToMove > 0) | |||
memmove (start, end, bytesToMove); | |||
@@ -137,7 +137,7 @@ void MidiBuffer::addEvent (const uint8* const newData, | |||
data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); | |||
uint8* d = findEventAfter (getData(), sampleNumber); | |||
const size_t bytesToMove = (size_t) (bytesUsed - (d - getData())); | |||
const int bytesToMove = bytesUsed - (int) (d - getData()); | |||
if (bytesToMove > 0) | |||
memmove (d + numBytes + 6, | |||
@@ -56,7 +56,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||
// you should only call this method once! | |||
for (int i = formats.size(); --i >= 0;) | |||
{ | |||
#if JUCE_PLUGINHOST_VST | |||
#if JUCE_PLUGINHOST_VST && ! (JUCE_MAC && JUCE_64BIT) | |||
jassert (dynamic_cast <VSTPluginFormat*> (formats[i]) == 0); | |||
#endif | |||
@@ -78,7 +78,7 @@ void AudioPluginFormatManager::addDefaultFormats() | |||
formats.add (new AudioUnitPluginFormat()); | |||
#endif | |||
#if JUCE_PLUGINHOST_VST | |||
#if JUCE_PLUGINHOST_VST && ! (JUCE_MAC && JUCE_64BIT) | |||
formats.add (new VSTPluginFormat()); | |||
#endif | |||
@@ -579,7 +579,7 @@ private: | |||
CriticalSection callbackLock, listenerLock; | |||
#ifdef JUCE_DEBUG | |||
BitArray changingParams; | |||
BigInteger changingParams; | |||
#endif | |||
AudioProcessor (const AudioProcessor&); | |||
@@ -34,7 +34,7 @@ BEGIN_JUCE_NAMESPACE | |||
//============================================================================== | |||
SamplerSound::SamplerSound (const String& name_, | |||
AudioFormatReader& source, | |||
const BitArray& midiNotes_, | |||
const BigInteger& midiNotes_, | |||
const int midiNoteForNormalPitch, | |||
const double attackTimeSecs, | |||
const double releaseTimeSecs, | |||
@@ -66,7 +66,7 @@ public: | |||
*/ | |||
SamplerSound (const String& name, | |||
AudioFormatReader& source, | |||
const BitArray& midiNotes, | |||
const BigInteger& midiNotes, | |||
const int midiNoteForNormalPitch, | |||
const double attackTimeSecs, | |||
const double releaseTimeSecs, | |||
@@ -99,7 +99,7 @@ private: | |||
String name; | |||
ScopedPointer <AudioSampleBuffer> data; | |||
double sourceSampleRate; | |||
BitArray midiNotes; | |||
BigInteger midiNotes; | |||
int length, attackSamples, releaseSamples; | |||
int midiRootNote; | |||
}; | |||
@@ -288,7 +288,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (elementToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -683,7 +683,7 @@ public: | |||
{ | |||
if (valueToRemove == *e) | |||
{ | |||
remove ((int) (e - data.elements.getData())); | |||
remove (static_cast <int> (e - data.elements.getData())); | |||
break; | |||
} | |||
@@ -711,7 +711,7 @@ public: | |||
if (endIndex > startIndex) | |||
{ | |||
ElementType* e = data.elements + startIndex; | |||
ElementType* const e = data.elements + startIndex; | |||
numberToRemove = endIndex - startIndex; | |||
for (int i = 0; i < numberToRemove; ++i) | |||
@@ -27,77 +27,89 @@ | |||
#define __JUCE_BITARRAY_JUCEHEADER__ | |||
#include "../text/juce_String.h" | |||
#include "juce_Array.h" | |||
#include "juce_HeapBlock.h" | |||
class MemoryBlock; | |||
//============================================================================== | |||
/** | |||
An array of on/off bits, also usable to store large binary integers. | |||
An arbitrarily large integer class. | |||
A BitArray acts like an arbitrarily large integer whose bits can be set or | |||
cleared, and some basic mathematical operations can be done on the number as | |||
a whole. | |||
A BigInteger can be used in a similar way to a normal integer, but has no size | |||
limit (except for memory and performance constraints). | |||
Negative values are possible, but the value isn't stored as 2s-complement, so | |||
be careful if you use negative values and look at the values of individual bits. | |||
*/ | |||
class JUCE_API BitArray | |||
class JUCE_API BigInteger | |||
{ | |||
public: | |||
//============================================================================== | |||
/** Creates an empty BitArray */ | |||
BitArray() throw(); | |||
/** Creates an empty BigInteger */ | |||
BigInteger(); | |||
/** Creates a BitArray containing an integer value in its low bits. | |||
/** Creates a BigInteger containing an integer value in its low bits. | |||
The low 32 bits of the array are initialised with this value. | |||
The low 32 bits of the number are initialised with this value. | |||
*/ | |||
BitArray (const unsigned int value) throw(); | |||
BigInteger (unsigned int value); | |||
/** Creates a BitArray containing an integer value in its low bits. | |||
/** Creates a BigInteger containing an integer value in its low bits. | |||
The low 32 bits of the array are initialised with the absolute value | |||
The low 32 bits of the number are initialised with the absolute value | |||
passed in, and its sign is set to reflect the sign of the number. | |||
*/ | |||
BitArray (const int value) throw(); | |||
BigInteger (int value); | |||
/** Creates a BitArray containing an integer value in its low bits. | |||
/** Creates a BigInteger containing an integer value in its low bits. | |||
The low 64 bits of the array are initialised with the absolute value | |||
The low 64 bits of the number are initialised with the absolute value | |||
passed in, and its sign is set to reflect the sign of the number. | |||
*/ | |||
BitArray (int64 value) throw(); | |||
BigInteger (int64 value); | |||
/** Creates a copy of another BitArray. */ | |||
BitArray (const BitArray& other) throw(); | |||
/** Creates a copy of another BigInteger. */ | |||
BigInteger (const BigInteger& other); | |||
/** Destructor. */ | |||
~BitArray() throw(); | |||
~BigInteger(); | |||
//============================================================================== | |||
/** Copies another BitArray onto this one. */ | |||
BitArray& operator= (const BitArray& other) throw(); | |||
/** Copies another BigInteger onto this one. */ | |||
BigInteger& operator= (const BigInteger& other); | |||
/** Two arrays are the same if the same bits are set. */ | |||
bool operator== (const BitArray& other) const throw(); | |||
/** Two arrays are the same if the same bits are set. */ | |||
bool operator!= (const BitArray& other) const throw(); | |||
/** Swaps the internal contents of this with another object. */ | |||
void swapWith (BigInteger& other) throw(); | |||
//============================================================================== | |||
/** Clears all bits in the BitArray to 0. */ | |||
void clear() throw(); | |||
/** Returns the value of a specified bit in the number. | |||
If the index is out-of-range, the result will be false. | |||
*/ | |||
bool operator[] (int bit) const throw(); | |||
/** Clears a particular bit in the array. */ | |||
void clearBit (const int bitNumber) throw(); | |||
/** Returns true if no bits are set. */ | |||
bool isZero() const throw(); | |||
/** Sets a specified bit to 1. | |||
/** Returns true if the value is 1. */ | |||
bool isOne() const throw(); | |||
If the bit number is high, this will grow the array to accomodate it. | |||
/** Attempts to get the lowest bits of the value as an integer. | |||
If the value is bigger than the integer limits, this will return only the lower bits. | |||
*/ | |||
void setBit (const int bitNumber) throw(); | |||
int toInteger() const throw(); | |||
//============================================================================== | |||
/** Resets the value to 0. */ | |||
void clear(); | |||
/** Clears a particular bit in the number. */ | |||
void clearBit (int bitNumber) throw(); | |||
/** Sets a specified bit to 1. */ | |||
void setBit (int bitNumber); | |||
/** Sets or clears a specified bit. */ | |||
void setBit (const int bitNumber, | |||
const bool shouldBeSet) throw(); | |||
void setBit (int bitNumber, bool shouldBeSet); | |||
/** Sets a range of bits to be either on or off. | |||
@@ -105,32 +117,19 @@ public: | |||
@param numBits the number of bits to change | |||
@param shouldBeSet whether to turn these bits on or off | |||
*/ | |||
void setRange (int startBit, | |||
int numBits, | |||
const bool shouldBeSet) throw(); | |||
void setRange (int startBit, int numBits, bool shouldBeSet); | |||
/** Inserts a bit an a given position, shifting up any bits above it. */ | |||
void insertBit (const int bitNumber, | |||
const bool shouldBeSet) throw(); | |||
/** Returns the value of a specified bit in the array. | |||
void insertBit (int bitNumber, bool shouldBeSet); | |||
If the index is out-of-range, the result will be false. | |||
*/ | |||
bool operator[] (const int bit) const throw(); | |||
/** Returns true if no bits are set. */ | |||
bool isEmpty() const throw(); | |||
//============================================================================== | |||
/** Returns a range of bits in the array as a new BitArray. | |||
/** Returns a range of bits as a new BigInteger. | |||
e.g. getBitRangeAsInt (0, 64) would return the lowest 64 bits. | |||
@see getBitRangeAsInt | |||
*/ | |||
const BitArray getBitRange (int startBit, int numBits) const throw(); | |||
const BigInteger getBitRange (int startBit, int numBits) const; | |||
/** Returns a range of bits in the array as an integer value. | |||
/** Returns a range of bits as an integer value. | |||
e.g. getBitRangeAsInt (0, 32) would return the lowest 32 bits. | |||
@@ -139,206 +138,191 @@ public: | |||
*/ | |||
int getBitRangeAsInt (int startBit, int numBits) const throw(); | |||
/** Sets a range of bits in the array based on an integer value. | |||
/** Sets a range of bits to an integer value. | |||
Copies the given integer into the array, starting at startBit, | |||
and only using up to numBits of the available bits. | |||
Copies the given integer onto a range of bits, starting at startBit, | |||
and using up to numBits of the available bits. | |||
*/ | |||
void setBitRangeAsInt (int startBit, int numBits, | |||
unsigned int valueToSet) throw(); | |||
void setBitRangeAsInt (int startBit, int numBits, unsigned int valueToSet); | |||
//============================================================================== | |||
/** Performs a bitwise OR with another BitArray. | |||
/** Shifts a section of bits left or right. | |||
The result ends up in this array. | |||
@param howManyBitsLeft how far to move the bits (+ve numbers shift it left, -ve numbers shift it right). | |||
@param startBit the first bit to affect - if this is > 0, only bits above that index will be affected. | |||
*/ | |||
void orWith (const BitArray& other) throw(); | |||
void shiftBits (int howManyBitsLeft, int startBit); | |||
/** Performs a bitwise AND with another BitArray. | |||
/** Returns the total number of set bits in the value. */ | |||
int countNumberOfSetBits() const throw(); | |||
The result ends up in this array. | |||
/** Looks for the index of the next set bit after a given starting point. | |||
This searches from startIndex (inclusive) upwards for the first set bit, | |||
and returns its index. If no set bits are found, it returns -1. | |||
*/ | |||
void andWith (const BitArray& other) throw(); | |||
int findNextSetBit (int startIndex = 0) const throw(); | |||
/** Performs a bitwise XOR with another BitArray. | |||
/** Looks for the index of the next clear bit after a given starting point. | |||
The result ends up in this array. | |||
This searches from startIndex (inclusive) upwards for the first clear bit, | |||
and returns its index. | |||
*/ | |||
void xorWith (const BitArray& other) throw(); | |||
/** Adds another BitArray's value to this one. | |||
int findNextClearBit (int startIndex = 0) const throw(); | |||
Treating the two arrays as large positive integers, this | |||
adds them up and puts the result in this array. | |||
/** Returns the index of the highest set bit in the number. | |||
If the value is zero, this will return -1. | |||
*/ | |||
void add (const BitArray& other) throw(); | |||
int getHighestBit() const throw(); | |||
/** Subtracts another BitArray's value from this one. | |||
//============================================================================== | |||
// All the standard arithmetic ops... | |||
BigInteger& operator+= (const BigInteger& other); | |||
BigInteger& operator-= (const BigInteger& other); | |||
BigInteger& operator*= (const BigInteger& other); | |||
BigInteger& operator/= (const BigInteger& other); | |||
BigInteger& operator|= (const BigInteger& other); | |||
BigInteger& operator&= (const BigInteger& other); | |||
BigInteger& operator^= (const BigInteger& other); | |||
BigInteger& operator%= (const BigInteger& other); | |||
BigInteger& operator<<= (int numBitsToShift); | |||
BigInteger& operator>>= (int numBitsToShift); | |||
BigInteger& operator++(); | |||
BigInteger& operator--(); | |||
const BigInteger operator++ (int); | |||
const BigInteger operator-- (int); | |||
const BigInteger operator-() const; | |||
const BigInteger operator+ (const BigInteger& other) const; | |||
const BigInteger operator- (const BigInteger& other) const; | |||
const BigInteger operator* (const BigInteger& other) const; | |||
const BigInteger operator/ (const BigInteger& other) const; | |||
const BigInteger operator| (const BigInteger& other) const; | |||
const BigInteger operator& (const BigInteger& other) const; | |||
const BigInteger operator^ (const BigInteger& other) const; | |||
const BigInteger operator% (const BigInteger& other) const; | |||
const BigInteger operator<< (int numBitsToShift) const; | |||
const BigInteger operator>> (int numBitsToShift) const; | |||
bool operator== (const BigInteger& other) const throw(); | |||
bool operator!= (const BigInteger& other) const throw(); | |||
bool operator< (const BigInteger& other) const throw(); | |||
bool operator<= (const BigInteger& other) const throw(); | |||
bool operator> (const BigInteger& other) const throw(); | |||
bool operator>= (const BigInteger& other) const throw(); | |||
Treating the two arrays as large positive integers, this | |||
subtracts them and puts the result in this array. | |||
//============================================================================== | |||
/** Does a signed comparison of two BigIntegers. | |||
Note that if the result should be negative, this won't be | |||
handled correctly. | |||
Return values are: | |||
- 0 if the numbers are the same | |||
- < 0 if this number is smaller than the other | |||
- > 0 if this number is bigger than the other | |||
*/ | |||
void subtract (const BitArray& other) throw(); | |||
int compare (const BigInteger& other) const throw(); | |||
/** Multiplies another BitArray's value with this one. | |||
/** Compares the magnitudes of two BigIntegers, ignoring their signs. | |||
Treating the two arrays as large positive integers, this | |||
multiplies them and puts the result in this array. | |||
Return values are: | |||
- 0 if the numbers are the same | |||
- < 0 if this number is smaller than the other | |||
- > 0 if this number is bigger than the other | |||
*/ | |||
void multiplyBy (const BitArray& other) throw(); | |||
int compareAbsolute (const BigInteger& other) const throw(); | |||
/** Divides another BitArray's value into this one and also produces a remainder. | |||
/** Divides this value by another one and returns the remainder. | |||
Treating the two arrays as large positive integers, this | |||
divides this value by the other, leaving the quotient in this | |||
array, and the remainder is copied into the other BitArray passed in. | |||
This number is divided by other, leaving the quotient in this number, | |||
with the remainder being copied to the other BigInteger passed in. | |||
*/ | |||
void divideBy (const BitArray& divisor, BitArray& remainder) throw(); | |||
/** Returns the largest value that will divide both this value and the one | |||
passed-in. | |||
*/ | |||
const BitArray findGreatestCommonDivisor (BitArray other) const throw(); | |||
/** Performs a modulo operation on this value. | |||
void divideBy (const BigInteger& divisor, BigInteger& remainder); | |||
The result is stored in this value. | |||
/** Returns the largest value that will divide both this value and the one passed-in. | |||
*/ | |||
void modulo (const BitArray& divisor) throw(); | |||
const BigInteger findGreatestCommonDivisor (BigInteger other) const; | |||
/** Performs a combined exponent and modulo operation. | |||
This BitArray's value becomes (this ^ exponent) % modulus. | |||
This BigInteger's value becomes (this ^ exponent) % modulus. | |||
*/ | |||
void exponentModulo (const BitArray& exponent, const BitArray& modulus) throw(); | |||
void exponentModulo (const BigInteger& exponent, const BigInteger& modulus); | |||
/** Performs an inverse modulo on the value. | |||
i.e. the result is (this ^ -1) mod (modulus). | |||
*/ | |||
void inverseModulo (const BitArray& modulus) throw(); | |||
/** Shifts a section of bits left or right. | |||
@param howManyBitsLeft how far to move the bits (+ve numbers shift it left, -ve numbers shift it right). | |||
@param startBit the first bit to affect - if this is > 0, only bits above that index will be affected. | |||
*/ | |||
void shiftBits (int howManyBitsLeft, | |||
int startBit = 0) throw(); | |||
/** Does a signed comparison of two BitArrays. | |||
Return values are: | |||
- 0 if the numbers are the same | |||
- < 0 if this number is smaller than the other | |||
- > 0 if this number is bigger than the other | |||
*/ | |||
int compare (const BitArray& other) const throw(); | |||
/** Compares the magnitudes of two BitArrays, ignoring their signs. | |||
Return values are: | |||
- 0 if the numbers are the same | |||
- < 0 if this number is smaller than the other | |||
- > 0 if this number is bigger than the other | |||
*/ | |||
int compareAbsolute (const BitArray& other) const throw(); | |||
void inverseModulo (const BigInteger& modulus); | |||
//============================================================================== | |||
/** Returns true if the value is less than zero. | |||
@see setNegative, negate | |||
*/ | |||
bool isNegative() const throw(); | |||
/** Changes the sign of the number to be positive or negative. | |||
@see isNegative, negate | |||
*/ | |||
void setNegative (const bool shouldBeNegative) throw(); | |||
/** Inverts the sign of the number. | |||
@see isNegative, setNegative | |||
*/ | |||
void negate() throw(); | |||
//============================================================================== | |||
/** Counts the total number of set bits in the array. */ | |||
int countNumberOfSetBits() const throw(); | |||
/** Looks for the index of the next set bit after a given starting point. | |||
searches from startIndex (inclusive) upwards for the first set bit, | |||
and returns its index. | |||
If no set bits are found, it returns -1. | |||
*/ | |||
int findNextSetBit (int startIndex = 0) const throw(); | |||
/** Looks for the index of the next clear bit after a given starting point. | |||
searches from startIndex (inclusive) upwards for the first clear bit, | |||
and returns its index. | |||
*/ | |||
int findNextClearBit (int startIndex = 0) const throw(); | |||
/** Returns the index of the highest set bit in the array. | |||
If the array is empty, this will return -1. | |||
*/ | |||
int getHighestBit() const throw(); | |||
//============================================================================== | |||
/** Converts the array to a number string. | |||
/** Converts the number to a string. | |||
Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). | |||
If minuimumNumCharacters is greater than 0, the returned string will be | |||
If minimumNumCharacters is greater than 0, the returned string will be | |||
padded with leading zeros to reach at least that length. | |||
*/ | |||
const String toString (const int base, const int minimumNumCharacters = 1) const throw(); | |||
/** Converts a number string to an array. | |||
const String toString (int base, int minimumNumCharacters = 1) const; | |||
Any non-valid characters will be ignored. | |||
/** Reads the numeric value from a string. | |||
Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). | |||
Any invalid characters will be ignored. | |||
*/ | |||
void parseString (const String& text, | |||
const int base) throw(); | |||
void parseString (const String& text, int base); | |||
//============================================================================== | |||
/** Turns the array into a block of binary data. | |||
/** Turns the number into a block of binary data. | |||
The data is arranged as little-endian, so the first byte of data is the low 8 bits | |||
of the array, and so on. | |||
of the number, and so on. | |||
@see loadFromMemoryBlock | |||
*/ | |||
const MemoryBlock toMemoryBlock() const throw(); | |||
const MemoryBlock toMemoryBlock() const; | |||
/** Copies a block of raw data onto this array. | |||
/** Converts a block of raw data into a number. | |||
The data is arranged as little-endian, so the first byte of data is the low 8 bits | |||
of the array, and so on. | |||
of the number, and so on. | |||
@see toMemoryBlock | |||
*/ | |||
void loadFromMemoryBlock (const MemoryBlock& data) throw(); | |||
void loadFromMemoryBlock (const MemoryBlock& data); | |||
//============================================================================== | |||
juce_UseDebuggingNewOperator | |||
private: | |||
void ensureSize (const int numVals) throw(); | |||
HeapBlock <unsigned int> values; | |||
int numValues, highestBit; | |||
bool negative; | |||
void ensureSize (int numVals); | |||
static const BigInteger simpleGCD (BigInteger* m, BigInteger* n); | |||
}; | |||
/** Writes a BigInteger to an OutputStream as a UTF8 decimal string. */ | |||
OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const BigInteger& value); | |||
//============================================================================== | |||
/** For backwards compatibility, BitArray is defined to be an alias for BigInteger. | |||
*/ | |||
typedef BigInteger BitArray; | |||
#endif // __JUCE_BITARRAY_JUCEHEADER__ |
@@ -165,7 +165,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (objectToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -466,7 +466,7 @@ public: | |||
{ | |||
if (objectToRemove == *e) | |||
{ | |||
remove ((int) (e - data.elements.getData()), deleteObject); | |||
remove (static_cast <int> (e - data.elements.getData()), deleteObject); | |||
break; | |||
} | |||
@@ -184,7 +184,7 @@ public: | |||
while (e != end) | |||
{ | |||
if (objectToLookFor == *e) | |||
return (int) (e - data.elements.getData()); | |||
return static_cast <int> (e - data.elements.getData()); | |||
++e; | |||
} | |||
@@ -34,9 +34,9 @@ | |||
/** | |||
Holds a set of primitive values, storing them as a set of ranges. | |||
This container acts like a simple BitArray, but can efficiently hold large | |||
continguous ranges of values. It's quite a specialised class, mostly useful | |||
for things like keeping the set of selected rows in a listbox. | |||
This container acts like an array, but can efficiently hold large continguous | |||
ranges of values. It's quite a specialised class, mostly useful for things | |||
like keeping the set of selected rows in a listbox. | |||
The type used as a template paramter must be an integer type, such as int, short, | |||
int64, etc. | |||
@@ -94,20 +94,20 @@ double Random::nextDouble() throw() | |||
return static_cast <uint32> (nextInt()) / (double) 0xffffffff; | |||
} | |||
const BitArray Random::nextLargeNumber (const BitArray& maximumValue) throw() | |||
const BigInteger Random::nextLargeNumber (const BigInteger& maximumValue) | |||
{ | |||
BitArray n; | |||
BigInteger n; | |||
do | |||
{ | |||
fillBitsRandomly (n, 0, maximumValue.getHighestBit() + 1); | |||
} | |||
while (n.compare (maximumValue) >= 0); | |||
while (n >= maximumValue); | |||
return n; | |||
} | |||
void Random::fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw() | |||
void Random::fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits) | |||
{ | |||
arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space | |||
@@ -84,14 +84,14 @@ public: | |||
*/ | |||
bool nextBool() throw(); | |||
/** Returns a BitArray containing a random number. | |||
/** Returns a BigInteger containing a random number. | |||
@returns a random value in the range 0 to (maximumValue - 1). | |||
*/ | |||
const BitArray nextLargeNumber (const BitArray& maximumValue) throw(); | |||
const BigInteger nextLargeNumber (const BigInteger& maximumValue); | |||
/** Sets a range of bits in a BitArray to random values. */ | |||
void fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw(); | |||
/** Sets a range of bits in a BigInteger to random values. */ | |||
void fillBitsRandomly (BigInteger& arrayToChange, int startBit, int numBits); | |||
//============================================================================== | |||
/** To avoid the overhead of having to create a new Random object whenever | |||
@@ -33,7 +33,7 @@ | |||
*/ | |||
#define JUCE_MAJOR_VERSION 1 | |||
#define JUCE_MINOR_VERSION 51 | |||
#define JUCE_BUILDNUMBER 10 | |||
#define JUCE_BUILDNUMBER 11 | |||
/** Current Juce version number. | |||
@@ -35,7 +35,7 @@ BEGIN_JUCE_NAMESPACE | |||
//============================================================================== | |||
namespace PrimesHelpers | |||
{ | |||
static void createSmallSieve (const int numBits, BitArray& result) throw() | |||
static void createSmallSieve (const int numBits, BigInteger& result) | |||
{ | |||
result.setBit (numBits); | |||
result.clearBit (numBits); // to enlarge the array | |||
@@ -53,11 +53,8 @@ namespace PrimesHelpers | |||
while (n <= (numBits >> 1)); | |||
} | |||
static void bigSieve (const BitArray& base, | |||
const int numBits, | |||
BitArray& result, | |||
const BitArray& smallSieve, | |||
const int smallSieveSize) throw() | |||
static void bigSieve (const BigInteger& base, const int numBits, BigInteger& result, | |||
const BigInteger& smallSieve, const int smallSieveSize) | |||
{ | |||
jassert (! base[0]); // must be even! | |||
@@ -70,13 +67,12 @@ namespace PrimesHelpers | |||
{ | |||
const int prime = (index << 1) + 1; | |||
BitArray r (base); | |||
BitArray remainder; | |||
BigInteger r (base), remainder; | |||
r.divideBy (prime, remainder); | |||
int i = prime - remainder.getBitRangeAsInt (0, 32); | |||
if (r.isEmpty()) | |||
if (r.isZero()) | |||
i += prime; | |||
if ((i & 1) == 0) | |||
@@ -95,18 +91,14 @@ namespace PrimesHelpers | |||
while (index < smallSieveSize); | |||
} | |||
static bool findCandidate (const BitArray& base, | |||
const BitArray& sieve, | |||
const int numBits, | |||
BitArray& result, | |||
const int certainty) throw() | |||
static bool findCandidate (const BigInteger& base, const BigInteger& sieve, | |||
const int numBits, BigInteger& result, const int certainty) | |||
{ | |||
for (int i = 0; i < numBits; ++i) | |||
{ | |||
if (! sieve[i]) | |||
{ | |||
result = base; | |||
result.add (BitArray ((unsigned int) ((i << 1) + 1))); | |||
result = base + (unsigned int) ((i << 1) + 1); | |||
if (Primes::isProbablyPrime (result, certainty)) | |||
return true; | |||
@@ -115,13 +107,63 @@ namespace PrimesHelpers | |||
return false; | |||
} | |||
static bool passesMillerRabin (const BigInteger& n, int iterations) | |||
{ | |||
const BigInteger one (1), two (2); | |||
const BigInteger nMinusOne (n - one); | |||
BigInteger d (nMinusOne); | |||
const int s = d.findNextSetBit (0); | |||
d >>= s; | |||
BigInteger smallPrimes; | |||
int numBitsInSmallPrimes = 0; | |||
for (;;) | |||
{ | |||
numBitsInSmallPrimes += 256; | |||
createSmallSieve (numBitsInSmallPrimes, smallPrimes); | |||
const int numPrimesFound = numBitsInSmallPrimes - smallPrimes.countNumberOfSetBits(); | |||
if (numPrimesFound > iterations + 1) | |||
break; | |||
} | |||
int smallPrime = 2; | |||
while (--iterations >= 0) | |||
{ | |||
smallPrime = smallPrimes.findNextClearBit (smallPrime + 1); | |||
BigInteger r (smallPrime); | |||
r.exponentModulo (d, n); | |||
if (r != one && r != nMinusOne) | |||
{ | |||
for (int j = 0; j < s; ++j) | |||
{ | |||
r.exponentModulo (two, n); | |||
if (r == nMinusOne) | |||
break; | |||
} | |||
if (r != nMinusOne) | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
} | |||
//============================================================================== | |||
const BitArray Primes::createProbablePrime (const int bitLength, | |||
const int certainty, | |||
const int* randomSeeds, | |||
int numRandomSeeds) throw() | |||
const BigInteger Primes::createProbablePrime (const int bitLength, | |||
const int certainty, | |||
const int* randomSeeds, | |||
int numRandomSeeds) | |||
{ | |||
using namespace PrimesHelpers; | |||
int defaultSeeds [16]; | |||
@@ -141,20 +183,20 @@ const BitArray Primes::createProbablePrime (const int bitLength, | |||
} | |||
} | |||
BitArray smallSieve; | |||
BigInteger smallSieve; | |||
const int smallSieveSize = 15000; | |||
createSmallSieve (smallSieveSize, smallSieve); | |||
BitArray p; | |||
BigInteger p; | |||
for (int i = numRandomSeeds; --i >= 0;) | |||
{ | |||
BitArray p2; | |||
BigInteger p2; | |||
Random r (randomSeeds[i]); | |||
r.fillBitsRandomly (p2, 0, bitLength); | |||
p.xorWith (p2); | |||
p ^= p2; | |||
} | |||
p.setBit (bitLength - 1); | |||
@@ -164,81 +206,26 @@ const BitArray Primes::createProbablePrime (const int bitLength, | |||
while (p.getHighestBit() < bitLength) | |||
{ | |||
p.add (2 * searchLen); | |||
p += 2 * searchLen; | |||
BitArray sieve; | |||
BigInteger sieve; | |||
bigSieve (p, searchLen, sieve, | |||
smallSieve, smallSieveSize); | |||
BitArray candidate; | |||
BigInteger candidate; | |||
if (findCandidate (p, sieve, searchLen, candidate, certainty)) | |||
return candidate; | |||
} | |||
jassertfalse | |||
return BitArray(); | |||
return BigInteger(); | |||
} | |||
static bool passesMillerRabin (const BitArray& n, int iterations) throw() | |||
bool Primes::isProbablyPrime (const BigInteger& number, const int certainty) | |||
{ | |||
using namespace PrimesHelpers; | |||
const BitArray one (1); | |||
const BitArray two (2); | |||
BitArray nMinusOne (n); | |||
nMinusOne.subtract (one); | |||
BitArray d (nMinusOne); | |||
const int s = d.findNextSetBit (0); | |||
d.shiftBits (-s); | |||
BitArray smallPrimes; | |||
int numBitsInSmallPrimes = 0; | |||
for (;;) | |||
{ | |||
numBitsInSmallPrimes += 256; | |||
createSmallSieve (numBitsInSmallPrimes, smallPrimes); | |||
const int numPrimesFound = numBitsInSmallPrimes - smallPrimes.countNumberOfSetBits(); | |||
if (numPrimesFound > iterations + 1) | |||
break; | |||
} | |||
int smallPrime = 2; | |||
while (--iterations >= 0) | |||
{ | |||
smallPrime = smallPrimes.findNextClearBit (smallPrime + 1); | |||
BitArray r (smallPrime); | |||
//r.createRandomNumber (nMinusOne); | |||
r.exponentModulo (d, n); | |||
if (! (r == one || r == nMinusOne)) | |||
{ | |||
for (int j = 0; j < s; ++j) | |||
{ | |||
r.exponentModulo (two, n); | |||
if (r == nMinusOne) | |||
break; | |||
} | |||
if (r != nMinusOne) | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
bool Primes::isProbablyPrime (const BitArray& number, | |||
const int certainty) throw() | |||
{ | |||
if (! number[0]) | |||
return false; | |||
@@ -254,9 +241,7 @@ bool Primes::isProbablyPrime (const BitArray& number, | |||
} | |||
else | |||
{ | |||
const BitArray screen (2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23); | |||
if (number.findGreatestCommonDivisor (screen) != BitArray (1)) | |||
if (number.findGreatestCommonDivisor (2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23) != 1) | |||
return false; | |||
return passesMillerRabin (number, certainty); | |||
@@ -35,7 +35,7 @@ | |||
This class contains static methods for generating and testing prime numbers. | |||
@see BitArray | |||
@see BigInteger | |||
*/ | |||
class JUCE_API Primes | |||
{ | |||
@@ -50,10 +50,10 @@ public: | |||
which to seed the random number generation, improving the security of the | |||
keys generated. | |||
*/ | |||
static const BitArray createProbablePrime (int bitLength, | |||
int certainty, | |||
const int* randomSeeds = 0, | |||
int numRandomSeeds = 0) throw(); | |||
static const BigInteger createProbablePrime (int bitLength, | |||
int certainty, | |||
const int* randomSeeds = 0, | |||
int numRandomSeeds = 0); | |||
/** Tests a number to see if it's prime. | |||
@@ -63,8 +63,7 @@ public: | |||
The certainty parameter specifies how many iterations to use when testing - a | |||
safe value might be anything over about 20-30. | |||
*/ | |||
static bool isProbablyPrime (const BitArray& number, | |||
int certainty) throw(); | |||
static bool isProbablyPrime (const BigInteger& number, int certainty); | |||
}; | |||
@@ -33,11 +33,11 @@ BEGIN_JUCE_NAMESPACE | |||
//============================================================================== | |||
RSAKey::RSAKey() throw() | |||
RSAKey::RSAKey() | |||
{ | |||
} | |||
RSAKey::RSAKey (const String& s) throw() | |||
RSAKey::RSAKey (const String& s) | |||
{ | |||
if (s.containsChar (T(','))) | |||
{ | |||
@@ -51,97 +51,75 @@ RSAKey::RSAKey (const String& s) throw() | |||
} | |||
} | |||
RSAKey::~RSAKey() throw() | |||
RSAKey::~RSAKey() | |||
{ | |||
} | |||
const String RSAKey::toString() const throw() | |||
const String RSAKey::toString() const | |||
{ | |||
return part1.toString (16) + T(",") + part2.toString (16); | |||
return part1.toString (16) + "," + part2.toString (16); | |||
} | |||
bool RSAKey::applyToValue (BitArray& value) const throw() | |||
bool RSAKey::applyToValue (BigInteger& value) const | |||
{ | |||
if (part1.isEmpty() || part2.isEmpty() | |||
|| value.compare (0) <= 0) | |||
if (part1.isZero() || part2.isZero() || value <= 0) | |||
{ | |||
jassertfalse // using an uninitialised key | |||
value.clear(); | |||
return false; | |||
} | |||
BitArray result; | |||
BigInteger result; | |||
while (! value.isEmpty()) | |||
while (! value.isZero()) | |||
{ | |||
result.multiplyBy (part2); | |||
result *= part2; | |||
BitArray remainder; | |||
BigInteger remainder; | |||
value.divideBy (part2, remainder); | |||
remainder.exponentModulo (part1, part2); | |||
result.add (remainder); | |||
result += remainder; | |||
} | |||
value = result; | |||
value.swapWith (result); | |||
return true; | |||
} | |||
static const BitArray findBestCommonDivisor (const BitArray& p, | |||
const BitArray& q) throw() | |||
static const BigInteger findBestCommonDivisor (const BigInteger& p, const BigInteger& q) | |||
{ | |||
const BitArray one (1); | |||
// try 3, 5, 9, 17, etc first because these only contain 2 bits and so | |||
// are fast to divide + multiply | |||
for (int i = 2; i <= 65536; i *= 2) | |||
{ | |||
const BitArray e (1 + i); | |||
const BigInteger e (1 + i); | |||
if (e.findGreatestCommonDivisor (p) == one | |||
&& e.findGreatestCommonDivisor (q) == one) | |||
{ | |||
if (e.findGreatestCommonDivisor (p).isOne() && e.findGreatestCommonDivisor (q).isOne()) | |||
return e; | |||
} | |||
} | |||
BitArray e (4); | |||
BigInteger e (4); | |||
while (! (e.findGreatestCommonDivisor (p) == one | |||
&& e.findGreatestCommonDivisor (q) == one)) | |||
{ | |||
e.add (one); | |||
} | |||
while (! (e.findGreatestCommonDivisor (p).isOne() && e.findGreatestCommonDivisor (q).isOne())) | |||
++e; | |||
return e; | |||
} | |||
void RSAKey::createKeyPair (RSAKey& publicKey, | |||
RSAKey& privateKey, | |||
const int numBits, | |||
const int* randomSeeds, | |||
const int numRandomSeeds) throw() | |||
void RSAKey::createKeyPair (RSAKey& publicKey, RSAKey& privateKey, | |||
const int numBits, const int* randomSeeds, const int numRandomSeeds) | |||
{ | |||
jassert (numBits > 16); // not much point using less than this.. | |||
BitArray p (Primes::createProbablePrime (numBits / 2, 30, randomSeeds, numRandomSeeds)); | |||
BitArray q (Primes::createProbablePrime (numBits - numBits / 2, 30, randomSeeds, numRandomSeeds)); | |||
BitArray n (p); | |||
n.multiplyBy (q); // n = pq | |||
const BitArray one (1); | |||
p.subtract (one); | |||
q.subtract (one); | |||
BitArray m (p); | |||
m.multiplyBy (q); // m = (p - 1)(q - 1) | |||
BigInteger p (Primes::createProbablePrime (numBits / 2, 30, randomSeeds, numRandomSeeds)); | |||
BigInteger q (Primes::createProbablePrime (numBits - numBits / 2, 30, randomSeeds, numRandomSeeds)); | |||
const BitArray e (findBestCommonDivisor (p, q)); | |||
const BigInteger n (p * q); | |||
const BigInteger m (--p * --q); | |||
const BigInteger e (findBestCommonDivisor (p, q)); | |||
BitArray d (e); | |||
BigInteger d (e); | |||
d.inverseModulo (m); | |||
publicKey.part1 = e; | |||
@@ -44,23 +44,23 @@ public: | |||
Initialise a pair of objects for use with the createKeyPair() method. | |||
*/ | |||
RSAKey() throw(); | |||
RSAKey(); | |||
/** Loads a key from an encoded string representation. | |||
This reloads a key from a string created by the toString() method. | |||
*/ | |||
RSAKey (const String& stringRepresentation) throw(); | |||
RSAKey (const String& stringRepresentation); | |||
/** Destructor. */ | |||
~RSAKey() throw(); | |||
~RSAKey(); | |||
//============================================================================== | |||
/** Turns the key into a string representation. | |||
This can be reloaded using the constructor that takes a string. | |||
*/ | |||
const String toString() const throw(); | |||
const String toString() const; | |||
//============================================================================== | |||
/** Encodes or decodes a value. | |||
@@ -76,7 +76,7 @@ public: | |||
happily do its job and return true, but the result won't be what you were expecting. | |||
It's your responsibility to check that the result is what you wanted. | |||
*/ | |||
bool applyToValue (BitArray& value) const throw(); | |||
bool applyToValue (BigInteger& value) const; | |||
//============================================================================== | |||
/** Creates a public/private key-pair. | |||
@@ -93,16 +93,16 @@ public: | |||
*/ | |||
static void createKeyPair (RSAKey& publicKey, | |||
RSAKey& privateKey, | |||
const int numBits, | |||
int numBits, | |||
const int* randomSeeds = 0, | |||
const int numRandomSeeds = 0) throw(); | |||
int numRandomSeeds = 0); | |||
//============================================================================== | |||
juce_UseDebuggingNewOperator | |||
protected: | |||
BitArray part1, part2; | |||
BigInteger part1, part2; | |||
}; | |||
@@ -243,7 +243,7 @@ private: | |||
TableListBox& owner; | |||
int row; | |||
bool isSelected, isDragging, selectRowOnMouseUp; | |||
BitArray columnsWithComponents; | |||
BigInteger columnsWithComponents; | |||
Component* findChildComponentForColumn (const int columnId) const | |||
{ | |||
@@ -192,7 +192,7 @@ public: | |||
const int visibleTop = -getY(); | |||
const int visibleBottom = visibleTop + getParentHeight(); | |||
BitArray itemsToKeep; | |||
BigInteger itemsToKeep; | |||
TreeViewItem* item = owner->rootItem; | |||
int y = (item != 0 && !owner->rootItemVisible) ? -item->itemHeight : 0; | |||
@@ -101,7 +101,7 @@ FileBrowserComponent::FileBrowserComponent (int flags_, | |||
currentPathBox->setEditableText (true); | |||
StringArray rootNames, rootPaths; | |||
const BitArray separators (getRoots (rootNames, rootPaths)); | |||
const BigInteger separators (getRoots (rootNames, rootPaths)); | |||
for (int i = 0; i < rootNames.size(); ++i) | |||
{ | |||
@@ -457,9 +457,9 @@ void FileBrowserComponent::comboBoxChanged (ComboBox*) | |||
} | |||
} | |||
const BitArray FileBrowserComponent::getRoots (StringArray& rootNames, StringArray& rootPaths) | |||
const BigInteger FileBrowserComponent::getRoots (StringArray& rootNames, StringArray& rootPaths) | |||
{ | |||
BitArray separators; | |||
BigInteger separators; | |||
#if JUCE_WINDOWS | |||
Array<File> roots; | |||
@@ -203,7 +203,7 @@ public: | |||
juce_UseDebuggingNewOperator | |||
protected: | |||
virtual const BitArray getRoots (StringArray& rootNames, StringArray& rootPaths); | |||
virtual const BigInteger getRoots (StringArray& rootNames, StringArray& rootPaths); | |||
private: | |||
//============================================================================== | |||
@@ -856,9 +856,9 @@ public: | |||
if (setup.useStereoPairs) | |||
{ | |||
BitArray bits; | |||
BitArray& original = (type == audioInputType ? config.inputChannels | |||
: config.outputChannels); | |||
BigInteger bits; | |||
BigInteger& original = (type == audioInputType ? config.inputChannels | |||
: config.outputChannels); | |||
int i; | |||
for (i = 0; i < 256; i += 2) | |||
@@ -901,7 +901,7 @@ public: | |||
} | |||
} | |||
static void flipBit (BitArray& chans, int index, int minNumber, int maxNumber) | |||
static void flipBit (BigInteger& chans, int index, int minNumber, int maxNumber) | |||
{ | |||
const int numActive = chans.countNumberOfSetBits(); | |||
@@ -392,7 +392,7 @@ private: | |||
int midiChannel, midiInChannelMask; | |||
float velocity; | |||
int noteUnderMouse, mouseDownNote; | |||
BitArray keysPressed, keysCurrentlyDrawnDown; | |||
BigInteger keysPressed, keysCurrentlyDrawnDown; | |||
int rangeStart, rangeEnd, firstKey; | |||
bool canScroll, mouseDragging, useMousePositionForVelocity; | |||
@@ -362,8 +362,8 @@ public: | |||
close(); | |||
} | |||
void open (BitArray inputChannels, | |||
BitArray outputChannels, | |||
void open (BigInteger inputChannels, | |||
BigInteger outputChannels, | |||
const double sampleRate_, | |||
const int bufferSize_) | |||
{ | |||
@@ -581,7 +581,7 @@ public: | |||
String error; | |||
double sampleRate; | |||
int bufferSize; | |||
BitArray currentInputChans, currentOutputChans; | |||
BigInteger currentInputChans, currentOutputChans; | |||
Array <int> sampleRates; | |||
StringArray channelNamesOut, channelNamesIn; | |||
@@ -704,8 +704,8 @@ public: | |||
return 512; | |||
} | |||
const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSizeSamples) | |||
{ | |||
@@ -760,12 +760,12 @@ public: | |||
return internal->getBitDepth(); | |||
} | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
return internal->currentOutputChans; | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
return internal->currentInputChans; | |||
} | |||
@@ -211,7 +211,7 @@ public: | |||
int getBufferSizeSamples (int index) { return getDefaultBufferSize(); } | |||
int getDefaultBufferSize() { return client != 0 ? JUCE_NAMESPACE::jack_get_buffer_size (client) : 0; } | |||
const String open (const BitArray& inputChannels, const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, const BigInteger& outputChannels, | |||
double sampleRate, int bufferSizeSamples) | |||
{ | |||
if (client == 0) | |||
@@ -228,13 +228,13 @@ public: | |||
JUCE_NAMESPACE::jack_activate (client); | |||
isOpen_ = true; | |||
if (! inputChannels.isEmpty()) | |||
if (! inputChannels.isZero()) | |||
{ | |||
const char** const ports = JUCE_NAMESPACE::jack_get_ports (client, 0, 0, /* JackPortIsPhysical | */ JackPortIsOutput); | |||
if (ports != 0) | |||
{ | |||
const int numInputChannels = inputChannels.getHighestBit () + 1; | |||
const int numInputChannels = inputChannels.getHighestBit() + 1; | |||
for (int i = 0; i < numInputChannels; ++i) | |||
{ | |||
@@ -252,13 +252,13 @@ public: | |||
} | |||
} | |||
if (! outputChannels.isEmpty()) | |||
if (! outputChannels.isZero()) | |||
{ | |||
const char** const ports = JUCE_NAMESPACE::jack_get_ports (client, 0, 0, /* JackPortIsPhysical | */ JackPortIsInput); | |||
if (ports != 0) | |||
{ | |||
const int numOutputChannels = outputChannels.getHighestBit () + 1; | |||
const int numOutputChannels = outputChannels.getHighestBit() + 1; | |||
for (int i = 0; i < numOutputChannels; ++i) | |||
{ | |||
@@ -324,9 +324,9 @@ public: | |||
int getCurrentBitDepth() { return 32; } | |||
const String getLastError() { return lastError; } | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
BitArray outputBits; | |||
BigInteger outputBits; | |||
for (int i = 0; i < outputPorts.size(); i++) | |||
if (JUCE_NAMESPACE::jack_port_connected ((jack_port_t*) outputPorts [i])) | |||
@@ -335,9 +335,9 @@ public: | |||
return outputBits; | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
BitArray inputBits; | |||
BigInteger inputBits; | |||
for (int i = 0; i < inputPorts.size(); i++) | |||
if (JUCE_NAMESPACE::jack_port_connected ((jack_port_t*) inputPorts [i])) | |||
@@ -98,8 +98,8 @@ public: | |||
return 1024; | |||
} | |||
const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSize) | |||
{ | |||
@@ -178,12 +178,12 @@ public: | |||
return 16; | |||
} | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
return activeOutputChans; | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
return activeInputChans; | |||
} | |||
@@ -251,7 +251,7 @@ private: | |||
AudioUnit audioUnit; | |||
UInt32 audioInputIsAvailable; | |||
AudioIODeviceCallback* callback; | |||
BitArray activeOutputChans, activeInputChans; | |||
BigInteger activeOutputChans, activeInputChans; | |||
AudioSampleBuffer floatData; | |||
float* inputChannels[3]; | |||
@@ -421,8 +421,8 @@ public: | |||
} | |||
//============================================================================== | |||
const String reopen (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String reopen (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double newSampleRate, | |||
int bufferSizeSamples) | |||
{ | |||
@@ -761,7 +761,7 @@ public: | |||
juce_UseDebuggingNewOperator | |||
int inputLatency, outputLatency; | |||
BitArray activeInputChans, activeOutputChans; | |||
BigInteger activeInputChans, activeOutputChans; | |||
StringArray inChanNames, outChanNames; | |||
Array <double> sampleRates; | |||
Array <int> bufferSizes; | |||
@@ -960,8 +960,8 @@ public: | |||
return 512; | |||
} | |||
const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSizeSamples) | |||
{ | |||
@@ -1001,21 +1001,21 @@ public: | |||
return 32; // no way to find out, so just assume it's high.. | |||
} | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
return internal != 0 ? internal->activeOutputChans : BitArray(); | |||
return internal != 0 ? internal->activeOutputChans : BigInteger(); | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
BitArray chans; | |||
BigInteger chans; | |||
if (internal != 0) | |||
{ | |||
chans = internal->activeInputChans; | |||
if (internal->inputDevice != 0) | |||
chans.orWith (internal->inputDevice->activeInputChans); | |||
chans |= internal->inputDevice->activeInputChans; | |||
} | |||
return chans; | |||
@@ -186,8 +186,8 @@ public: | |||
return preferredSize; | |||
} | |||
const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sr, | |||
int bufferSizeSamples) | |||
{ | |||
@@ -653,12 +653,12 @@ public: | |||
return currentSampleRate; | |||
} | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
return currentChansOut; | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
return currentChansIn; | |||
} | |||
@@ -781,7 +781,7 @@ public: | |||
AudioIODeviceCallback* const oldCallback = currentCallback; | |||
close(); | |||
open (BitArray (currentChansIn), BitArray (currentChansOut), | |||
open (BigInteger (currentChansIn), BigInteger (currentChansOut), | |||
currentSampleRate, currentBlockSizeSamples); | |||
if (oldCallback != 0) | |||
@@ -817,7 +817,7 @@ private: | |||
int volatile currentBlockSizeSamples; | |||
int volatile currentBitDepth; | |||
double volatile currentSampleRate; | |||
BitArray currentChansOut, currentChansIn; | |||
BigInteger currentChansOut, currentChansIn; | |||
AudioIODeviceCallback* volatile currentCallback; | |||
CriticalSection callbackLock; | |||
@@ -1030,8 +1030,8 @@ public: | |||
return 2560; | |||
} | |||
const String open (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate, | |||
int bufferSizeSamples) | |||
{ | |||
@@ -1083,12 +1083,12 @@ public: | |||
return bits; | |||
} | |||
const BitArray getActiveOutputChannels() const | |||
const BigInteger getActiveOutputChannels() const | |||
{ | |||
return enabledOutputs; | |||
} | |||
const BitArray getActiveInputChannels() const | |||
const BigInteger getActiveInputChannels() const | |||
{ | |||
return enabledInputs; | |||
} | |||
@@ -1167,7 +1167,7 @@ private: | |||
int volatile totalSamplesOut; | |||
int64 volatile lastBlockTime; | |||
double sampleRate; | |||
BitArray enabledInputs, enabledOutputs; | |||
BigInteger enabledInputs, enabledOutputs; | |||
HeapBlock <float*> inputBuffers, outputBuffers; | |||
AudioIODeviceCallback* callback; | |||
@@ -1176,8 +1176,8 @@ private: | |||
DSoundAudioIODevice (const DSoundAudioIODevice&); | |||
DSoundAudioIODevice& operator= (const DSoundAudioIODevice&); | |||
const String openDevice (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String openDevice (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate_, | |||
int bufferSizeSamples_); | |||
@@ -1497,8 +1497,8 @@ private: | |||
}; | |||
//============================================================================== | |||
const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels, | |||
const BitArray& outputChannels, | |||
const String DSoundAudioIODevice::openDevice (const BigInteger& inputChannels, | |||
const BigInteger& outputChannels, | |||
double sampleRate_, | |||
int bufferSizeSamples_) | |||
{ | |||
@@ -182,7 +182,7 @@ public: | |||
bool isOk() const throw() { return defaultBufferSize > 0 && defaultSampleRate > 0; } | |||
bool openClient (const double newSampleRate, const BitArray& newChannels) | |||
bool openClient (const double newSampleRate, const BigInteger& newChannels) | |||
{ | |||
sampleRate = newSampleRate; | |||
channels = newChannels; | |||
@@ -232,7 +232,7 @@ public: | |||
const bool useExclusiveMode; | |||
Array <double> rates; | |||
HANDLE clientEvent; | |||
BitArray channels; | |||
BigInteger channels; | |||
AudioDataConverters::DataFormat dataFormat; | |||
Array <int> channelMaps; | |||
UINT32 actualBufferSize; | |||
@@ -338,7 +338,7 @@ public: | |||
close(); | |||
} | |||
bool open (const double newSampleRate, const BitArray& newChannels) | |||
bool open (const double newSampleRate, const BigInteger& newChannels) | |||
{ | |||
reservoirSize = 0; | |||
reservoirCapacity = 16384; | |||
@@ -483,7 +483,7 @@ public: | |||
close(); | |||
} | |||
bool open (const double newSampleRate, const BitArray& newChannels) | |||
bool open (const double newSampleRate, const BigInteger& newChannels) | |||
{ | |||
return openClient (newSampleRate, newChannels) | |||
&& (numChannels == 0 || OK (client->GetService (__uuidof (IAudioRenderClient), (void**) &renderClient))); | |||
@@ -674,12 +674,12 @@ public: | |||
int getCurrentBitDepth() { return 32; } | |||
int getOutputLatencyInSamples() { return latencyOut; } | |||
int getInputLatencyInSamples() { return latencyIn; } | |||
const BitArray getActiveOutputChannels() const { return outputDevice != 0 ? outputDevice->channels : BitArray(); } | |||
const BitArray getActiveInputChannels() const { return inputDevice != 0 ? inputDevice->channels : BitArray(); } | |||
const BigInteger getActiveOutputChannels() const { return outputDevice != 0 ? outputDevice->channels : BigInteger(); } | |||
const BigInteger getActiveInputChannels() const { return inputDevice != 0 ? inputDevice->channels : BigInteger(); } | |||
const String getLastError() { return lastError; } | |||
const String open (const BitArray& inputChannels, const BitArray& outputChannels, | |||
const String open (const BigInteger& inputChannels, const BigInteger& outputChannels, | |||
double sampleRate, int bufferSizeSamples) | |||
{ | |||
close(); | |||