| @@ -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; | |||
| @@ -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; | |||
| @@ -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); | |||
| @@ -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); | |||
| @@ -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() | |||
| { | |||
| @@ -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; | |||
| @@ -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])); | |||
| @@ -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() | |||
| { | |||
| @@ -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); | |||
| @@ -5783,6 +5783,10 @@ | |||
| RelativePath="..\..\..\src\juce_core\threads\juce_ScopedReadLock.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\src\juce_core\threads\juce_ScopedTryLock.h" | |||
| > | |||
| </File> | |||
| <File | |||
| 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 | |||
| @@ -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; | |||
| } | |||
| @@ -201,7 +201,7 @@ void PluginListComponent::buttonClicked (Button* b) | |||
| } | |||
| } | |||
| bool PluginListComponent::isInterestedInFileDrag (const StringArray& files) | |||
| bool PluginListComponent::isInterestedInFileDrag (const StringArray& /*files*/) | |||
| { | |||
| return true; | |||
| } | |||
| @@ -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 | |||
| { | |||
| @@ -661,7 +661,7 @@ public: | |||
| 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::bottomRight }; | |||
| if (newIndex >= 0 && newIndex < numElementsInArray (types) | |||
| if (((unsigned int) newIndex) < (unsigned int) numElementsInArray (types) | |||
| && types [newIndex] != getJustification().getFlags()) | |||
| { | |||
| setJustification (Justification (types [newIndex])); | |||
| @@ -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) | |||
| @@ -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() | |||
| @@ -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)); | |||
| @@ -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 | |||
| @@ -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); | |||
| @@ -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 | |||
| @@ -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; | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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); | |||
| @@ -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;) | |||
| @@ -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(); | |||
| @@ -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 | |||
| @@ -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))) | |||
| { | |||
| @@ -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(); | |||
| @@ -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) | |||
| @@ -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)); | |||
| @@ -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; | |||
| @@ -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() | |||
| @@ -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); | |||
| @@ -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; | |||
| } | |||
| @@ -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 <class Type> | |||
| inline Type jlimit (const Type lowerLimit, | |||
| @@ -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.. | |||
| @@ -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]; | |||
| @@ -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); | |||
| @@ -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]; | |||
| @@ -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]; | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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(); | |||
| @@ -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. | |||
| @@ -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; | |||
| @@ -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__ | |||
| #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 | |||