diff --git a/build/linux/platform_specific_code/juce_linux_SystemStats.cpp b/build/linux/platform_specific_code/juce_linux_SystemStats.cpp index 14ac470d21..bfa06be34a 100644 --- a/build/linux/platform_specific_code/juce_linux_SystemStats.cpp +++ b/build/linux/platform_specific_code/juce_linux_SystemStats.cpp @@ -100,6 +100,16 @@ const String SystemStats::getOperatingSystemName() throw() 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() { String info; diff --git a/build/linux/platform_specific_code/juce_linux_Windowing.cpp b/build/linux/platform_specific_code/juce_linux_Windowing.cpp index 950ad32e06..c79fcec3d0 100644 --- a/build/linux/platform_specific_code/juce_linux_Windowing.cpp +++ b/build/linux/platform_specific_code/juce_linux_Windowing.cpp @@ -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 - if (x < 0 || y < 0 || x >= ww || y >= wh) + if (((unsigned int) x) >= (unsigned int) ww + || ((unsigned int) y) >= (unsigned int) wh) return false; bool inFront = false; diff --git a/build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp b/build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp index 7ca3e8b9d3..385ca08c56 100644 --- a/build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp +++ b/build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp @@ -396,7 +396,7 @@ public: if (types != 0) { - if (index >= 0 && index < num) + if (((unsigned int) index) < num) { OSType id = types[index]; AudioDeviceSetProperty (deviceID, 0, 0, input, kAudioDevicePropertyDataSource, sizeof (id), &id); diff --git a/build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp b/build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp index 44508b2904..c4ce297b09 100644 --- a/build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp +++ b/build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp @@ -254,7 +254,7 @@ MidiOutput* MidiOutput::openDevice (int index) { MidiOutput* mo = 0; - if (index >= 0 && index < (int) MIDIGetNumberOfDestinations()) + if (((unsigned int) index) < (unsigned int) MIDIGetNumberOfDestinations()) { MIDIEndpointRef endPoint = MIDIGetDestination (index); @@ -496,7 +496,7 @@ MidiInput* MidiInput::openDevice (int index, MidiInputCallback* callback) { MidiInput* mi = 0; - if (index >= 0 && index < (int) MIDIGetNumberOfSources()) + if (((unsigned int) index) < (unsigned int) MIDIGetNumberOfSources()) { MIDIEndpointRef endPoint = MIDIGetSource (index); diff --git a/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp b/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp index 7a0c2f3058..49e120ef69 100644 --- a/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp +++ b/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp @@ -126,6 +126,16 @@ const String SystemStats::getOperatingSystemName() throw() 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() { diff --git a/build/macosx/platform_specific_code/juce_mac_Windowing.cpp b/build/macosx/platform_specific_code/juce_mac_Windowing.cpp index cfddf553ce..7191ab7257 100644 --- a/build/macosx/platform_specific_code/juce_mac_Windowing.cpp +++ b/build/macosx/platform_specific_code/juce_mac_Windowing.cpp @@ -594,8 +594,8 @@ public: 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)) return false; diff --git a/build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp b/build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp index ea121c2db3..89caeeb21d 100644 --- a/build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp +++ b/build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp @@ -1708,7 +1708,7 @@ AudioCDReader* AudioCDReader::createReaderForCD (const int deviceIndex) CDDeviceInfo 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])); diff --git a/build/win32/platform_specific_code/juce_win32_SystemStats.cpp b/build/win32/platform_specific_code/juce_win32_SystemStats.cpp index 39a050e905..430a04e76d 100644 --- a/build/win32/platform_specific_code/juce_win32_SystemStats.cpp +++ b/build/win32/platform_specific_code/juce_win32_SystemStats.cpp @@ -348,6 +348,23 @@ const String SystemStats::getOperatingSystemName() throw() 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() { diff --git a/build/win32/platform_specific_code/juce_win32_Windowing.cpp b/build/win32/platform_specific_code/juce_win32_Windowing.cpp index ef17556f3c..bcb91c028b 100644 --- a/build/win32/platform_specific_code/juce_win32_Windowing.cpp +++ b/build/win32/platform_specific_code/juce_win32_Windowing.cpp @@ -1429,9 +1429,8 @@ private: } 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; GetWindowRect (hwnd, &r); diff --git a/build/win32/vc8/JUCE.vcproj b/build/win32/vc8/JUCE.vcproj index d8a5ae3bf5..f74513feeb 100644 --- a/build/win32/vc8/JUCE.vcproj +++ b/build/win32/vc8/JUCE.vcproj @@ -5783,6 +5783,10 @@ RelativePath="..\..\..\src\juce_core\threads\juce_ScopedReadLock.h" > + + diff --git a/docs/JUCE changelist.txt b/docs/JUCE changelist.txt index ca588d6cb9..d111620344 100644 --- a/docs/JUCE changelist.txt +++ b/docs/JUCE changelist.txt @@ -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 diff --git a/extras/audio plugin host/src/plugins/juce_KnownPluginList.cpp b/extras/audio plugin host/src/plugins/juce_KnownPluginList.cpp index 37c9e9dadf..e33f6d9fd3 100644 --- a/extras/audio plugin host/src/plugins/juce_KnownPluginList.cpp +++ b/extras/audio plugin host/src/plugins/juce_KnownPluginList.cpp @@ -307,5 +307,5 @@ int KnownPluginList::getIndexChosenByMenu (const int menuResultCode) const { const int i = menuResultCode - menuIdBase; - return (i >= 0 && i < types.size()) ? i : -1; + return (((unsigned int) i) < (unsigned int) types.size()) ? i : -1; } diff --git a/extras/audio plugin host/src/plugins/juce_PluginListComponent.cpp b/extras/audio plugin host/src/plugins/juce_PluginListComponent.cpp index e188e630de..7cc45d7672 100644 --- a/extras/audio plugin host/src/plugins/juce_PluginListComponent.cpp +++ b/extras/audio plugin host/src/plugins/juce_PluginListComponent.cpp @@ -201,7 +201,7 @@ void PluginListComponent::buttonClicked (Button* b) } } -bool PluginListComponent::isInterestedInFileDrag (const StringArray& files) +bool PluginListComponent::isInterestedInFileDrag (const StringArray& /*files*/) { return true; } diff --git a/extras/audio plugin host/src/plugins/vst/juce_VSTPluginInstance.cpp b/extras/audio plugin host/src/plugins/vst/juce_VSTPluginInstance.cpp index af4f0ce8bc..92bba8b3c4 100644 --- a/extras/audio plugin host/src/plugins/vst/juce_VSTPluginInstance.cpp +++ b/extras/audio plugin host/src/plugins/vst/juce_VSTPluginInstance.cpp @@ -2411,7 +2411,7 @@ int VSTPluginInstance::getNumParameters() float VSTPluginInstance::getParameter (int index) { - if (effect != 0 && index >= 0 && index < effect->numParams) + if (effect != 0 && ((unsigned int) index) < (unsigned int) effect->numParams) { try { @@ -2428,7 +2428,7 @@ float VSTPluginInstance::getParameter (int index) 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 { diff --git a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp b/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp index aac2bb736a..8ed299888b 100644 --- a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp +++ b/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp @@ -661,7 +661,7 @@ public: while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) { - jassert (midiEventPosition >= 0 && midiEventPosition < (int) numSamples); + jassert (((unsigned int) midiEventPosition) < (unsigned int) numSamples); diff --git a/extras/the jucer/src/properties/jucer_JustificationProperty.h b/extras/the jucer/src/properties/jucer_JustificationProperty.h index 99072151aa..59fa42bc61 100644 --- a/extras/the jucer/src/properties/jucer_JustificationProperty.h +++ b/extras/the jucer/src/properties/jucer_JustificationProperty.h @@ -85,7 +85,7 @@ public: Justification::bottomLeft, Justification::bottomRight }; - if (newIndex >= 0 && newIndex < numElementsInArray (types) + if (((unsigned int) newIndex) < (unsigned int) numElementsInArray (types) && types [newIndex] != getJustification().getFlags()) { setJustification (Justification (types [newIndex])); diff --git a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp index 3e47c37e22..91d1dffe2e 100644 --- a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp +++ b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp @@ -64,7 +64,7 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, const int numChannels_, const int numSamples) throw() { - jassert (numChannels_ >= 0 && numChannels_ <= maxNumAudioSampleBufferChannels); + jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels); numChannels = numChannels_; size = numSamples; @@ -134,8 +134,8 @@ AudioSampleBuffer::~AudioSampleBuffer() throw() float* AudioSampleBuffer::getSampleData (const int channelNumber, 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; } @@ -211,8 +211,7 @@ void AudioSampleBuffer::clear() throw() void AudioSampleBuffer::clear (const int startSample, const int numSamples) throw() { - jassert (startSample >= 0); - jassert (startSample + numSamples <= size); + jassert (startSample >= 0 && startSample + numSamples <= size); for (int i = 0; i < numChannels; ++i) zeromem (channels [i] + startSample, numSamples * sizeof (float)); @@ -222,7 +221,7 @@ void AudioSampleBuffer::clear (const int channel, const int startSample, const int numSamples) throw() { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); zeromem (channels [channel] + startSample, numSamples * sizeof (float)); @@ -233,7 +232,7 @@ void AudioSampleBuffer::applyGain (const int channel, int numSamples, const float gain) throw() { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); if (gain != 1.0f) @@ -264,7 +263,7 @@ void AudioSampleBuffer::applyGainRamp (const int channel, } else { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); const float increment = (endGain - startGain) / numSamples; @@ -295,9 +294,9 @@ void AudioSampleBuffer::addFrom (const int destChannel, const float gain) throw() { jassert (&source != this); - jassert (destChannel >= 0 && destChannel < numChannels); + jassert (((unsigned int) destChannel) < (unsigned int) numChannels); 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); if (gain != 0.0f && numSamples > 0) @@ -324,7 +323,7 @@ void AudioSampleBuffer::addFrom (const int destChannel, int numSamples, const float gain) throw() { - jassert (destChannel >= 0 && destChannel < numChannels); + jassert (((unsigned int) destChannel) < (unsigned int) numChannels); jassert (destStartSample >= 0 && destStartSample + numSamples <= size); jassert (source != 0); @@ -352,7 +351,7 @@ void AudioSampleBuffer::addFromWithRamp (const int destChannel, float startGain, const float endGain) throw() { - jassert (destChannel >= 0 && destChannel < numChannels); + jassert (((unsigned int) destChannel) < (unsigned int) numChannels); jassert (destStartSample >= 0 && destStartSample + numSamples <= size); jassert (source != 0); @@ -388,9 +387,9 @@ void AudioSampleBuffer::copyFrom (const int destChannel, int numSamples) throw() { jassert (&source != this); - jassert (destChannel >= 0 && destChannel < numChannels); + jassert (((unsigned int) destChannel) < (unsigned int) numChannels); 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); if (numSamples > 0) @@ -406,7 +405,7 @@ void AudioSampleBuffer::copyFrom (const int destChannel, const float* source, int numSamples) throw() { - jassert (destChannel >= 0 && destChannel < numChannels); + jassert (((unsigned int) destChannel) < (unsigned int) numChannels); jassert (destStartSample >= 0 && destStartSample + numSamples <= size); jassert (source != 0); @@ -424,7 +423,7 @@ void AudioSampleBuffer::findMinMax (const int channel, float& minVal, float& maxVal) const throw() { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); if (numSamples <= 0) @@ -459,7 +458,7 @@ float AudioSampleBuffer::getMagnitude (const int channel, const int startSample, const int numSamples) const throw() { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); float mn, mx; @@ -483,7 +482,7 @@ float AudioSampleBuffer::getRMSLevel (const int channel, const int startSample, const int numSamples) const throw() { - jassert (channel >= 0 && channel < numChannels); + jassert (((unsigned int) channel) < (unsigned int) numChannels); jassert (startSample >= 0 && startSample + numSamples <= size); if (numSamples <= 0 || channel < 0 || channel >= numChannels) diff --git a/src/juce_appframework/audio/midi/juce_MidiFile.cpp b/src/juce_appframework/audio/midi/juce_MidiFile.cpp index 378900f01f..76cc08becb 100644 --- a/src/juce_appframework/audio/midi/juce_MidiFile.cpp +++ b/src/juce_appframework/audio/midi/juce_MidiFile.cpp @@ -74,7 +74,7 @@ int MidiFile::getNumTracks() 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() diff --git a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp b/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp index 4424c6628a..c7132d957f 100644 --- a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp +++ b/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp @@ -60,24 +60,24 @@ bool MidiKeyboardState::isNoteOn (const int midiChannel, const int n) const thro { jassert (midiChannel >= 0 && midiChannel <= 16); - return n >= 0 && n < 128 + return ((unsigned int) n) < 128 && (noteStates[n] & (1 << (midiChannel - 1))) != 0; } 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; } void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, const float velocity) { jassert (midiChannel >= 0 && midiChannel <= 16); - jassert (midiNoteNumber >= 0 && midiNoteNumber < 128); + jassert (((unsigned int) midiNoteNumber) < 128); const ScopedLock sl (lock); - if (midiNoteNumber >= 0 && midiNoteNumber < 128) + if (((unsigned int) midiNoteNumber) < 128) { const int timeNow = (int) Time::getMillisecondCounter(); 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) { - if (midiNoteNumber >= 0 && midiNoteNumber < 128) + if (((unsigned int) midiNoteNumber) < 128) { noteStates [midiNoteNumber] |= (1 << (midiChannel - 1)); diff --git a/src/juce_appframework/audio/midi/juce_MidiMessage.cpp b/src/juce_appframework/audio/midi/juce_MidiMessage.cpp index b5b9abda8f..9cef12993e 100644 --- a/src/juce_appframework/audio/midi/juce_MidiMessage.cpp +++ b/src/juce_appframework/audio/midi/juce_MidiMessage.cpp @@ -380,8 +380,8 @@ const MidiMessage MidiMessage::aftertouchChange (const int channel, const int aftertouchValue) throw() { 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), noteNum & 0x7f, @@ -404,7 +404,7 @@ const MidiMessage MidiMessage::channelPressureChange (const int channel, const int pressure) throw() { jassert (channel > 0 && channel <= 16); - jassert (pressure >= 0 && pressure <= 127); + jassert (((unsigned int) pressure) <= 127); return MidiMessage (0xd0 | jlimit (0, 15, channel - 1), pressure & 0x7f); @@ -443,7 +443,7 @@ const MidiMessage MidiMessage::pitchWheel (const int channel, const int position) throw() { jassert (channel > 0 && channel <= 16); - jassert (position >= 0 && position <= 0x3fff); + jassert (((unsigned int) position) <= 0x3fff); return MidiMessage (0xe0 | jlimit (0, 15, channel - 1), position & 127, @@ -493,7 +493,7 @@ const MidiMessage MidiMessage::noteOn (const int channel, const uint8 velocity) throw() { jassert (channel > 0 && channel <= 16); - jassert (noteNumber >= 0 && noteNumber <= 127); + jassert (((unsigned int) noteNumber) <= 127); return MidiMessage (0x90 | jlimit (0, 15, channel - 1), noteNumber & 127, @@ -504,7 +504,7 @@ const MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber) throw() { 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); } @@ -1010,7 +1010,7 @@ const String MidiMessage::getMidiNoteName (int note, "F", "Gb", "G", "Ab", "A", "Bb", "B" }; - if (note >= 0 && note < 128) + if (((unsigned int) note) < 128) { const String s ((useSharps) ? sharpNoteNames [note % 12] : flatNoteNames [note % 12]); @@ -1059,8 +1059,8 @@ const String MidiMessage::getGMInstrumentName (int n) throw() "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() @@ -1073,8 +1073,8 @@ const String MidiMessage::getGMInstrumentBankName (int n) throw() "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() @@ -1124,8 +1124,8 @@ const String MidiMessage::getControllerName (int n) throw() "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 diff --git a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp b/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp index 0e10068b37..42506d2b6b 100644 --- a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp +++ b/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp @@ -135,10 +135,10 @@ double MidiMessageSequence::getEndTime() 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 0.0; } //============================================================================== @@ -161,7 +161,7 @@ void MidiMessageSequence::addEvent (const MidiMessage& newMessage, void MidiMessageSequence::deleteEvent (const int index, const bool deleteMatchingNoteUp) { - if (index >= 0 && index < list.size()) + if (((unsigned int) index) < (unsigned int) list.size()) { if (deleteMatchingNoteUp) deleteEvent (getIndexOfMatchingKeyUp (index), false); diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp b/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp index e72d14f397..992d3b1d88 100644 --- a/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp +++ b/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp @@ -110,7 +110,7 @@ void AudioProcessor::setParameterNotifyingHost (const int parameterIndex, 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;) { @@ -125,7 +125,7 @@ void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex void AudioProcessor::beginParameterChangeGesture (int parameterIndex) { - jassert (parameterIndex >= 0 && parameterIndex < getNumParameters()); + jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); #ifdef JUCE_DEBUG // 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) { - jassert (parameterIndex >= 0 && parameterIndex < getNumParameters()); + jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); #ifdef JUCE_DEBUG // This means you've called endParameterChangeGesture without having previously called diff --git a/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp b/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp index 80c497f02f..c3a253984b 100644 --- a/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp +++ b/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp @@ -286,7 +286,7 @@ void ComboBox::setSelectedItemIndex (const int index, { if (currentIndex != index || label->getText() != getItemText (currentIndex)) { - if (index >= 0 && index < getNumItems()) + if (((unsigned int) index) < (unsigned int) getNumItems()) currentIndex = index; else currentIndex = -1; diff --git a/src/juce_appframework/gui/components/controls/juce_ListBox.cpp b/src/juce_appframework/gui/components/controls/juce_ListBox.cpp index fcff08e239..30b0691a28 100644 --- a/src/juce_appframework/gui/components/controls/juce_ListBox.cpp +++ b/src/juce_appframework/gui/components/controls/juce_ListBox.cpp @@ -470,7 +470,7 @@ void ListBox::selectRowInternal (const int row, if ((! isRowSelected (row)) || (deselectOthersFirst && getNumSelectedRows() > 1)) { - if (row >= 0 && row < totalItems) + if (((unsigned int) row) < (unsigned int) totalItems) { if (deselectOthersFirst) selected.clear(); @@ -616,7 +616,7 @@ int ListBox::getNumSelectedRows() 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; } @@ -633,11 +633,11 @@ int ListBox::getLastRowSelected() const //============================================================================== 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; - if (row >= 0 && row < totalItems) + if (((unsigned int) row) < (unsigned int) totalItems) return row; } diff --git a/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp b/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp index c4292c2119..b089881bf1 100644 --- a/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp +++ b/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp @@ -212,7 +212,7 @@ void TableHeaderComponent::setColumnWidth (const int columnId, const int newWidt { 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(); @@ -879,7 +879,7 @@ void TableHeaderComponent::handleAsyncUpdate() int TableHeaderComponent::getResizeDraggerAt (const int mouseX) const throw() { - if (mouseX >= 0 && mouseX < getWidth()) + if (((unsigned int) mouseX) < (unsigned int) getWidth()) { const int draggableDistance = 3; int x = 0; diff --git a/src/juce_appframework/gui/components/controls/juce_TreeView.cpp b/src/juce_appframework/gui/components/controls/juce_TreeView.cpp index 7f2aa64738..a1f8078f97 100644 --- a/src/juce_appframework/gui/components/controls/juce_TreeView.cpp +++ b/src/juce_appframework/gui/components/controls/juce_TreeView.cpp @@ -802,7 +802,7 @@ void TreeViewItem::removeSubItem (const int index, const bool deleteItem) if (ownerView != 0) ownerView->nodeAlterationLock.enter(); - if (index >= 0 && index < subItems.size()) + if (((unsigned int) index) < (unsigned int) subItems.size()) { subItems.remove (index, deleteItem); treeHasChanged(); @@ -1127,7 +1127,7 @@ TreeViewItem* TreeViewItem::getItemOnRow (int index) throw() TreeViewItem* TreeViewItem::findItemRecursively (int y) throw() { - if (y >= 0 && y < totalHeight) + if (((unsigned int) y) < (unsigned int) totalHeight) { const int h = itemHeight; diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp b/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp index 597dce365c..c0602a7e12 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp +++ b/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp @@ -150,7 +150,7 @@ void FileSearchPathListComponent::paintListBoxItem (int rowNumber, Graphics& g, void FileSearchPathListComponent::deleteKeyPressed (int row) { - if (row >= 0 && row < path.getNumPaths()) + if (((unsigned int) row) < (unsigned int) path.getNumPaths()) { path.remove (row); changed(); @@ -263,7 +263,7 @@ void FileSearchPathListComponent::buttonClicked (Button* button) } else if (button == downButton) { - if (currentRow >= 0 && currentRow < path.getNumPaths()-1) + if (currentRow >= 0 && currentRow < path.getNumPaths() - 1) { const File f (path[currentRow]); path.remove (currentRow); diff --git a/src/juce_appframework/gui/components/juce_Component.cpp b/src/juce_appframework/gui/components/juce_Component.cpp index b14f4950c9..5281c5c837 100644 --- a/src/juce_appframework/gui/components/juce_Component.cpp +++ b/src/juce_appframework/gui/components/juce_Component.cpp @@ -1103,7 +1103,8 @@ void Component::getInterceptsMouseClicks (bool& allowsClicksOnThisComponent, 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)) { 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) { 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)) { for (int i = childComponentList_.size(); --i >= 0;) diff --git a/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp b/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp index b243c1bfe0..93199541b9 100644 --- a/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp +++ b/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp @@ -92,14 +92,15 @@ bool TabBarButton::hitTest (int mx, int my) if (owner->getOrientation() == TabbedButtonBar::TabsAtLeft || 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; } else { if (mx >= x + overlapPixels && mx < x + w - overlapPixels - && my >= 0 && my < getHeight()) + && ((unsigned int) my) < (unsigned int) getHeight()) return true; } @@ -233,7 +234,7 @@ void TabbedButtonBar::addTab (const String& tabName, if (tabName.isNotEmpty()) { - if (insertIndex < 0 || insertIndex > tabs.size()) + if (((unsigned int) insertIndex) > (unsigned int) tabs.size()) insertIndex = tabs.size(); for (int i = tabs.size(); --i >= insertIndex;) @@ -262,7 +263,7 @@ void TabbedButtonBar::addTab (const String& tabName, void TabbedButtonBar::setTabName (const int tabIndex, const String& newName) { - if (tabIndex >= 0 && tabIndex < tabs.size() + if (((unsigned int) tabIndex) < (unsigned int) tabs.size() && tabs[tabIndex] != newName) { tabs.set (tabIndex, newName); @@ -278,7 +279,7 @@ void TabbedButtonBar::setTabName (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; if (currentTabIndex == tabIndex) @@ -328,7 +329,7 @@ void TabbedButtonBar::setCurrentTabIndex (int newIndex) { if (currentTabIndex != newIndex) { - if (newIndex < 0 || newIndex >= tabs.size()) + if (((unsigned int) newIndex) >= (unsigned int) tabs.size()) newIndex = -1; currentTabIndex = newIndex; @@ -505,7 +506,8 @@ const Colour TabbedButtonBar::getTabBackgroundColour (const int tabIndex) 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); repaint(); diff --git a/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp b/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp index 2b639db5b8..05e4a67395 100644 --- a/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp +++ b/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp @@ -156,7 +156,7 @@ int MenuBarComponent::getItemAt (const int x, const int y) 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 x2 = xPositions [index + 1]; @@ -223,7 +223,7 @@ void MenuBarComponent::showMenu (int index) indexToShowAgain = -1; repaint(); - if (itemUnderMouse >= 0 && itemUnderMouse < menuNames.size()) + if (((unsigned int) itemUnderMouse) < (unsigned int) menuNames.size()) { PopupMenu m (model->getMenuForIndex (itemUnderMouse, menuNames [itemUnderMouse])); @@ -268,7 +268,7 @@ void MenuBarComponent::showMenu (int index) repaint(); itemUnderMouse = indexToShowAgain; - if (itemUnderMouse < 0 || itemUnderMouse >= menuNames.size()) + if (((unsigned int) itemUnderMouse) >= (unsigned int) menuNames.size()) break; } else diff --git a/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp b/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp index 8912f42fe8..f2f7d50c06 100644 --- a/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp +++ b/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp @@ -423,7 +423,7 @@ public: { const int y = minY - mw->windowPos.getY(); mw->ensureItemIsVisible (itemIdThatMustBeVisible, - (y >= 0 && y < mw->windowPos.getHeight()) ? y : -1); + (((unsigned int) y) < (unsigned int) mw->windowPos.getHeight()) ? y : -1); } mw->resizeToBestWindowPos(); @@ -696,7 +696,7 @@ public: bool overScrollArea = false; if (isScrolling() - && (isOver || (isDown && x >= 0 && x < getWidth())) + && (isOver || (isDown && ((unsigned int) x) < (unsigned int) getWidth())) && ((isScrollZoneActive (false) && y < scrollZone) || (isScrollZoneActive (true) && y > getHeight() - scrollZone))) { diff --git a/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp b/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp index bcf6ee3f67..d746d655a3 100644 --- a/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp +++ b/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp @@ -103,7 +103,7 @@ public: int width, int height, bool rowIsSelected) { - if (row >= 0 && row < items.size()) + if (((unsigned int) row) < (unsigned int) items.size()) { if (rowIsSelected) g.fillAll (findColour (TextEditor::highlightColourId) @@ -190,7 +190,7 @@ private: void flipEnablement (const int row) { - if (row >= 0 && row < items.size()) + if (((unsigned int) row) < (unsigned int) items.size()) { AudioIODevice* const audioDevice = deviceManager.getCurrentAudioDevice(); diff --git a/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp b/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp index faef56dffb..e11dbd618d 100644 --- a/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp +++ b/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp @@ -113,9 +113,8 @@ public: 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) diff --git a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp b/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp index 9c0d1f431f..5fb7fe353f 100644 --- a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp +++ b/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp @@ -357,10 +357,8 @@ void ComponentPeer::sendFakeMouseMove() throw() int 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)) { postMessage (new Message (fakeMouseMoveMessage, x, y, 0)); diff --git a/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp b/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp index df2572cfd6..1020bdb465 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp +++ b/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp @@ -435,7 +435,7 @@ void GlyphArrangement::ensureNumGlyphsAllocated (const int minGlyphs) 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) glyphs[i].glyphInfo->getTypeface()->incReferenceCount(); @@ -457,7 +457,7 @@ void GlyphArrangement::clear() throw() PositionedGlyph& GlyphArrangement::getGlyph (const int index) const throw() { - jassert (index >= 0 && index < numGlyphs); + jassert (((unsigned int) index) < (unsigned int) numGlyphs); return glyphs [index]; } @@ -966,7 +966,7 @@ void GlyphArrangement::moveRangeOfGlyphs (int startIndex, int num, while (--num >= 0) { - jassert (startIndex >= 0 && startIndex <= numGlyphs); + jassert (((unsigned int) startIndex) <= (unsigned int) numGlyphs); glyphs [startIndex++].moveBy (dx, dy); } } @@ -986,7 +986,7 @@ void GlyphArrangement::stretchRangeOfGlyphs (int startIndex, int num, while (--num >= 0) { - jassert (startIndex >= 0 && startIndex <= numGlyphs); + jassert (((unsigned int) startIndex) <= (unsigned int) numGlyphs); PositionedGlyph& pg = glyphs[startIndex++]; pg.x = xAnchor + (pg.x - xAnchor) * horizontalScaleFactor; diff --git a/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp b/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp index d8841f3281..8928ab56de 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp +++ b/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp @@ -73,10 +73,10 @@ void RectangleList::clear() 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); - else - return Rectangle(); + + return Rectangle(); } bool RectangleList::isEmpty() const throw() diff --git a/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp b/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp index 859d406cbc..482b66c434 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp +++ b/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp @@ -229,7 +229,8 @@ const Colour Image::getPixelAt (const int x, const int y) const { 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; 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, 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; 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, 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; uint8* const pixels = lockPixelDataReadWrite (x, y, 1, 1, ls, ps); diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp b/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp index 20c7afaab5..18344d2d14 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp +++ b/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp @@ -61,8 +61,8 @@ void ImageConvolutionKernel::setKernelValue (const int x, const int y, 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; } diff --git a/src/juce_core/basics/juce_MathsFunctions.h b/src/juce_core/basics/juce_MathsFunctions.h index 4f58f1a63a..15f5806041 100644 --- a/src/juce_core/basics/juce_MathsFunctions.h +++ b/src/juce_core/basics/juce_MathsFunctions.h @@ -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. @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 @returns the closest value to valueToConstrain which lies between lowerLimit and upperLimit (inclusive) + @see jlimit0To, jmin, jmax */ template inline Type jlimit (const Type lowerLimit, diff --git a/src/juce_core/basics/juce_SystemStats.h b/src/juce_core/basics/juce_SystemStats.h index 5ee193fe8a..5d3a3ca8b9 100644 --- a/src/juce_core/basics/juce_SystemStats.h +++ b/src/juce_core/basics/juce_SystemStats.h @@ -87,6 +87,10 @@ public: */ 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.. diff --git a/src/juce_core/containers/juce_Array.h b/src/juce_core/containers/juce_Array.h index b9201f5c03..d905828769 100644 --- a/src/juce_core/containers/juce_Array.h +++ b/src/juce_core/containers/juce_Array.h @@ -231,8 +231,9 @@ public: inline ElementType operator[] (const int index) const throw() { 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(); return result; @@ -250,7 +251,7 @@ public: inline ElementType getUnchecked (const int index) const throw() { lock.enter(); - jassert (index >= 0 && index < numUsed); + jassert (((unsigned int) index) < (unsigned int) numUsed); const ElementType result = this->elements [index]; lock.exit(); @@ -268,7 +269,7 @@ public: */ inline ElementType& getReference (const int index) const throw() { - jassert (index >= 0 && index < numUsed); + jassert (((unsigned int) index) < (unsigned int) numUsed); return this->elements [index]; } @@ -405,11 +406,8 @@ public: lock.enter(); 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; const int numberToMove = numUsed - indexToInsertAt; @@ -447,7 +445,7 @@ public: lock.enter(); this->ensureAllocatedSize (numUsed + numberOfTimesToInsertIt); - if (indexToInsertAt >= 0 && indexToInsertAt < numUsed) + if (((unsigned int) indexToInsertAt) < (unsigned int) numUsed) { ElementType* insertPos = this->elements + indexToInsertAt; const int numberToMove = numUsed - indexToInsertAt; @@ -489,7 +487,7 @@ public: lock.enter(); this->ensureAllocatedSize (numUsed + numberOfElements); - if (indexToInsertAt >= 0 && indexToInsertAt < numUsed) + if (((unsigned int) indexToInsertAt) < (unsigned int) numUsed) { ElementType* insertPos = this->elements + indexToInsertAt; const int numberToMove = numUsed - indexToInsertAt; @@ -573,7 +571,7 @@ public: const ElementType newValue) throw() { lock.enter(); - jassert (indexToChange >= 0 && indexToChange < numUsed); + jassert (((unsigned int) indexToChange) < (unsigned int) numUsed); this->elements [indexToChange] = newValue; lock.exit(); } @@ -737,7 +735,7 @@ public: { lock.enter(); - if (indexToRemove >= 0 && indexToRemove < numUsed) + if (((unsigned int) indexToRemove) < (unsigned int) numUsed) { --numUsed; @@ -916,8 +914,8 @@ public: { 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], this->elements [index2]); @@ -947,9 +945,9 @@ public: { 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; const ElementType value = this->elements [currentIndex]; diff --git a/src/juce_core/containers/juce_BitArray.cpp b/src/juce_core/containers/juce_BitArray.cpp index 8104ea1fd1..ca444c60b3 100644 --- a/src/juce_core/containers/juce_BitArray.cpp +++ b/src/juce_core/containers/juce_BitArray.cpp @@ -160,7 +160,7 @@ bool BitArray::operator!= (const BitArray& other) 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); } @@ -211,7 +211,7 @@ void BitArray::setBit (const int bit, 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)); } @@ -922,7 +922,7 @@ void BitArray::parseString (const String& text, const tchar c = *t++; const int digit = CharacterFunctions::getHexDigitValue (c); - if (digit >= 0 && digit < base) + if (((unsigned int) digit) < (unsigned int) base) { shiftBits (bits); add (digit); diff --git a/src/juce_core/containers/juce_OwnedArray.h b/src/juce_core/containers/juce_OwnedArray.h index a5fb022011..719e9fb071 100644 --- a/src/juce_core/containers/juce_OwnedArray.h +++ b/src/juce_core/containers/juce_OwnedArray.h @@ -124,8 +124,9 @@ public: inline ObjectClass* operator[] (const int index) const throw() { 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(); return result; @@ -139,7 +140,7 @@ public: inline ObjectClass* getUnchecked (const int index) const throw() { lock.enter(); - jassert (index >= 0 && index < numUsed); + jassert (((unsigned int) index) < (unsigned int) numUsed); ObjectClass* const result = this->elements [index]; lock.exit(); @@ -464,7 +465,7 @@ public: lock.enter(); ObjectClass* toDelete = 0; - if (indexToRemove >= 0 && indexToRemove < numUsed) + if (((unsigned int) indexToRemove) < (unsigned int) numUsed) { ObjectClass** const e = this->elements + indexToRemove; @@ -598,8 +599,8 @@ public: { 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], this->elements [index2]); @@ -628,9 +629,9 @@ public: { 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; ObjectClass* const value = this->elements [currentIndex]; diff --git a/src/juce_core/containers/juce_ReferenceCountedArray.h b/src/juce_core/containers/juce_ReferenceCountedArray.h index 68aeaff5bf..f90545d608 100644 --- a/src/juce_core/containers/juce_ReferenceCountedArray.h +++ b/src/juce_core/containers/juce_ReferenceCountedArray.h @@ -161,8 +161,9 @@ public: inline ObjectClass* operator[] (const int index) const throw() { 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(); return result; } @@ -175,7 +176,7 @@ public: inline ObjectClass* getUnchecked (const int index) const throw() { lock.enter(); - jassert (index >= 0 && index < numUsed); + jassert (((unsigned int) index) < (unsigned int) numUsed); ObjectClass* const result = this->elements [index]; lock.exit(); return result; @@ -302,6 +303,7 @@ public: if (indexToInsertAt >= 0) { lock.enter(); + if (indexToInsertAt > numUsed) indexToInsertAt = numUsed; @@ -458,7 +460,7 @@ public: { lock.enter(); - if (indexToRemove >= 0 && indexToRemove < numUsed) + if (((unsigned int) indexToRemove) < (unsigned int) numUsed) { ObjectClass** const e = this->elements + indexToRemove; @@ -577,8 +579,8 @@ public: { 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], this->elements [index2]); @@ -607,9 +609,9 @@ public: { 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; ObjectClass* const value = this->elements [currentIndex]; diff --git a/src/juce_core/containers/juce_SortedSet.h b/src/juce_core/containers/juce_SortedSet.h index 864586d47d..1d671f433d 100644 --- a/src/juce_core/containers/juce_SortedSet.h +++ b/src/juce_core/containers/juce_SortedSet.h @@ -216,8 +216,9 @@ public: inline ElementType operator[] (const int index) const throw() { 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(); return result; @@ -234,7 +235,7 @@ public: inline ElementType getUnchecked (const int index) const throw() { lock.enter(); - jassert (index >= 0 && index < numUsed); + jassert (((unsigned int) index) < (unsigned int) numUsed); const ElementType result = this->elements [index]; lock.exit(); @@ -471,7 +472,7 @@ public: { lock.enter(); - if (indexToRemove >= 0 && indexToRemove < numUsed) + if (((unsigned int) indexToRemove) < (unsigned int) numUsed) { --numUsed; diff --git a/src/juce_core/containers/juce_SparseSet.h b/src/juce_core/containers/juce_SparseSet.h index d1b7ef656f..e9fe6de2e1 100644 --- a/src/juce_core/containers/juce_SparseSet.h +++ b/src/juce_core/containers/juce_SparseSet.h @@ -160,7 +160,7 @@ public: Type& startValue, Type& numValues) const throw() { - if (rangeIndex >= 0 && rangeIndex < getNumRanges()) + if (((unsigned int) rangeIndex) < (unsigned int) getNumRanges()) { startValue = values [rangeIndex << 1]; numValues = values [(rangeIndex << 1) + 1] - startValue; diff --git a/src/juce_core/text/juce_String.cpp b/src/juce_core/text/juce_String.cpp index dd719f7e98..aea4155cb8 100644 --- a/src/juce_core/text/juce_String.cpp +++ b/src/juce_core/text/juce_String.cpp @@ -1431,7 +1431,7 @@ const String String::replaceCharacters (const String& charactersToReplace, { const int index = charactersToReplace.indexOfChar (*t); - if (index >= 0 && index < len2) + if (((unsigned int) index) < (unsigned int) len2) *t = charactersToInsertInstead [index]; ++t; @@ -1508,7 +1508,7 @@ const String String::toLowerCase() const throw() //============================================================================== tchar& String::operator[] (const int index) throw() { - jassert (index >= 0 && index <= length()); + jassert (((unsigned int) index) <= (unsigned int) length()); dupeInternalIfMultiplyReferenced(); diff --git a/src/juce_core/text/juce_String.h b/src/juce_core/text/juce_String.h index dacdf2a4a7..cffc1b5328 100644 --- a/src/juce_core/text/juce_String.h +++ b/src/juce_core/text/juce_String.h @@ -477,7 +477,7 @@ public: 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. diff --git a/src/juce_core/text/juce_StringArray.cpp b/src/juce_core/text/juce_StringArray.cpp index b6b88ef727..d26f046442 100644 --- a/src/juce_core/text/juce_StringArray.cpp +++ b/src/juce_core/text/juce_StringArray.cpp @@ -128,7 +128,7 @@ void StringArray::clear() 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 String::empty; diff --git a/src/juce_core/threads/juce_ScopedTryLock.h b/src/juce_core/threads/juce_ScopedTryLock.h new file mode 100644 index 0000000000..540b184f09 --- /dev/null +++ b/src/juce_core/threads/juce_ScopedTryLock.h @@ -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__ diff --git a/src/juce_core_includes.h b/src/juce_core_includes.h index b8b53ee4cf..8cd90ae215 100644 --- a/src/juce_core_includes.h +++ b/src/juce_core_includes.h @@ -221,6 +221,9 @@ #ifndef __JUCE_SCOPEDREADLOCK_JUCEHEADER__ #include "juce_core/threads/juce_ScopedReadLock.h" #endif +#ifndef __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ + #include "juce_core/threads/juce_ScopedTryLock.h" +#endif #ifndef __JUCE_SCOPEDWRITELOCK_JUCEHEADER__ #include "juce_core/threads/juce_ScopedWriteLock.h" #endif