@@ -100,6 +100,16 @@ const String SystemStats::getOperatingSystemName() throw() | |||||
return T("Linux"); | return T("Linux"); | ||||
} | } | ||||
bool SystemStats::isOperatingSystem64Bit() throw() | |||||
{ | |||||
#if JUCE_64BIT | |||||
return true; | |||||
#else | |||||
//xxx not sure how to find this out?.. | |||||
return false; | |||||
#endif | |||||
} | |||||
static const String getCpuInfo (const char* key, bool lastOne = false) throw() | static const String getCpuInfo (const char* key, bool lastOne = false) throw() | ||||
{ | { | ||||
String info; | String info; | ||||
@@ -940,7 +940,8 @@ public: | |||||
{ | { | ||||
jassert (x >= 0 && y >= 0 && x < ww && y < wh); // should only be called for points that are actually inside the bounds | jassert (x >= 0 && y >= 0 && x < ww && y < wh); // should only be called for points that are actually inside the bounds | ||||
if (x < 0 || y < 0 || x >= ww || y >= wh) | |||||
if (((unsigned int) x) >= (unsigned int) ww | |||||
|| ((unsigned int) y) >= (unsigned int) wh) | |||||
return false; | return false; | ||||
bool inFront = false; | bool inFront = false; | ||||
@@ -396,7 +396,7 @@ public: | |||||
if (types != 0) | if (types != 0) | ||||
{ | { | ||||
if (index >= 0 && index < num) | |||||
if (((unsigned int) index) < num) | |||||
{ | { | ||||
OSType id = types[index]; | OSType id = types[index]; | ||||
AudioDeviceSetProperty (deviceID, 0, 0, input, kAudioDevicePropertyDataSource, sizeof (id), &id); | AudioDeviceSetProperty (deviceID, 0, 0, input, kAudioDevicePropertyDataSource, sizeof (id), &id); | ||||
@@ -254,7 +254,7 @@ MidiOutput* MidiOutput::openDevice (int index) | |||||
{ | { | ||||
MidiOutput* mo = 0; | MidiOutput* mo = 0; | ||||
if (index >= 0 && index < (int) MIDIGetNumberOfDestinations()) | |||||
if (((unsigned int) index) < (unsigned int) MIDIGetNumberOfDestinations()) | |||||
{ | { | ||||
MIDIEndpointRef endPoint = MIDIGetDestination (index); | MIDIEndpointRef endPoint = MIDIGetDestination (index); | ||||
@@ -496,7 +496,7 @@ MidiInput* MidiInput::openDevice (int index, MidiInputCallback* callback) | |||||
{ | { | ||||
MidiInput* mi = 0; | MidiInput* mi = 0; | ||||
if (index >= 0 && index < (int) MIDIGetNumberOfSources()) | |||||
if (((unsigned int) index) < (unsigned int) MIDIGetNumberOfSources()) | |||||
{ | { | ||||
MIDIEndpointRef endPoint = MIDIGetSource (index); | MIDIEndpointRef endPoint = MIDIGetSource (index); | ||||
@@ -126,6 +126,16 @@ const String SystemStats::getOperatingSystemName() throw() | |||||
return T("Mac OS X"); | return T("Mac OS X"); | ||||
} | } | ||||
bool SystemStats::isOperatingSystem64Bit() throw() | |||||
{ | |||||
#if JUCE_64BIT | |||||
return true; | |||||
#else | |||||
//xxx not sure how to find this out?.. | |||||
return false; | |||||
#endif | |||||
} | |||||
//============================================================================== | //============================================================================== | ||||
void SystemStats::initialiseStats() throw() | void SystemStats::initialiseStats() throw() | ||||
{ | { | ||||
@@ -594,8 +594,8 @@ public: | |||||
bool contains (int x, int y, bool trueIfInAChildWindow) const | bool contains (int x, int y, bool trueIfInAChildWindow) const | ||||
{ | { | ||||
if (x < 0 || y < 0 | |||||
|| x >= component->getWidth() || y >= component->getHeight() | |||||
if (((unsigned int) x) >= (unsigned int) component->getWidth() | |||||
|| ((unsigned int) y) >= (unsigned int) component->getHeight() | |||||
|| ! IsValidWindowPtr (windowRef)) | || ! IsValidWindowPtr (windowRef)) | ||||
return false; | return false; | ||||
@@ -1708,7 +1708,7 @@ AudioCDReader* AudioCDReader::createReaderForCD (const int deviceIndex) | |||||
CDDeviceInfo list[8]; | CDDeviceInfo list[8]; | ||||
const int num = FindCDDevices (list, 8); | const int num = FindCDDevices (list, 8); | ||||
if (deviceIndex >= 0 && deviceIndex < num) | |||||
if (((unsigned int) deviceIndex) < (unsigned int) num) | |||||
{ | { | ||||
CDDeviceHandle* const handle = openHandle (&(list[deviceIndex])); | CDDeviceHandle* const handle = openHandle (&(list[deviceIndex])); | ||||
@@ -348,6 +348,23 @@ const String SystemStats::getOperatingSystemName() throw() | |||||
return name; | return name; | ||||
} | } | ||||
bool SystemStats::isOperatingSystem64Bit() throw() | |||||
{ | |||||
#ifdef _WIN64 | |||||
return true; | |||||
#else | |||||
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); | |||||
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle ("kernel32"), "IsWow64Process"); | |||||
BOOL isWow64 = FALSE; | |||||
return (fnIsWow64Process != 0) | |||||
&& fnIsWow64Process (GetCurrentProcess(), &isWow64) | |||||
&& (isWow64 != FALSE); | |||||
#endif | |||||
} | |||||
//============================================================================== | //============================================================================== | ||||
int SystemStats::getMemorySizeInMegabytes() throw() | int SystemStats::getMemorySizeInMegabytes() throw() | ||||
{ | { | ||||
@@ -1429,9 +1429,8 @@ private: | |||||
} | } | ||||
else if (! isDragging) | else if (! isDragging) | ||||
{ | { | ||||
if (x >= 0 && y >= 0 | |||||
&& x < component->getWidth() | |||||
&& y < component->getHeight()) | |||||
if (((unsigned int) x) < (unsigned int) component->getWidth() | |||||
&& ((unsigned int) y) < (unsigned int) component->getHeight()) | |||||
{ | { | ||||
RECT r; | RECT r; | ||||
GetWindowRect (hwnd, &r); | GetWindowRect (hwnd, &r); | ||||
@@ -5783,6 +5783,10 @@ | |||||
RelativePath="..\..\..\src\juce_core\threads\juce_ScopedReadLock.h" | RelativePath="..\..\..\src\juce_core\threads\juce_ScopedReadLock.h" | ||||
> | > | ||||
</File> | </File> | ||||
<File | |||||
RelativePath="..\..\..\src\juce_core\threads\juce_ScopedTryLock.h" | |||||
> | |||||
</File> | |||||
<File | <File | ||||
RelativePath="..\..\..\src\juce_core\threads\juce_ScopedWriteLock.h" | RelativePath="..\..\..\src\juce_core\threads\juce_ScopedWriteLock.h" | ||||
> | > | ||||
@@ -1,7 +1,12 @@ | |||||
============================================================================== | ============================================================================== | ||||
JUCE version 1.45 | |||||
JUCE version 1.46 | |||||
============================================================================== | |||||
Changelist for version 1.46 | |||||
- new class: ScopedTryLock | |||||
============================================================================== | ============================================================================== | ||||
Changelist for version 1.45 | Changelist for version 1.45 | ||||
@@ -307,5 +307,5 @@ int KnownPluginList::getIndexChosenByMenu (const int menuResultCode) const | |||||
{ | { | ||||
const int i = menuResultCode - menuIdBase; | const int i = menuResultCode - menuIdBase; | ||||
return (i >= 0 && i < types.size()) ? i : -1; | |||||
return (((unsigned int) i) < (unsigned int) types.size()) ? i : -1; | |||||
} | } |
@@ -201,7 +201,7 @@ void PluginListComponent::buttonClicked (Button* b) | |||||
} | } | ||||
} | } | ||||
bool PluginListComponent::isInterestedInFileDrag (const StringArray& files) | |||||
bool PluginListComponent::isInterestedInFileDrag (const StringArray& /*files*/) | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
@@ -2411,7 +2411,7 @@ int VSTPluginInstance::getNumParameters() | |||||
float VSTPluginInstance::getParameter (int index) | float VSTPluginInstance::getParameter (int index) | ||||
{ | { | ||||
if (effect != 0 && index >= 0 && index < effect->numParams) | |||||
if (effect != 0 && ((unsigned int) index) < (unsigned int) effect->numParams) | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
@@ -2428,7 +2428,7 @@ float VSTPluginInstance::getParameter (int index) | |||||
void VSTPluginInstance::setParameter (int index, float newValue) | void VSTPluginInstance::setParameter (int index, float newValue) | ||||
{ | { | ||||
if (effect != 0 && index >= 0 && index < effect->numParams) | |||||
if (effect != 0 && ((unsigned int) index) < (unsigned int) effect->numParams) | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
@@ -661,7 +661,7 @@ public: | |||||
while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) | while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) | ||||
{ | { | ||||
jassert (midiEventPosition >= 0 && midiEventPosition < (int) numSamples); | |||||
jassert (((unsigned int) midiEventPosition) < (unsigned int) numSamples); | |||||
@@ -85,7 +85,7 @@ public: | |||||
Justification::bottomLeft, | Justification::bottomLeft, | ||||
Justification::bottomRight }; | Justification::bottomRight }; | ||||
if (newIndex >= 0 && newIndex < numElementsInArray (types) | |||||
if (((unsigned int) newIndex) < (unsigned int) numElementsInArray (types) | |||||
&& types [newIndex] != getJustification().getFlags()) | && types [newIndex] != getJustification().getFlags()) | ||||
{ | { | ||||
setJustification (Justification (types [newIndex])); | setJustification (Justification (types [newIndex])); | ||||
@@ -64,7 +64,7 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, | |||||
const int numChannels_, | const int numChannels_, | ||||
const int numSamples) throw() | const int numSamples) throw() | ||||
{ | { | ||||
jassert (numChannels_ >= 0 && numChannels_ <= maxNumAudioSampleBufferChannels); | |||||
jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels); | |||||
numChannels = numChannels_; | numChannels = numChannels_; | ||||
size = numSamples; | size = numSamples; | ||||
@@ -134,8 +134,8 @@ AudioSampleBuffer::~AudioSampleBuffer() throw() | |||||
float* AudioSampleBuffer::getSampleData (const int channelNumber, | float* AudioSampleBuffer::getSampleData (const int channelNumber, | ||||
const int sampleOffset) const throw() | const int sampleOffset) const throw() | ||||
{ | { | ||||
jassert (channelNumber >= 0 && channelNumber < numChannels); | |||||
jassert (sampleOffset >= 0 && sampleOffset < size); | |||||
jassert (((unsigned int) channelNumber) < (unsigned int) numChannels); | |||||
jassert (((unsigned int) sampleOffset) < (unsigned int) size); | |||||
return channels [channelNumber] + sampleOffset; | return channels [channelNumber] + sampleOffset; | ||||
} | } | ||||
@@ -211,8 +211,7 @@ void AudioSampleBuffer::clear() throw() | |||||
void AudioSampleBuffer::clear (const int startSample, | void AudioSampleBuffer::clear (const int startSample, | ||||
const int numSamples) throw() | const int numSamples) throw() | ||||
{ | { | ||||
jassert (startSample >= 0); | |||||
jassert (startSample + numSamples <= size); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | |||||
for (int i = 0; i < numChannels; ++i) | for (int i = 0; i < numChannels; ++i) | ||||
zeromem (channels [i] + startSample, numSamples * sizeof (float)); | zeromem (channels [i] + startSample, numSamples * sizeof (float)); | ||||
@@ -222,7 +221,7 @@ void AudioSampleBuffer::clear (const int channel, | |||||
const int startSample, | const int startSample, | ||||
const int numSamples) throw() | const int numSamples) throw() | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
zeromem (channels [channel] + startSample, numSamples * sizeof (float)); | zeromem (channels [channel] + startSample, numSamples * sizeof (float)); | ||||
@@ -233,7 +232,7 @@ void AudioSampleBuffer::applyGain (const int channel, | |||||
int numSamples, | int numSamples, | ||||
const float gain) throw() | const float gain) throw() | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
if (gain != 1.0f) | if (gain != 1.0f) | ||||
@@ -264,7 +263,7 @@ void AudioSampleBuffer::applyGainRamp (const int channel, | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
const float increment = (endGain - startGain) / numSamples; | const float increment = (endGain - startGain) / numSamples; | ||||
@@ -295,9 +294,9 @@ void AudioSampleBuffer::addFrom (const int destChannel, | |||||
const float gain) throw() | const float gain) throw() | ||||
{ | { | ||||
jassert (&source != this); | jassert (&source != this); | ||||
jassert (destChannel >= 0 && destChannel < numChannels); | |||||
jassert (((unsigned int) destChannel) < (unsigned int) numChannels); | |||||
jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | ||||
jassert (sourceChannel >= 0 && sourceChannel < source.numChannels); | |||||
jassert (((unsigned int) sourceChannel) < (unsigned int) source.numChannels); | |||||
jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); | jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); | ||||
if (gain != 0.0f && numSamples > 0) | if (gain != 0.0f && numSamples > 0) | ||||
@@ -324,7 +323,7 @@ void AudioSampleBuffer::addFrom (const int destChannel, | |||||
int numSamples, | int numSamples, | ||||
const float gain) throw() | const float gain) throw() | ||||
{ | { | ||||
jassert (destChannel >= 0 && destChannel < numChannels); | |||||
jassert (((unsigned int) destChannel) < (unsigned int) numChannels); | |||||
jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | ||||
jassert (source != 0); | jassert (source != 0); | ||||
@@ -352,7 +351,7 @@ void AudioSampleBuffer::addFromWithRamp (const int destChannel, | |||||
float startGain, | float startGain, | ||||
const float endGain) throw() | const float endGain) throw() | ||||
{ | { | ||||
jassert (destChannel >= 0 && destChannel < numChannels); | |||||
jassert (((unsigned int) destChannel) < (unsigned int) numChannels); | |||||
jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | ||||
jassert (source != 0); | jassert (source != 0); | ||||
@@ -388,9 +387,9 @@ void AudioSampleBuffer::copyFrom (const int destChannel, | |||||
int numSamples) throw() | int numSamples) throw() | ||||
{ | { | ||||
jassert (&source != this); | jassert (&source != this); | ||||
jassert (destChannel >= 0 && destChannel < numChannels); | |||||
jassert (((unsigned int) destChannel) < (unsigned int) numChannels); | |||||
jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | ||||
jassert (sourceChannel >= 0 && sourceChannel < source.numChannels); | |||||
jassert (((unsigned int) sourceChannel) < (unsigned int) source.numChannels); | |||||
jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); | jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); | ||||
if (numSamples > 0) | if (numSamples > 0) | ||||
@@ -406,7 +405,7 @@ void AudioSampleBuffer::copyFrom (const int destChannel, | |||||
const float* source, | const float* source, | ||||
int numSamples) throw() | int numSamples) throw() | ||||
{ | { | ||||
jassert (destChannel >= 0 && destChannel < numChannels); | |||||
jassert (((unsigned int) destChannel) < (unsigned int) numChannels); | |||||
jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | jassert (destStartSample >= 0 && destStartSample + numSamples <= size); | ||||
jassert (source != 0); | jassert (source != 0); | ||||
@@ -424,7 +423,7 @@ void AudioSampleBuffer::findMinMax (const int channel, | |||||
float& minVal, | float& minVal, | ||||
float& maxVal) const throw() | float& maxVal) const throw() | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
if (numSamples <= 0) | if (numSamples <= 0) | ||||
@@ -459,7 +458,7 @@ float AudioSampleBuffer::getMagnitude (const int channel, | |||||
const int startSample, | const int startSample, | ||||
const int numSamples) const throw() | const int numSamples) const throw() | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
float mn, mx; | float mn, mx; | ||||
@@ -483,7 +482,7 @@ float AudioSampleBuffer::getRMSLevel (const int channel, | |||||
const int startSample, | const int startSample, | ||||
const int numSamples) const throw() | const int numSamples) const throw() | ||||
{ | { | ||||
jassert (channel >= 0 && channel < numChannels); | |||||
jassert (((unsigned int) channel) < (unsigned int) numChannels); | |||||
jassert (startSample >= 0 && startSample + numSamples <= size); | jassert (startSample >= 0 && startSample + numSamples <= size); | ||||
if (numSamples <= 0 || channel < 0 || channel >= numChannels) | if (numSamples <= 0 || channel < 0 || channel >= numChannels) | ||||
@@ -74,7 +74,7 @@ int MidiFile::getNumTracks() const throw() | |||||
const MidiMessageSequence* MidiFile::getTrack (const int index) const throw() | const MidiMessageSequence* MidiFile::getTrack (const int index) const throw() | ||||
{ | { | ||||
return (index >= 0 && index < numTracks) ? tracks[index] : 0; | |||||
return (((unsigned int) index) < (unsigned int) numTracks) ? tracks[index] : 0; | |||||
} | } | ||||
void MidiFile::addTrack (const MidiMessageSequence& trackSequence) throw() | void MidiFile::addTrack (const MidiMessageSequence& trackSequence) throw() | ||||
@@ -60,24 +60,24 @@ bool MidiKeyboardState::isNoteOn (const int midiChannel, const int n) const thro | |||||
{ | { | ||||
jassert (midiChannel >= 0 && midiChannel <= 16); | jassert (midiChannel >= 0 && midiChannel <= 16); | ||||
return n >= 0 && n < 128 | |||||
return ((unsigned int) n) < 128 | |||||
&& (noteStates[n] & (1 << (midiChannel - 1))) != 0; | && (noteStates[n] & (1 << (midiChannel - 1))) != 0; | ||||
} | } | ||||
bool MidiKeyboardState::isNoteOnForChannels (const int midiChannelMask, const int n) const throw() | bool MidiKeyboardState::isNoteOnForChannels (const int midiChannelMask, const int n) const throw() | ||||
{ | { | ||||
return n >= 0 && n < 128 | |||||
return ((unsigned int) n) < 128 | |||||
&& (noteStates[n] & midiChannelMask) != 0; | && (noteStates[n] & midiChannelMask) != 0; | ||||
} | } | ||||
void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, const float velocity) | void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, const float velocity) | ||||
{ | { | ||||
jassert (midiChannel >= 0 && midiChannel <= 16); | jassert (midiChannel >= 0 && midiChannel <= 16); | ||||
jassert (midiNoteNumber >= 0 && midiNoteNumber < 128); | |||||
jassert (((unsigned int) midiNoteNumber) < 128); | |||||
const ScopedLock sl (lock); | const ScopedLock sl (lock); | ||||
if (midiNoteNumber >= 0 && midiNoteNumber < 128) | |||||
if (((unsigned int) midiNoteNumber) < 128) | |||||
{ | { | ||||
const int timeNow = (int) Time::getMillisecondCounter(); | const int timeNow = (int) Time::getMillisecondCounter(); | ||||
eventsToAdd.addEvent (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity), timeNow); | eventsToAdd.addEvent (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity), timeNow); | ||||
@@ -89,7 +89,7 @@ void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, | |||||
void MidiKeyboardState::noteOnInternal (const int midiChannel, const int midiNoteNumber, const float velocity) | void MidiKeyboardState::noteOnInternal (const int midiChannel, const int midiNoteNumber, const float velocity) | ||||
{ | { | ||||
if (midiNoteNumber >= 0 && midiNoteNumber < 128) | |||||
if (((unsigned int) midiNoteNumber) < 128) | |||||
{ | { | ||||
noteStates [midiNoteNumber] |= (1 << (midiChannel - 1)); | noteStates [midiNoteNumber] |= (1 << (midiChannel - 1)); | ||||
@@ -380,8 +380,8 @@ const MidiMessage MidiMessage::aftertouchChange (const int channel, | |||||
const int aftertouchValue) throw() | const int aftertouchValue) throw() | ||||
{ | { | ||||
jassert (channel > 0 && channel <= 16); | jassert (channel > 0 && channel <= 16); | ||||
jassert (noteNum >= 0 && noteNum <= 127); | |||||
jassert (aftertouchValue >= 0 && aftertouchValue <= 127); | |||||
jassert (((unsigned int) noteNum) <= 127); | |||||
jassert (((unsigned int) aftertouchValue) <= 127); | |||||
return MidiMessage (0xa0 | jlimit (0, 15, channel - 1), | return MidiMessage (0xa0 | jlimit (0, 15, channel - 1), | ||||
noteNum & 0x7f, | noteNum & 0x7f, | ||||
@@ -404,7 +404,7 @@ const MidiMessage MidiMessage::channelPressureChange (const int channel, | |||||
const int pressure) throw() | const int pressure) throw() | ||||
{ | { | ||||
jassert (channel > 0 && channel <= 16); | jassert (channel > 0 && channel <= 16); | ||||
jassert (pressure >= 0 && pressure <= 127); | |||||
jassert (((unsigned int) pressure) <= 127); | |||||
return MidiMessage (0xd0 | jlimit (0, 15, channel - 1), | return MidiMessage (0xd0 | jlimit (0, 15, channel - 1), | ||||
pressure & 0x7f); | pressure & 0x7f); | ||||
@@ -443,7 +443,7 @@ const MidiMessage MidiMessage::pitchWheel (const int channel, | |||||
const int position) throw() | const int position) throw() | ||||
{ | { | ||||
jassert (channel > 0 && channel <= 16); | jassert (channel > 0 && channel <= 16); | ||||
jassert (position >= 0 && position <= 0x3fff); | |||||
jassert (((unsigned int) position) <= 0x3fff); | |||||
return MidiMessage (0xe0 | jlimit (0, 15, channel - 1), | return MidiMessage (0xe0 | jlimit (0, 15, channel - 1), | ||||
position & 127, | position & 127, | ||||
@@ -493,7 +493,7 @@ const MidiMessage MidiMessage::noteOn (const int channel, | |||||
const uint8 velocity) throw() | const uint8 velocity) throw() | ||||
{ | { | ||||
jassert (channel > 0 && channel <= 16); | jassert (channel > 0 && channel <= 16); | ||||
jassert (noteNumber >= 0 && noteNumber <= 127); | |||||
jassert (((unsigned int) noteNumber) <= 127); | |||||
return MidiMessage (0x90 | jlimit (0, 15, channel - 1), | return MidiMessage (0x90 | jlimit (0, 15, channel - 1), | ||||
noteNumber & 127, | noteNumber & 127, | ||||
@@ -504,7 +504,7 @@ const MidiMessage MidiMessage::noteOff (const int channel, | |||||
const int noteNumber) throw() | const int noteNumber) throw() | ||||
{ | { | ||||
jassert (channel > 0 && channel <= 16); | jassert (channel > 0 && channel <= 16); | ||||
jassert (noteNumber >= 0 && noteNumber <= 127); | |||||
jassert (((unsigned int) noteNumber) <= 127); | |||||
return MidiMessage (0x80 | jlimit (0, 15, channel - 1), noteNumber & 127, 0); | return MidiMessage (0x80 | jlimit (0, 15, channel - 1), noteNumber & 127, 0); | ||||
} | } | ||||
@@ -1010,7 +1010,7 @@ const String MidiMessage::getMidiNoteName (int note, | |||||
"F", "Gb", "G", "Ab", "A", | "F", "Gb", "G", "Ab", "A", | ||||
"Bb", "B" }; | "Bb", "B" }; | ||||
if (note >= 0 && note < 128) | |||||
if (((unsigned int) note) < 128) | |||||
{ | { | ||||
const String s ((useSharps) ? sharpNoteNames [note % 12] | const String s ((useSharps) ? sharpNoteNames [note % 12] | ||||
: flatNoteNames [note % 12]); | : flatNoteNames [note % 12]); | ||||
@@ -1059,8 +1059,8 @@ const String MidiMessage::getGMInstrumentName (int n) throw() | |||||
"Applause", "Gunshot" | "Applause", "Gunshot" | ||||
}; | }; | ||||
return (n >= 0 && n < 128) ? names[n] | |||||
: (const char*)0; | |||||
return (((unsigned int) n) < 128) ? names[n] | |||||
: (const char*)0; | |||||
} | } | ||||
const String MidiMessage::getGMInstrumentBankName (int n) throw() | const String MidiMessage::getGMInstrumentBankName (int n) throw() | ||||
@@ -1073,8 +1073,8 @@ const String MidiMessage::getGMInstrumentBankName (int n) throw() | |||||
"Synth Effects", "Ethnic", "Percussive", "Sound Effects" | "Synth Effects", "Ethnic", "Percussive", "Sound Effects" | ||||
}; | }; | ||||
return (n >= 0 && n <= 15) ? names[n] | |||||
: (const char*)0; | |||||
return (((unsigned int) n) <= 15) ? names[n] | |||||
: (const char*)0; | |||||
} | } | ||||
const String MidiMessage::getRhythmInstrumentName (int n) throw() | const String MidiMessage::getRhythmInstrumentName (int n) throw() | ||||
@@ -1124,8 +1124,8 @@ const String MidiMessage::getControllerName (int n) throw() | |||||
"Poly Operation" | "Poly Operation" | ||||
}; | }; | ||||
return (n >= 0 && n < 128) ? names[n] | |||||
: (const char*)0; | |||||
return (((unsigned int) n) < 128) ? names[n] | |||||
: (const char*)0; | |||||
} | } | ||||
END_JUCE_NAMESPACE | END_JUCE_NAMESPACE |
@@ -135,10 +135,10 @@ double MidiMessageSequence::getEndTime() const | |||||
double MidiMessageSequence::getEventTime (const int index) const | double MidiMessageSequence::getEventTime (const int index) const | ||||
{ | { | ||||
if (index < 0 || index >= list.size()) | |||||
return 0.0; | |||||
else | |||||
if (((unsigned int) index) < (unsigned int) list.size()) | |||||
return list.getUnchecked (index)->message.getTimeStamp(); | return list.getUnchecked (index)->message.getTimeStamp(); | ||||
return 0.0; | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -161,7 +161,7 @@ void MidiMessageSequence::addEvent (const MidiMessage& newMessage, | |||||
void MidiMessageSequence::deleteEvent (const int index, | void MidiMessageSequence::deleteEvent (const int index, | ||||
const bool deleteMatchingNoteUp) | const bool deleteMatchingNoteUp) | ||||
{ | { | ||||
if (index >= 0 && index < list.size()) | |||||
if (((unsigned int) index) < (unsigned int) list.size()) | |||||
{ | { | ||||
if (deleteMatchingNoteUp) | if (deleteMatchingNoteUp) | ||||
deleteEvent (getIndexOfMatchingKeyUp (index), false); | deleteEvent (getIndexOfMatchingKeyUp (index), false); | ||||
@@ -110,7 +110,7 @@ void AudioProcessor::setParameterNotifyingHost (const int parameterIndex, | |||||
void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex, const float newValue) | void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex, const float newValue) | ||||
{ | { | ||||
jassert (parameterIndex >= 0 && parameterIndex < getNumParameters()); | |||||
jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); | |||||
for (int i = listeners.size(); --i >= 0;) | for (int i = listeners.size(); --i >= 0;) | ||||
{ | { | ||||
@@ -125,7 +125,7 @@ void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex | |||||
void AudioProcessor::beginParameterChangeGesture (int parameterIndex) | void AudioProcessor::beginParameterChangeGesture (int parameterIndex) | ||||
{ | { | ||||
jassert (parameterIndex >= 0 && parameterIndex < getNumParameters()); | |||||
jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); | |||||
#ifdef JUCE_DEBUG | #ifdef JUCE_DEBUG | ||||
// This means you've called beginParameterChangeGesture twice in succession without a matching | // This means you've called beginParameterChangeGesture twice in succession without a matching | ||||
@@ -146,7 +146,7 @@ void AudioProcessor::beginParameterChangeGesture (int parameterIndex) | |||||
void AudioProcessor::endParameterChangeGesture (int parameterIndex) | void AudioProcessor::endParameterChangeGesture (int parameterIndex) | ||||
{ | { | ||||
jassert (parameterIndex >= 0 && parameterIndex < getNumParameters()); | |||||
jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); | |||||
#ifdef JUCE_DEBUG | #ifdef JUCE_DEBUG | ||||
// This means you've called endParameterChangeGesture without having previously called | // This means you've called endParameterChangeGesture without having previously called | ||||
@@ -286,7 +286,7 @@ void ComboBox::setSelectedItemIndex (const int index, | |||||
{ | { | ||||
if (currentIndex != index || label->getText() != getItemText (currentIndex)) | if (currentIndex != index || label->getText() != getItemText (currentIndex)) | ||||
{ | { | ||||
if (index >= 0 && index < getNumItems()) | |||||
if (((unsigned int) index) < (unsigned int) getNumItems()) | |||||
currentIndex = index; | currentIndex = index; | ||||
else | else | ||||
currentIndex = -1; | currentIndex = -1; | ||||
@@ -470,7 +470,7 @@ void ListBox::selectRowInternal (const int row, | |||||
if ((! isRowSelected (row)) | if ((! isRowSelected (row)) | ||||
|| (deselectOthersFirst && getNumSelectedRows() > 1)) | || (deselectOthersFirst && getNumSelectedRows() > 1)) | ||||
{ | { | ||||
if (row >= 0 && row < totalItems) | |||||
if (((unsigned int) row) < (unsigned int) totalItems) | |||||
{ | { | ||||
if (deselectOthersFirst) | if (deselectOthersFirst) | ||||
selected.clear(); | selected.clear(); | ||||
@@ -616,7 +616,7 @@ int ListBox::getNumSelectedRows() const | |||||
int ListBox::getSelectedRow (const int index) const | int ListBox::getSelectedRow (const int index) const | ||||
{ | { | ||||
return (index >= 0 && index < selected.size()) | |||||
return (((unsigned int) index) < (unsigned int) selected.size()) | |||||
? selected [index] : -1; | ? selected [index] : -1; | ||||
} | } | ||||
@@ -633,11 +633,11 @@ int ListBox::getLastRowSelected() const | |||||
//============================================================================== | //============================================================================== | ||||
int ListBox::getRowContainingPosition (const int x, const int y) const throw() | int ListBox::getRowContainingPosition (const int x, const int y) const throw() | ||||
{ | { | ||||
if (x >= 0 && x < getWidth()) | |||||
if (((unsigned int) x) < (unsigned int) getWidth()) | |||||
{ | { | ||||
const int row = (viewport->getViewPositionY() + y - viewport->getY()) / rowHeight; | const int row = (viewport->getViewPositionY() + y - viewport->getY()) / rowHeight; | ||||
if (row >= 0 && row < totalItems) | |||||
if (((unsigned int) row) < (unsigned int) totalItems) | |||||
return row; | return row; | ||||
} | } | ||||
@@ -212,7 +212,7 @@ void TableHeaderComponent::setColumnWidth (const int columnId, const int newWidt | |||||
{ | { | ||||
const int index = getIndexOfColumnId (columnId, true) + 1; | const int index = getIndexOfColumnId (columnId, true) + 1; | ||||
if (index >= 0 && index < numColumns) | |||||
if (((unsigned int) index) < (unsigned int) numColumns) | |||||
{ | { | ||||
const int x = getColumnPosition (index).getX(); | const int x = getColumnPosition (index).getX(); | ||||
@@ -879,7 +879,7 @@ void TableHeaderComponent::handleAsyncUpdate() | |||||
int TableHeaderComponent::getResizeDraggerAt (const int mouseX) const throw() | int TableHeaderComponent::getResizeDraggerAt (const int mouseX) const throw() | ||||
{ | { | ||||
if (mouseX >= 0 && mouseX < getWidth()) | |||||
if (((unsigned int) mouseX) < (unsigned int) getWidth()) | |||||
{ | { | ||||
const int draggableDistance = 3; | const int draggableDistance = 3; | ||||
int x = 0; | int x = 0; | ||||
@@ -802,7 +802,7 @@ void TreeViewItem::removeSubItem (const int index, const bool deleteItem) | |||||
if (ownerView != 0) | if (ownerView != 0) | ||||
ownerView->nodeAlterationLock.enter(); | ownerView->nodeAlterationLock.enter(); | ||||
if (index >= 0 && index < subItems.size()) | |||||
if (((unsigned int) index) < (unsigned int) subItems.size()) | |||||
{ | { | ||||
subItems.remove (index, deleteItem); | subItems.remove (index, deleteItem); | ||||
treeHasChanged(); | treeHasChanged(); | ||||
@@ -1127,7 +1127,7 @@ TreeViewItem* TreeViewItem::getItemOnRow (int index) throw() | |||||
TreeViewItem* TreeViewItem::findItemRecursively (int y) throw() | TreeViewItem* TreeViewItem::findItemRecursively (int y) throw() | ||||
{ | { | ||||
if (y >= 0 && y < totalHeight) | |||||
if (((unsigned int) y) < (unsigned int) totalHeight) | |||||
{ | { | ||||
const int h = itemHeight; | const int h = itemHeight; | ||||
@@ -150,7 +150,7 @@ void FileSearchPathListComponent::paintListBoxItem (int rowNumber, Graphics& g, | |||||
void FileSearchPathListComponent::deleteKeyPressed (int row) | void FileSearchPathListComponent::deleteKeyPressed (int row) | ||||
{ | { | ||||
if (row >= 0 && row < path.getNumPaths()) | |||||
if (((unsigned int) row) < (unsigned int) path.getNumPaths()) | |||||
{ | { | ||||
path.remove (row); | path.remove (row); | ||||
changed(); | changed(); | ||||
@@ -263,7 +263,7 @@ void FileSearchPathListComponent::buttonClicked (Button* button) | |||||
} | } | ||||
else if (button == downButton) | else if (button == downButton) | ||||
{ | { | ||||
if (currentRow >= 0 && currentRow < path.getNumPaths()-1) | |||||
if (currentRow >= 0 && currentRow < path.getNumPaths() - 1) | |||||
{ | { | ||||
const File f (path[currentRow]); | const File f (path[currentRow]); | ||||
path.remove (currentRow); | path.remove (currentRow); | ||||
@@ -1103,7 +1103,8 @@ void Component::getInterceptsMouseClicks (bool& allowsClicksOnThisComponent, | |||||
bool Component::contains (const int x, const int y) | bool Component::contains (const int x, const int y) | ||||
{ | { | ||||
if (x >= 0 && y >= 0 && x < getWidth() && y < getHeight() | |||||
if (((unsigned int) x) < (unsigned int) getWidth() | |||||
&& ((unsigned int) y) < (unsigned int) getHeight() | |||||
&& hitTest (x, y)) | && hitTest (x, y)) | ||||
{ | { | ||||
if (parentComponent_ != 0) | if (parentComponent_ != 0) | ||||
@@ -1146,7 +1147,8 @@ bool Component::reallyContains (int x, int y, const bool returnTrueIfWithinAChil | |||||
Component* Component::getComponentAt (const int x, const int y) | Component* Component::getComponentAt (const int x, const int y) | ||||
{ | { | ||||
if (flags.visibleFlag | if (flags.visibleFlag | ||||
&& x >= 0 && y >= 0 && x < getWidth() && y < getHeight() | |||||
&& ((unsigned int) x) < (unsigned int) getWidth() | |||||
&& ((unsigned int) y) < (unsigned int) getHeight() | |||||
&& hitTest (x, y)) | && hitTest (x, y)) | ||||
{ | { | ||||
for (int i = childComponentList_.size(); --i >= 0;) | for (int i = childComponentList_.size(); --i >= 0;) | ||||
@@ -92,14 +92,15 @@ bool TabBarButton::hitTest (int mx, int my) | |||||
if (owner->getOrientation() == TabbedButtonBar::TabsAtLeft | if (owner->getOrientation() == TabbedButtonBar::TabsAtLeft | ||||
|| owner->getOrientation() == TabbedButtonBar::TabsAtRight) | || owner->getOrientation() == TabbedButtonBar::TabsAtRight) | ||||
{ | { | ||||
if (mx >= 0 && mx < getWidth() | |||||
&& my >= y + overlapPixels && my < y + h - overlapPixels) | |||||
if (((unsigned int) mx) < (unsigned int) getWidth() | |||||
&& my >= y + overlapPixels | |||||
&& my < y + h - overlapPixels) | |||||
return true; | return true; | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
if (mx >= x + overlapPixels && mx < x + w - overlapPixels | if (mx >= x + overlapPixels && mx < x + w - overlapPixels | ||||
&& my >= 0 && my < getHeight()) | |||||
&& ((unsigned int) my) < (unsigned int) getHeight()) | |||||
return true; | return true; | ||||
} | } | ||||
@@ -233,7 +234,7 @@ void TabbedButtonBar::addTab (const String& tabName, | |||||
if (tabName.isNotEmpty()) | if (tabName.isNotEmpty()) | ||||
{ | { | ||||
if (insertIndex < 0 || insertIndex > tabs.size()) | |||||
if (((unsigned int) insertIndex) > (unsigned int) tabs.size()) | |||||
insertIndex = tabs.size(); | insertIndex = tabs.size(); | ||||
for (int i = tabs.size(); --i >= insertIndex;) | for (int i = tabs.size(); --i >= insertIndex;) | ||||
@@ -262,7 +263,7 @@ void TabbedButtonBar::addTab (const String& tabName, | |||||
void TabbedButtonBar::setTabName (const int tabIndex, | void TabbedButtonBar::setTabName (const int tabIndex, | ||||
const String& newName) | const String& newName) | ||||
{ | { | ||||
if (tabIndex >= 0 && tabIndex < tabs.size() | |||||
if (((unsigned int) tabIndex) < (unsigned int) tabs.size() | |||||
&& tabs[tabIndex] != newName) | && tabs[tabIndex] != newName) | ||||
{ | { | ||||
tabs.set (tabIndex, newName); | tabs.set (tabIndex, newName); | ||||
@@ -278,7 +279,7 @@ void TabbedButtonBar::setTabName (const int tabIndex, | |||||
void TabbedButtonBar::removeTab (const int tabIndex) | void TabbedButtonBar::removeTab (const int tabIndex) | ||||
{ | { | ||||
if (tabIndex >= 0 && tabIndex < tabs.size()) | |||||
if (((unsigned int) tabIndex) < (unsigned int) tabs.size()) | |||||
{ | { | ||||
const int oldTabIndex = currentTabIndex; | const int oldTabIndex = currentTabIndex; | ||||
if (currentTabIndex == tabIndex) | if (currentTabIndex == tabIndex) | ||||
@@ -328,7 +329,7 @@ void TabbedButtonBar::setCurrentTabIndex (int newIndex) | |||||
{ | { | ||||
if (currentTabIndex != newIndex) | if (currentTabIndex != newIndex) | ||||
{ | { | ||||
if (newIndex < 0 || newIndex >= tabs.size()) | |||||
if (((unsigned int) newIndex) >= (unsigned int) tabs.size()) | |||||
newIndex = -1; | newIndex = -1; | ||||
currentTabIndex = newIndex; | currentTabIndex = newIndex; | ||||
@@ -505,7 +506,8 @@ const Colour TabbedButtonBar::getTabBackgroundColour (const int tabIndex) | |||||
void TabbedButtonBar::setTabBackgroundColour (const int tabIndex, const Colour& newColour) | void TabbedButtonBar::setTabBackgroundColour (const int tabIndex, const Colour& newColour) | ||||
{ | { | ||||
if (tabIndex >= 0 && tabIndex < tabColours.size() && tabColours [tabIndex] != newColour) | |||||
if (((unsigned int) tabIndex) < (unsigned int) tabColours.size() | |||||
&& tabColours [tabIndex] != newColour) | |||||
{ | { | ||||
tabColours.set (tabIndex, newColour); | tabColours.set (tabIndex, newColour); | ||||
repaint(); | repaint(); | ||||
@@ -156,7 +156,7 @@ int MenuBarComponent::getItemAt (const int x, const int y) | |||||
void MenuBarComponent::repaintMenuItem (int index) | void MenuBarComponent::repaintMenuItem (int index) | ||||
{ | { | ||||
if (index >= 0 && index < xPositions.size()) | |||||
if (((unsigned int) index) < (unsigned int) xPositions.size()) | |||||
{ | { | ||||
const int x1 = xPositions [index]; | const int x1 = xPositions [index]; | ||||
const int x2 = xPositions [index + 1]; | const int x2 = xPositions [index + 1]; | ||||
@@ -223,7 +223,7 @@ void MenuBarComponent::showMenu (int index) | |||||
indexToShowAgain = -1; | indexToShowAgain = -1; | ||||
repaint(); | repaint(); | ||||
if (itemUnderMouse >= 0 && itemUnderMouse < menuNames.size()) | |||||
if (((unsigned int) itemUnderMouse) < (unsigned int) menuNames.size()) | |||||
{ | { | ||||
PopupMenu m (model->getMenuForIndex (itemUnderMouse, | PopupMenu m (model->getMenuForIndex (itemUnderMouse, | ||||
menuNames [itemUnderMouse])); | menuNames [itemUnderMouse])); | ||||
@@ -268,7 +268,7 @@ void MenuBarComponent::showMenu (int index) | |||||
repaint(); | repaint(); | ||||
itemUnderMouse = indexToShowAgain; | itemUnderMouse = indexToShowAgain; | ||||
if (itemUnderMouse < 0 || itemUnderMouse >= menuNames.size()) | |||||
if (((unsigned int) itemUnderMouse) >= (unsigned int) menuNames.size()) | |||||
break; | break; | ||||
} | } | ||||
else | else | ||||
@@ -423,7 +423,7 @@ public: | |||||
{ | { | ||||
const int y = minY - mw->windowPos.getY(); | const int y = minY - mw->windowPos.getY(); | ||||
mw->ensureItemIsVisible (itemIdThatMustBeVisible, | mw->ensureItemIsVisible (itemIdThatMustBeVisible, | ||||
(y >= 0 && y < mw->windowPos.getHeight()) ? y : -1); | |||||
(((unsigned int) y) < (unsigned int) mw->windowPos.getHeight()) ? y : -1); | |||||
} | } | ||||
mw->resizeToBestWindowPos(); | mw->resizeToBestWindowPos(); | ||||
@@ -696,7 +696,7 @@ public: | |||||
bool overScrollArea = false; | bool overScrollArea = false; | ||||
if (isScrolling() | if (isScrolling() | ||||
&& (isOver || (isDown && x >= 0 && x < getWidth())) | |||||
&& (isOver || (isDown && ((unsigned int) x) < (unsigned int) getWidth())) | |||||
&& ((isScrollZoneActive (false) && y < scrollZone) | && ((isScrollZoneActive (false) && y < scrollZone) | ||||
|| (isScrollZoneActive (true) && y > getHeight() - scrollZone))) | || (isScrollZoneActive (true) && y > getHeight() - scrollZone))) | ||||
{ | { | ||||
@@ -103,7 +103,7 @@ public: | |||||
int width, int height, | int width, int height, | ||||
bool rowIsSelected) | bool rowIsSelected) | ||||
{ | { | ||||
if (row >= 0 && row < items.size()) | |||||
if (((unsigned int) row) < (unsigned int) items.size()) | |||||
{ | { | ||||
if (rowIsSelected) | if (rowIsSelected) | ||||
g.fillAll (findColour (TextEditor::highlightColourId) | g.fillAll (findColour (TextEditor::highlightColourId) | ||||
@@ -190,7 +190,7 @@ private: | |||||
void flipEnablement (const int row) | void flipEnablement (const int row) | ||||
{ | { | ||||
if (row >= 0 && row < items.size()) | |||||
if (((unsigned int) row) < (unsigned int) items.size()) | |||||
{ | { | ||||
AudioIODevice* const audioDevice = deviceManager.getCurrentAudioDevice(); | AudioIODevice* const audioDevice = deviceManager.getCurrentAudioDevice(); | ||||
@@ -113,9 +113,8 @@ public: | |||||
bool contains (int x, int y, bool) const | bool contains (int x, int y, bool) const | ||||
{ | { | ||||
return x >= 0 && y >= 0 | |||||
&& x < magnifierComp->getWidth() | |||||
&& y < magnifierComp->getHeight(); | |||||
return ((unsigned int) x) < (unsigned int) magnifierComp->getWidth() | |||||
&& ((unsigned int) y) < (unsigned int) magnifierComp->getHeight(); | |||||
} | } | ||||
void repaint (int x, int y, int w, int h) | void repaint (int x, int y, int w, int h) | ||||
@@ -357,10 +357,8 @@ void ComponentPeer::sendFakeMouseMove() throw() | |||||
int x, y; | int x, y; | ||||
component->getMouseXYRelative (x, y); | component->getMouseXYRelative (x, y); | ||||
if (x >= 0 | |||||
&& y >= 0 | |||||
&& x < component->getWidth() | |||||
&& y < component->getHeight() | |||||
if (((unsigned int) x) < (unsigned int) component->getWidth() | |||||
&& ((unsigned int) y) < (unsigned int) component->getHeight() | |||||
&& contains (x, y, false)) | && contains (x, y, false)) | ||||
{ | { | ||||
postMessage (new Message (fakeMouseMoveMessage, x, y, 0)); | postMessage (new Message (fakeMouseMoveMessage, x, y, 0)); | ||||
@@ -435,7 +435,7 @@ void GlyphArrangement::ensureNumGlyphsAllocated (const int minGlyphs) throw() | |||||
void GlyphArrangement::incGlyphRefCount (const int i) const throw() | void GlyphArrangement::incGlyphRefCount (const int i) const throw() | ||||
{ | { | ||||
jassert (i >= 0 && i < numGlyphs); | |||||
jassert (((unsigned int) i) < (unsigned int) numGlyphs); | |||||
if (glyphs[i].glyphInfo != 0 && glyphs[i].glyphInfo->getTypeface() != 0) | if (glyphs[i].glyphInfo != 0 && glyphs[i].glyphInfo->getTypeface() != 0) | ||||
glyphs[i].glyphInfo->getTypeface()->incReferenceCount(); | glyphs[i].glyphInfo->getTypeface()->incReferenceCount(); | ||||
@@ -457,7 +457,7 @@ void GlyphArrangement::clear() throw() | |||||
PositionedGlyph& GlyphArrangement::getGlyph (const int index) const throw() | PositionedGlyph& GlyphArrangement::getGlyph (const int index) const throw() | ||||
{ | { | ||||
jassert (index >= 0 && index < numGlyphs); | |||||
jassert (((unsigned int) index) < (unsigned int) numGlyphs); | |||||
return glyphs [index]; | return glyphs [index]; | ||||
} | } | ||||
@@ -966,7 +966,7 @@ void GlyphArrangement::moveRangeOfGlyphs (int startIndex, int num, | |||||
while (--num >= 0) | while (--num >= 0) | ||||
{ | { | ||||
jassert (startIndex >= 0 && startIndex <= numGlyphs); | |||||
jassert (((unsigned int) startIndex) <= (unsigned int) numGlyphs); | |||||
glyphs [startIndex++].moveBy (dx, dy); | glyphs [startIndex++].moveBy (dx, dy); | ||||
} | } | ||||
} | } | ||||
@@ -986,7 +986,7 @@ void GlyphArrangement::stretchRangeOfGlyphs (int startIndex, int num, | |||||
while (--num >= 0) | while (--num >= 0) | ||||
{ | { | ||||
jassert (startIndex >= 0 && startIndex <= numGlyphs); | |||||
jassert (((unsigned int) startIndex) <= (unsigned int) numGlyphs); | |||||
PositionedGlyph& pg = glyphs[startIndex++]; | PositionedGlyph& pg = glyphs[startIndex++]; | ||||
pg.x = xAnchor + (pg.x - xAnchor) * horizontalScaleFactor; | pg.x = xAnchor + (pg.x - xAnchor) * horizontalScaleFactor; | ||||
@@ -73,10 +73,10 @@ void RectangleList::clear() throw() | |||||
const Rectangle RectangleList::getRectangle (const int index) const throw() | const Rectangle RectangleList::getRectangle (const int index) const throw() | ||||
{ | { | ||||
if (index >= 0 && index < rects.size()) | |||||
if (((unsigned int) index) < (unsigned int) rects.size()) | |||||
return rects.getReference (index); | return rects.getReference (index); | ||||
else | |||||
return Rectangle(); | |||||
return Rectangle(); | |||||
} | } | ||||
bool RectangleList::isEmpty() const throw() | bool RectangleList::isEmpty() const throw() | ||||
@@ -229,7 +229,8 @@ const Colour Image::getPixelAt (const int x, const int y) const | |||||
{ | { | ||||
Colour c; | Colour c; | ||||
if (x >= 0 && x < imageWidth && y >= 0 && y < imageHeight) | |||||
if (((unsigned int) x) < (unsigned int) imageWidth | |||||
&& ((unsigned int) y) < (unsigned int) imageHeight) | |||||
{ | { | ||||
int ls, ps; | int ls, ps; | ||||
const uint8* const pixels = lockPixelDataReadOnly (x, y, 1, 1, ls, ps); | const uint8* const pixels = lockPixelDataReadOnly (x, y, 1, 1, ls, ps); | ||||
@@ -254,7 +255,8 @@ const Colour Image::getPixelAt (const int x, const int y) const | |||||
void Image::setPixelAt (const int x, const int y, | void Image::setPixelAt (const int x, const int y, | ||||
const Colour& colour) | const Colour& colour) | ||||
{ | { | ||||
if (x >= 0 && x < imageWidth && y >= 0 && y < imageHeight) | |||||
if (((unsigned int) x) < (unsigned int) imageWidth | |||||
&& ((unsigned int) y) < (unsigned int) imageHeight) | |||||
{ | { | ||||
int ls, ps; | int ls, ps; | ||||
uint8* const pixels = lockPixelDataReadWrite (x, y, 1, 1, ls, ps); | uint8* const pixels = lockPixelDataReadWrite (x, y, 1, 1, ls, ps); | ||||
@@ -274,7 +276,9 @@ void Image::setPixelAt (const int x, const int y, | |||||
void Image::multiplyAlphaAt (const int x, const int y, | void Image::multiplyAlphaAt (const int x, const int y, | ||||
const float multiplier) | const float multiplier) | ||||
{ | { | ||||
if (x >= 0 && x < imageWidth && y >= 0 && y < imageHeight && hasAlphaChannel()) | |||||
if (((unsigned int) x) < (unsigned int) imageWidth | |||||
&& ((unsigned int) y) < (unsigned int) imageHeight | |||||
&& hasAlphaChannel()) | |||||
{ | { | ||||
int ls, ps; | int ls, ps; | ||||
uint8* const pixels = lockPixelDataReadWrite (x, y, 1, 1, ls, ps); | uint8* const pixels = lockPixelDataReadWrite (x, y, 1, 1, ls, ps); | ||||
@@ -61,8 +61,8 @@ void ImageConvolutionKernel::setKernelValue (const int x, | |||||
const int y, | const int y, | ||||
const float value) throw() | const float value) throw() | ||||
{ | { | ||||
if (x >= 0 && x < size | |||||
&& y >= 0 && y < size) | |||||
if (((unsigned int) x) < (unsigned int) size | |||||
&& ((unsigned int) y) < (unsigned int) size) | |||||
{ | { | ||||
values[x][y] = value; | values[x][y] = value; | ||||
} | } | ||||
@@ -160,9 +160,13 @@ inline double jmin (const double a, const double b, const double c, const double | |||||
//============================================================================== | //============================================================================== | ||||
/** Constrains a value to keep it within a given limit. | |||||
/** Constrains a value to keep it within a given range. | |||||
Note that this expects that lowerLimit <= upperLimit. If this isn't true, | |||||
This will check that the specified value lies between the lower and upper bounds | |||||
specified, and if not, will return the nearest value that would be in-range. Effectively, | |||||
it's like calling jmax (lowerLimit, jmin (upperLimit, value)). | |||||
Note that it expects that lowerLimit <= upperLimit. If this isn't true, | |||||
the results will be unpredictable. | the results will be unpredictable. | ||||
@param lowerLimit the minimum value to return | @param lowerLimit the minimum value to return | ||||
@@ -170,6 +174,7 @@ inline double jmin (const double a, const double b, const double c, const double | |||||
@param valueToConstrain the value to try to return | @param valueToConstrain the value to try to return | ||||
@returns the closest value to valueToConstrain which lies between lowerLimit | @returns the closest value to valueToConstrain which lies between lowerLimit | ||||
and upperLimit (inclusive) | and upperLimit (inclusive) | ||||
@see jlimit0To, jmin, jmax | |||||
*/ | */ | ||||
template <class Type> | template <class Type> | ||||
inline Type jlimit (const Type lowerLimit, | inline Type jlimit (const Type lowerLimit, | ||||
@@ -87,6 +87,10 @@ public: | |||||
*/ | */ | ||||
static const String getOperatingSystemName() throw(); | static const String getOperatingSystemName() throw(); | ||||
/** Returns true if the OS is 64-bit, or false for a 32-bit OS. | |||||
*/ | |||||
static bool isOperatingSystem64Bit() throw(); | |||||
//============================================================================== | //============================================================================== | ||||
// CPU and memory information.. | // CPU and memory information.. | ||||
@@ -231,8 +231,9 @@ public: | |||||
inline ElementType operator[] (const int index) const throw() | inline ElementType operator[] (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
const ElementType result = (index >= 0 && index < numUsed) ? this->elements [index] | |||||
: ElementType(); | |||||
const ElementType result = (((unsigned int) index) < (unsigned int) numUsed) | |||||
? this->elements [index] | |||||
: ElementType(); | |||||
lock.exit(); | lock.exit(); | ||||
return result; | return result; | ||||
@@ -250,7 +251,7 @@ public: | |||||
inline ElementType getUnchecked (const int index) const throw() | inline ElementType getUnchecked (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
jassert (index >= 0 && index < numUsed); | |||||
jassert (((unsigned int) index) < (unsigned int) numUsed); | |||||
const ElementType result = this->elements [index]; | const ElementType result = this->elements [index]; | ||||
lock.exit(); | lock.exit(); | ||||
@@ -268,7 +269,7 @@ public: | |||||
*/ | */ | ||||
inline ElementType& getReference (const int index) const throw() | inline ElementType& getReference (const int index) const throw() | ||||
{ | { | ||||
jassert (index >= 0 && index < numUsed); | |||||
jassert (((unsigned int) index) < (unsigned int) numUsed); | |||||
return this->elements [index]; | return this->elements [index]; | ||||
} | } | ||||
@@ -405,11 +406,8 @@ public: | |||||
lock.enter(); | lock.enter(); | ||||
this->ensureAllocatedSize (numUsed + 1); | this->ensureAllocatedSize (numUsed + 1); | ||||
if (indexToInsertAt >= 0) | |||||
if (((unsigned int) indexToInsertAt) < (unsigned int) numUsed) | |||||
{ | { | ||||
if (indexToInsertAt > numUsed) | |||||
indexToInsertAt = numUsed; | |||||
ElementType* const insertPos = this->elements + indexToInsertAt; | ElementType* const insertPos = this->elements + indexToInsertAt; | ||||
const int numberToMove = numUsed - indexToInsertAt; | const int numberToMove = numUsed - indexToInsertAt; | ||||
@@ -447,7 +445,7 @@ public: | |||||
lock.enter(); | lock.enter(); | ||||
this->ensureAllocatedSize (numUsed + numberOfTimesToInsertIt); | this->ensureAllocatedSize (numUsed + numberOfTimesToInsertIt); | ||||
if (indexToInsertAt >= 0 && indexToInsertAt < numUsed) | |||||
if (((unsigned int) indexToInsertAt) < (unsigned int) numUsed) | |||||
{ | { | ||||
ElementType* insertPos = this->elements + indexToInsertAt; | ElementType* insertPos = this->elements + indexToInsertAt; | ||||
const int numberToMove = numUsed - indexToInsertAt; | const int numberToMove = numUsed - indexToInsertAt; | ||||
@@ -489,7 +487,7 @@ public: | |||||
lock.enter(); | lock.enter(); | ||||
this->ensureAllocatedSize (numUsed + numberOfElements); | this->ensureAllocatedSize (numUsed + numberOfElements); | ||||
if (indexToInsertAt >= 0 && indexToInsertAt < numUsed) | |||||
if (((unsigned int) indexToInsertAt) < (unsigned int) numUsed) | |||||
{ | { | ||||
ElementType* insertPos = this->elements + indexToInsertAt; | ElementType* insertPos = this->elements + indexToInsertAt; | ||||
const int numberToMove = numUsed - indexToInsertAt; | const int numberToMove = numUsed - indexToInsertAt; | ||||
@@ -573,7 +571,7 @@ public: | |||||
const ElementType newValue) throw() | const ElementType newValue) throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
jassert (indexToChange >= 0 && indexToChange < numUsed); | |||||
jassert (((unsigned int) indexToChange) < (unsigned int) numUsed); | |||||
this->elements [indexToChange] = newValue; | this->elements [indexToChange] = newValue; | ||||
lock.exit(); | lock.exit(); | ||||
} | } | ||||
@@ -737,7 +735,7 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (indexToRemove >= 0 && indexToRemove < numUsed) | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | { | ||||
--numUsed; | --numUsed; | ||||
@@ -916,8 +914,8 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (index1 >= 0 && index1 < numUsed | |||||
&& index2 >= 0 && index2 < numUsed) | |||||
if (((unsigned int) index1) < (unsigned int) numUsed | |||||
&& ((unsigned int) index2) < (unsigned int) numUsed) | |||||
{ | { | ||||
swapVariables (this->elements [index1], | swapVariables (this->elements [index1], | ||||
this->elements [index2]); | this->elements [index2]); | ||||
@@ -947,9 +945,9 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (currentIndex >= 0 && currentIndex < numUsed) | |||||
if (((unsigned int) currentIndex) < (unsigned int) numUsed) | |||||
{ | { | ||||
if (newIndex < 0 || newIndex > numUsed - 1) | |||||
if (((unsigned int) newIndex) >= (unsigned int) numUsed) | |||||
newIndex = numUsed - 1; | newIndex = numUsed - 1; | ||||
const ElementType value = this->elements [currentIndex]; | const ElementType value = this->elements [currentIndex]; | ||||
@@ -160,7 +160,7 @@ bool BitArray::operator!= (const BitArray& other) const throw() | |||||
bool BitArray::operator[] (const int bit) const throw() | bool BitArray::operator[] (const int bit) const throw() | ||||
{ | { | ||||
return (bit >= 0 && bit <= highestBit) | |||||
return (((unsigned int) bit) <= (unsigned int) highestBit) | |||||
&& ((values [bit >> 5] & (1 << (bit & 31))) != 0); | && ((values [bit >> 5] & (1 << (bit & 31))) != 0); | ||||
} | } | ||||
@@ -211,7 +211,7 @@ void BitArray::setBit (const int bit, | |||||
void BitArray::clearBit (const int bit) throw() | void BitArray::clearBit (const int bit) throw() | ||||
{ | { | ||||
if (bit >= 0 && bit <= highestBit) | |||||
if (((unsigned int) bit) <= (unsigned int) highestBit) | |||||
values [bit >> 5] &= ~(1 << (bit & 31)); | values [bit >> 5] &= ~(1 << (bit & 31)); | ||||
} | } | ||||
@@ -922,7 +922,7 @@ void BitArray::parseString (const String& text, | |||||
const tchar c = *t++; | const tchar c = *t++; | ||||
const int digit = CharacterFunctions::getHexDigitValue (c); | const int digit = CharacterFunctions::getHexDigitValue (c); | ||||
if (digit >= 0 && digit < base) | |||||
if (((unsigned int) digit) < (unsigned int) base) | |||||
{ | { | ||||
shiftBits (bits); | shiftBits (bits); | ||||
add (digit); | add (digit); | ||||
@@ -124,8 +124,9 @@ public: | |||||
inline ObjectClass* operator[] (const int index) const throw() | inline ObjectClass* operator[] (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
ObjectClass* const result = (index >= 0 && index < numUsed) ? this->elements [index] | |||||
: (ObjectClass*) 0; | |||||
ObjectClass* const result = (((unsigned int) index) < (unsigned int) numUsed) | |||||
? this->elements [index] | |||||
: (ObjectClass*) 0; | |||||
lock.exit(); | lock.exit(); | ||||
return result; | return result; | ||||
@@ -139,7 +140,7 @@ public: | |||||
inline ObjectClass* getUnchecked (const int index) const throw() | inline ObjectClass* getUnchecked (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
jassert (index >= 0 && index < numUsed); | |||||
jassert (((unsigned int) index) < (unsigned int) numUsed); | |||||
ObjectClass* const result = this->elements [index]; | ObjectClass* const result = this->elements [index]; | ||||
lock.exit(); | lock.exit(); | ||||
@@ -464,7 +465,7 @@ public: | |||||
lock.enter(); | lock.enter(); | ||||
ObjectClass* toDelete = 0; | ObjectClass* toDelete = 0; | ||||
if (indexToRemove >= 0 && indexToRemove < numUsed) | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | { | ||||
ObjectClass** const e = this->elements + indexToRemove; | ObjectClass** const e = this->elements + indexToRemove; | ||||
@@ -598,8 +599,8 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (index1 >= 0 && index1 < numUsed | |||||
&& index2 >= 0 && index2 < numUsed) | |||||
if (((unsigned int) index1) < (unsigned int) numUsed | |||||
&& ((unsigned int) index2) < (unsigned int) numUsed) | |||||
{ | { | ||||
swapVariables (this->elements [index1], | swapVariables (this->elements [index1], | ||||
this->elements [index2]); | this->elements [index2]); | ||||
@@ -628,9 +629,9 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (currentIndex >= 0 && currentIndex < numUsed) | |||||
if (((unsigned int) currentIndex) < (unsigned int) numUsed) | |||||
{ | { | ||||
if (newIndex < 0 || newIndex >= numUsed) | |||||
if (((unsigned int) newIndex) >= (unsigned int) numUsed) | |||||
newIndex = numUsed - 1; | newIndex = numUsed - 1; | ||||
ObjectClass* const value = this->elements [currentIndex]; | ObjectClass* const value = this->elements [currentIndex]; | ||||
@@ -161,8 +161,9 @@ public: | |||||
inline ObjectClass* operator[] (const int index) const throw() | inline ObjectClass* operator[] (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
ObjectClass* const result = (index >= 0 && index < numUsed) ? this->elements [index] | |||||
: (ObjectClass*) 0; | |||||
ObjectClass* const result = (((unsigned int) index) < (unsigned int) numUsed) | |||||
? this->elements [index] | |||||
: (ObjectClass*) 0; | |||||
lock.exit(); | lock.exit(); | ||||
return result; | return result; | ||||
} | } | ||||
@@ -175,7 +176,7 @@ public: | |||||
inline ObjectClass* getUnchecked (const int index) const throw() | inline ObjectClass* getUnchecked (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
jassert (index >= 0 && index < numUsed); | |||||
jassert (((unsigned int) index) < (unsigned int) numUsed); | |||||
ObjectClass* const result = this->elements [index]; | ObjectClass* const result = this->elements [index]; | ||||
lock.exit(); | lock.exit(); | ||||
return result; | return result; | ||||
@@ -302,6 +303,7 @@ public: | |||||
if (indexToInsertAt >= 0) | if (indexToInsertAt >= 0) | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (indexToInsertAt > numUsed) | if (indexToInsertAt > numUsed) | ||||
indexToInsertAt = numUsed; | indexToInsertAt = numUsed; | ||||
@@ -458,7 +460,7 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (indexToRemove >= 0 && indexToRemove < numUsed) | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | { | ||||
ObjectClass** const e = this->elements + indexToRemove; | ObjectClass** const e = this->elements + indexToRemove; | ||||
@@ -577,8 +579,8 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (index1 >= 0 && index1 < numUsed | |||||
&& index2 >= 0 && index2 < numUsed) | |||||
if (((unsigned int) index1) < (unsigned int) numUsed | |||||
&& ((unsigned int) index2) < (unsigned int) numUsed) | |||||
{ | { | ||||
swapVariables (this->elements [index1], | swapVariables (this->elements [index1], | ||||
this->elements [index2]); | this->elements [index2]); | ||||
@@ -607,9 +609,9 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (currentIndex >= 0 && currentIndex < numUsed) | |||||
if (((unsigned int) currentIndex) < (unsigned int) numUsed) | |||||
{ | { | ||||
if (newIndex < 0 || newIndex > numUsed - 1) | |||||
if (((unsigned int) newIndex) >= (unsigned int) numUsed) | |||||
newIndex = numUsed - 1; | newIndex = numUsed - 1; | ||||
ObjectClass* const value = this->elements [currentIndex]; | ObjectClass* const value = this->elements [currentIndex]; | ||||
@@ -216,8 +216,9 @@ public: | |||||
inline ElementType operator[] (const int index) const throw() | inline ElementType operator[] (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
const ElementType result = (index >= 0 && index < numUsed) ? this->elements [index] | |||||
: (ElementType)0; | |||||
const ElementType result = (((unsigned int) index) < (unsigned int) numUsed) | |||||
? this->elements [index] | |||||
: (ElementType)0; | |||||
lock.exit(); | lock.exit(); | ||||
return result; | return result; | ||||
@@ -234,7 +235,7 @@ public: | |||||
inline ElementType getUnchecked (const int index) const throw() | inline ElementType getUnchecked (const int index) const throw() | ||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
jassert (index >= 0 && index < numUsed); | |||||
jassert (((unsigned int) index) < (unsigned int) numUsed); | |||||
const ElementType result = this->elements [index]; | const ElementType result = this->elements [index]; | ||||
lock.exit(); | lock.exit(); | ||||
@@ -471,7 +472,7 @@ public: | |||||
{ | { | ||||
lock.enter(); | lock.enter(); | ||||
if (indexToRemove >= 0 && indexToRemove < numUsed) | |||||
if (((unsigned int) indexToRemove) < (unsigned int) numUsed) | |||||
{ | { | ||||
--numUsed; | --numUsed; | ||||
@@ -160,7 +160,7 @@ public: | |||||
Type& startValue, | Type& startValue, | ||||
Type& numValues) const throw() | Type& numValues) const throw() | ||||
{ | { | ||||
if (rangeIndex >= 0 && rangeIndex < getNumRanges()) | |||||
if (((unsigned int) rangeIndex) < (unsigned int) getNumRanges()) | |||||
{ | { | ||||
startValue = values [rangeIndex << 1]; | startValue = values [rangeIndex << 1]; | ||||
numValues = values [(rangeIndex << 1) + 1] - startValue; | numValues = values [(rangeIndex << 1) + 1] - startValue; | ||||
@@ -1431,7 +1431,7 @@ const String String::replaceCharacters (const String& charactersToReplace, | |||||
{ | { | ||||
const int index = charactersToReplace.indexOfChar (*t); | const int index = charactersToReplace.indexOfChar (*t); | ||||
if (index >= 0 && index < len2) | |||||
if (((unsigned int) index) < (unsigned int) len2) | |||||
*t = charactersToInsertInstead [index]; | *t = charactersToInsertInstead [index]; | ||||
++t; | ++t; | ||||
@@ -1508,7 +1508,7 @@ const String String::toLowerCase() const throw() | |||||
//============================================================================== | //============================================================================== | ||||
tchar& String::operator[] (const int index) throw() | tchar& String::operator[] (const int index) throw() | ||||
{ | { | ||||
jassert (index >= 0 && index <= length()); | |||||
jassert (((unsigned int) index) <= (unsigned int) length()); | |||||
dupeInternalIfMultiplyReferenced(); | dupeInternalIfMultiplyReferenced(); | ||||
@@ -477,7 +477,7 @@ public: | |||||
No checks are made to see if the index is within a valid range, so be careful! | No checks are made to see if the index is within a valid range, so be careful! | ||||
*/ | */ | ||||
inline const tchar& operator[] (const int index) const throw() { jassert (index >= 0 && index <= length()); return text->text [index]; } | |||||
inline const tchar& operator[] (const int index) const throw() { jassert (((unsigned int) index) <= (unsigned int) length()); return text->text [index]; } | |||||
/** Returns a character from the string such that it can also be altered. | /** Returns a character from the string such that it can also be altered. | ||||
@@ -128,7 +128,7 @@ void StringArray::clear() throw() | |||||
const String& StringArray::operator[] (const int index) const throw() | const String& StringArray::operator[] (const int index) const throw() | ||||
{ | { | ||||
if (index >= 0 && index < strings.size()) | |||||
if (((unsigned int) index) < (unsigned int) strings.size()) | |||||
return *(const String*) (strings.getUnchecked (index)); | return *(const String*) (strings.getUnchecked (index)); | ||||
return String::empty; | return String::empty; | ||||
@@ -0,0 +1,111 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
Copyright 2004-7 by Raw Material Software ltd. | |||||
------------------------------------------------------------------------------ | |||||
JUCE can be redistributed and/or modified under the terms of the | |||||
GNU General Public License, as published by the Free Software Foundation; | |||||
either version 2 of the License, or (at your option) any later version. | |||||
JUCE is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||||
Boston, MA 02111-1307 USA | |||||
------------------------------------------------------------------------------ | |||||
If you'd like to release a closed-source product which uses JUCE, commercial | |||||
licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||||
more information. | |||||
============================================================================== | |||||
*/ | |||||
#ifndef __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ | |||||
#define __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ | |||||
#include "juce_CriticalSection.h" | |||||
//============================================================================== | |||||
/** | |||||
Automatically tries to lock and unlock a CriticalSection object. | |||||
Use one of these as a local variable to control access to a CriticalSection. | |||||
e.g. @code | |||||
CriticalSection myCriticalSection; | |||||
for (;;) | |||||
{ | |||||
const ScopedTryLock myScopedTryLock (myCriticalSection); | |||||
// Unlike using a ScopedLock, this may fail to actually get the lock, so you | |||||
// should test this with the isLocked() method before doing your thread-unsafe | |||||
// action.. | |||||
if (myScopedTryLock.isLocked()) | |||||
{ | |||||
...do some stuff... | |||||
} | |||||
else | |||||
{ | |||||
..our attempt at locking failed because another thread had already locked it.. | |||||
} | |||||
// myCriticalSection gets unlocked here (if it was locked) | |||||
} | |||||
@endcode | |||||
@see CriticalSection::tryEnter, ScopedLock, ScopedUnlock, ScopedReadLock | |||||
*/ | |||||
class JUCE_API ScopedTryLock | |||||
{ | |||||
public: | |||||
//============================================================================== | |||||
/** Creates a ScopedTryLock. | |||||
As soon as it is created, this will try to lock the CriticalSection, and | |||||
when the ScopedTryLock object is deleted, the CriticalSection will | |||||
be unlocked if the lock was successful. | |||||
Make sure this object is created and deleted by the same thread, | |||||
otherwise there are no guarantees what will happen! Best just to use it | |||||
as a local stack object, rather than creating one with the new() operator. | |||||
*/ | |||||
inline ScopedTryLock (const CriticalSection& lock) throw() : lock_ (lock), lockWasSuccessful (lock.tryEnter()) {} | |||||
/** Destructor. | |||||
The CriticalSection will be unlocked (if locked) when the destructor is called. | |||||
Make sure this object is created and deleted by the same thread, | |||||
otherwise there are no guarantees what will happen! | |||||
*/ | |||||
inline ~ScopedTryLock() throw() { if (lockWasSuccessful) lock_.exit(); } | |||||
/** Lock state | |||||
@return True if the CriticalSection is locked. | |||||
*/ | |||||
bool isLocked() const throw() { return lockWasSuccessful; } | |||||
private: | |||||
//============================================================================== | |||||
const CriticalSection& lock_; | |||||
const bool lockWasSuccessful; | |||||
ScopedTryLock (const ScopedTryLock&); | |||||
const ScopedTryLock& operator= (const ScopedTryLock&); | |||||
}; | |||||
#endif // __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ |
@@ -221,6 +221,9 @@ | |||||
#ifndef __JUCE_SCOPEDREADLOCK_JUCEHEADER__ | #ifndef __JUCE_SCOPEDREADLOCK_JUCEHEADER__ | ||||
#include "juce_core/threads/juce_ScopedReadLock.h" | #include "juce_core/threads/juce_ScopedReadLock.h" | ||||
#endif | #endif | ||||
#ifndef __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ | |||||
#include "juce_core/threads/juce_ScopedTryLock.h" | |||||
#endif | |||||
#ifndef __JUCE_SCOPEDWRITELOCK_JUCEHEADER__ | #ifndef __JUCE_SCOPEDWRITELOCK_JUCEHEADER__ | ||||
#include "juce_core/threads/juce_ScopedWriteLock.h" | #include "juce_core/threads/juce_ScopedWriteLock.h" | ||||
#endif | #endif | ||||