mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Removed the (rather pointless) granularity value from the array objects. Converted a few macros into functions and other misc code clean-ups.
This commit is contained in:
parent
c368805559
commit
97035bb3a1
69 changed files with 218 additions and 369 deletions
|
|
@ -204,7 +204,8 @@ private:
|
|||
const float* s = buffer.getSampleData (0, 0);
|
||||
const int spikeDriftAllowed = 5;
|
||||
|
||||
Array <int> spikesFound (100);
|
||||
Array <int> spikesFound;
|
||||
spikesFound.ensureStorageAllocated (100);
|
||||
double runningAverage = 0;
|
||||
int lastSpike = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
ApplicationCommandManager::ApplicationCommandManager()
|
||||
: listeners (8),
|
||||
firstTarget (0)
|
||||
: firstTarget (0)
|
||||
{
|
||||
keyMappings = new KeyPressMappingSet (this);
|
||||
|
||||
|
|
@ -166,7 +165,7 @@ const StringArray ApplicationCommandManager::getCommandCategories() const throw(
|
|||
|
||||
const Array <CommandID> ApplicationCommandManager::getCommandsInCategory (const String& categoryName) const throw()
|
||||
{
|
||||
Array <CommandID> results (4);
|
||||
Array <CommandID> results;
|
||||
|
||||
for (int i = 0; i < commands.size(); ++i)
|
||||
if (commands.getUnchecked(i)->categoryName == categoryName)
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
AudioFormatManager::AudioFormatManager()
|
||||
: knownFormats (4),
|
||||
defaultFormatIndex (0)
|
||||
: defaultFormatIndex (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ class SharedBufferingAudioSourceThread : public DeletedAtShutdown,
|
|||
{
|
||||
public:
|
||||
SharedBufferingAudioSourceThread()
|
||||
: Thread ("Audio Buffer"),
|
||||
sources (8)
|
||||
: Thread ("Audio Buffer")
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,9 +64,6 @@ AudioDeviceManager::AudioDeviceManager()
|
|||
inputLevelMeasurementEnabledCount (0),
|
||||
inputLevel (0),
|
||||
tempBuffer (2, 2),
|
||||
enabledMidiInputs (4),
|
||||
midiCallbacks (4),
|
||||
midiCallbackDevices (4),
|
||||
defaultMidiOutput (0),
|
||||
cpuUsageMs (0),
|
||||
timeToCpuScale (0)
|
||||
|
|
|
|||
|
|
@ -32,24 +32,20 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
MidiBuffer::MidiBuffer() throw()
|
||||
: data (32),
|
||||
bytesUsed (0)
|
||||
: bytesUsed (0)
|
||||
{
|
||||
}
|
||||
|
||||
MidiBuffer::MidiBuffer (const MidiMessage& message) throw()
|
||||
: data (32),
|
||||
bytesUsed (0)
|
||||
: bytesUsed (0)
|
||||
{
|
||||
addEvent (message, 0);
|
||||
}
|
||||
|
||||
MidiBuffer::MidiBuffer (const MidiBuffer& other) throw()
|
||||
: data (32),
|
||||
bytesUsed (other.bytesUsed)
|
||||
: bytesUsed (other.bytesUsed),
|
||||
data (other.data)
|
||||
{
|
||||
data.ensureAllocatedSize (bytesUsed);
|
||||
memcpy (data.elements, other.data.elements, bytesUsed);
|
||||
}
|
||||
|
||||
const MidiBuffer& MidiBuffer::operator= (const MidiBuffer& other) throw()
|
||||
|
|
@ -57,10 +53,7 @@ const MidiBuffer& MidiBuffer::operator= (const MidiBuffer& other) throw()
|
|||
if (this != &other)
|
||||
{
|
||||
bytesUsed = other.bytesUsed;
|
||||
data.ensureAllocatedSize (bytesUsed);
|
||||
|
||||
if (bytesUsed > 0)
|
||||
memcpy (data.elements, other.data.elements, bytesUsed);
|
||||
data = other.data;
|
||||
}
|
||||
|
||||
return *this;
|
||||
|
|
@ -68,8 +61,7 @@ const MidiBuffer& MidiBuffer::operator= (const MidiBuffer& other) throw()
|
|||
|
||||
void MidiBuffer::swap (MidiBuffer& other)
|
||||
{
|
||||
swapVariables <uint8*> (data.elements, other.data.elements);
|
||||
swapVariables <int> (data.numAllocated, other.data.numAllocated);
|
||||
data.swapWith (other.data);
|
||||
swapVariables <int> (bytesUsed, other.bytesUsed);
|
||||
}
|
||||
|
||||
|
|
@ -85,12 +77,12 @@ void MidiBuffer::clear() throw()
|
|||
void MidiBuffer::clear (const int startSample,
|
||||
const int numSamples) throw()
|
||||
{
|
||||
uint8* const start = findEventAfter (data.elements, startSample - 1);
|
||||
uint8* const start = findEventAfter (data, startSample - 1);
|
||||
uint8* const end = findEventAfter (start, startSample + numSamples - 1);
|
||||
|
||||
if (end > start)
|
||||
{
|
||||
const size_t bytesToMove = (size_t) (bytesUsed - (end - data.elements));
|
||||
const size_t bytesToMove = (size_t) (bytesUsed - (end - (uint8*) data.getData()));
|
||||
|
||||
if (bytesToMove > 0)
|
||||
memmove (start, end, bytesToMove);
|
||||
|
|
@ -144,10 +136,11 @@ void MidiBuffer::addEvent (const uint8* const newData,
|
|||
|
||||
if (numBytes > 0)
|
||||
{
|
||||
data.ensureAllocatedSize (bytesUsed + numBytes + 6);
|
||||
int spaceNeeded = bytesUsed + numBytes + 6;
|
||||
data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7);
|
||||
|
||||
uint8* d = findEventAfter (data.elements, sampleNumber);
|
||||
const size_t bytesToMove = (size_t) (bytesUsed - (d - data.elements));
|
||||
uint8* d = findEventAfter ((uint8*) data.getData(), sampleNumber);
|
||||
const size_t bytesToMove = (size_t) (bytesUsed - (d - (uint8*) data.getData()));
|
||||
|
||||
if (bytesToMove > 0)
|
||||
memmove (d + numBytes + 6,
|
||||
|
|
@ -173,13 +166,13 @@ void MidiBuffer::addEvents (const MidiBuffer& otherBuffer,
|
|||
Iterator i (otherBuffer);
|
||||
i.setNextSamplePosition (startSample);
|
||||
|
||||
const uint8* data;
|
||||
int size, position;
|
||||
const uint8* eventData;
|
||||
int eventSize, position;
|
||||
|
||||
while (i.getNextEvent (data, size, position)
|
||||
while (i.getNextEvent (eventData, eventSize, position)
|
||||
&& (position < startSample + numSamples || numSamples < 0))
|
||||
{
|
||||
addEvent (data, size, position + sampleDeltaToAdd);
|
||||
addEvent (eventData, eventSize, position + sampleDeltaToAdd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -191,8 +184,8 @@ bool MidiBuffer::isEmpty() const throw()
|
|||
int MidiBuffer::getNumEvents() const throw()
|
||||
{
|
||||
int n = 0;
|
||||
const uint8* d = data.elements;
|
||||
const uint8* const end = data.elements + bytesUsed;
|
||||
const uint8* d = (uint8*) data.getData();
|
||||
const uint8* const end = d + bytesUsed;
|
||||
|
||||
while (d < end)
|
||||
{
|
||||
|
|
@ -206,7 +199,7 @@ int MidiBuffer::getNumEvents() const throw()
|
|||
|
||||
int MidiBuffer::getFirstEventTime() const throw()
|
||||
{
|
||||
return (bytesUsed > 0) ? *(const int*) data.elements : 0;
|
||||
return (bytesUsed > 0) ? *(const int*) data.getData() : 0;
|
||||
}
|
||||
|
||||
int MidiBuffer::getLastEventTime() const throw()
|
||||
|
|
@ -214,7 +207,7 @@ int MidiBuffer::getLastEventTime() const throw()
|
|||
if (bytesUsed == 0)
|
||||
return 0;
|
||||
|
||||
const uint8* d = data.elements;
|
||||
const uint8* d = (uint8*) data.getData();
|
||||
const uint8* const endData = d + bytesUsed;
|
||||
|
||||
for (;;)
|
||||
|
|
@ -230,7 +223,7 @@ int MidiBuffer::getLastEventTime() const throw()
|
|||
|
||||
uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const throw()
|
||||
{
|
||||
const uint8* const endData = data.elements + bytesUsed;
|
||||
const uint8* const endData = ((uint8*) data.getData()) + bytesUsed;
|
||||
|
||||
while (d < endData && *(int*) d <= samplePosition)
|
||||
{
|
||||
|
|
@ -244,7 +237,7 @@ uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const thr
|
|||
//==============================================================================
|
||||
MidiBuffer::Iterator::Iterator (const MidiBuffer& buffer_) throw()
|
||||
: buffer (buffer_),
|
||||
data (buffer_.data.elements)
|
||||
data ((uint8*) buffer_.data.getData())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -255,8 +248,8 @@ MidiBuffer::Iterator::~Iterator() throw()
|
|||
//==============================================================================
|
||||
void MidiBuffer::Iterator::setNextSamplePosition (const int samplePosition) throw()
|
||||
{
|
||||
data = buffer.data.elements;
|
||||
const uint8* dataEnd = buffer.data.elements + buffer.bytesUsed;
|
||||
data = buffer.data;
|
||||
const uint8* dataEnd = ((uint8*) buffer.data.getData()) + buffer.bytesUsed;
|
||||
|
||||
while (data < dataEnd && *(int*) data < samplePosition)
|
||||
{
|
||||
|
|
@ -269,7 +262,7 @@ bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData,
|
|||
int& numBytes,
|
||||
int& samplePosition) throw()
|
||||
{
|
||||
if (data >= buffer.data.elements + buffer.bytesUsed)
|
||||
if (data >= ((uint8*) buffer.data.getData()) + buffer.bytesUsed)
|
||||
return false;
|
||||
|
||||
samplePosition = *(int*) data;
|
||||
|
|
@ -285,7 +278,7 @@ bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData,
|
|||
bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result,
|
||||
int& samplePosition) throw()
|
||||
{
|
||||
if (data >= buffer.data.elements + buffer.bytesUsed)
|
||||
if (data >= ((uint8*) buffer.data.getData()) + buffer.bytesUsed)
|
||||
return false;
|
||||
|
||||
samplePosition = *(int*) data;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#ifndef __JUCE_MIDIBUFFER_JUCEHEADER__
|
||||
#define __JUCE_MIDIBUFFER_JUCEHEADER__
|
||||
|
||||
#include "../../containers/juce_ArrayAllocationBase.h"
|
||||
#include "../../containers/juce_MemoryBlock.h"
|
||||
#include "juce_MidiMessage.h"
|
||||
|
||||
|
||||
|
|
@ -226,7 +226,7 @@ public:
|
|||
|
||||
private:
|
||||
friend class MidiBuffer::Iterator;
|
||||
ArrayAllocationBase <uint8> data;
|
||||
MemoryBlock data;
|
||||
int bytesUsed;
|
||||
|
||||
uint8* findEventAfter (uint8* d, const int samplePosition) const throw();
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
MidiKeyboardState::MidiKeyboardState()
|
||||
: listeners (2)
|
||||
{
|
||||
zeromem (noteStates, sizeof (noteStates));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -298,7 +298,8 @@ void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumbe
|
|||
{
|
||||
bool doneProg = false;
|
||||
bool donePitchWheel = false;
|
||||
Array <int> doneControllers (32);
|
||||
Array <int> doneControllers;
|
||||
doneControllers.ensureStorageAllocated (32);
|
||||
|
||||
for (int i = list.size(); --i >= 0;)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,9 +72,7 @@ void SynthesiserVoice::clearCurrentNote()
|
|||
|
||||
//==============================================================================
|
||||
Synthesiser::Synthesiser()
|
||||
: voices (2),
|
||||
sounds (2),
|
||||
sampleRate (0),
|
||||
: sampleRate (0),
|
||||
lastNoteOnCounter (0),
|
||||
shouldStealNotes (true)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,15 +56,9 @@ class Array
|
|||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates an empty array.
|
||||
|
||||
@param granularity this is the size of increment by which the internal storage
|
||||
used by the array will grow. Only change it from the default if you know the
|
||||
array is going to be very big and needs to be able to grow efficiently.
|
||||
*/
|
||||
Array (const int granularity = juceDefaultArrayGranularity) throw()
|
||||
: data (granularity),
|
||||
numUsed (0)
|
||||
/** Creates an empty array. */
|
||||
Array() throw()
|
||||
: numUsed (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -72,7 +66,6 @@ public:
|
|||
@param other the array to copy
|
||||
*/
|
||||
Array (const Array<ElementType, TypeOfCriticalSectionToUse>& other) throw()
|
||||
: data (other.data.granularity)
|
||||
{
|
||||
other.lockArray();
|
||||
numUsed = other.numUsed;
|
||||
|
|
@ -86,8 +79,7 @@ public:
|
|||
@param values the array to copy from
|
||||
*/
|
||||
Array (const ElementType* values) throw()
|
||||
: data (juceDefaultArrayGranularity),
|
||||
numUsed (0)
|
||||
: numUsed (0)
|
||||
{
|
||||
while (*values != 0)
|
||||
add (*values++);
|
||||
|
|
@ -99,8 +91,7 @@ public:
|
|||
@param numValues the number of values in the array
|
||||
*/
|
||||
Array (const ElementType* values, int numValues) throw()
|
||||
: data (juceDefaultArrayGranularity),
|
||||
numUsed (numValues)
|
||||
: numUsed (numValues)
|
||||
{
|
||||
data.setAllocatedSize (numValues);
|
||||
memcpy (data.elements, values, numValues * sizeof (ElementType));
|
||||
|
|
@ -121,7 +112,6 @@ public:
|
|||
other.lockArray();
|
||||
lock.enter();
|
||||
|
||||
data.granularity = other.data.granularity;
|
||||
data.ensureAllocatedSize (other.size());
|
||||
numUsed = other.numUsed;
|
||||
memcpy (data.elements, other.data.elements, numUsed * sizeof (ElementType));
|
||||
|
|
@ -977,19 +967,7 @@ public:
|
|||
void minimiseStorageOverheads() throw()
|
||||
{
|
||||
lock.enter();
|
||||
|
||||
if (numUsed == 0)
|
||||
{
|
||||
data.setAllocatedSize (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int newAllocation = data.granularity * (numUsed / data.granularity + 1);
|
||||
|
||||
if (newAllocation < data.numAllocated)
|
||||
data.setAllocatedSize (newAllocation);
|
||||
}
|
||||
|
||||
data.shrinkToNoMoreThan (numUsed);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
|
|
@ -1001,7 +979,9 @@ public:
|
|||
*/
|
||||
void ensureStorageAllocated (const int minNumElements) throw()
|
||||
{
|
||||
lock.enter();
|
||||
data.ensureAllocatedSize (minNumElements);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -27,14 +27,6 @@
|
|||
#define __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** The default size of chunk in which arrays increase their storage.
|
||||
|
||||
Used by ArrayAllocationBase and its subclasses.
|
||||
*/
|
||||
const int juceDefaultArrayGranularity = 8;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
Implements some basic array storage allocation functions.
|
||||
|
|
@ -49,17 +41,11 @@ class ArrayAllocationBase
|
|||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates an empty array.
|
||||
|
||||
@param granularity_ this is the size of increment by which the internal storage
|
||||
will be increased.
|
||||
*/
|
||||
ArrayAllocationBase (const int granularity_) throw()
|
||||
/** Creates an empty array. */
|
||||
ArrayAllocationBase() throw()
|
||||
: elements (0),
|
||||
numAllocated (0),
|
||||
granularity (granularity_)
|
||||
numAllocated (0)
|
||||
{
|
||||
jassert (granularity > 0);
|
||||
}
|
||||
|
||||
/** Destructor. */
|
||||
|
|
@ -114,25 +100,21 @@ public:
|
|||
void ensureAllocatedSize (int minNumElements) throw()
|
||||
{
|
||||
if (minNumElements > numAllocated)
|
||||
{
|
||||
// for arrays with small granularity that get big, start
|
||||
// increasing the size in bigger jumps
|
||||
if (minNumElements > (granularity << 6))
|
||||
{
|
||||
minNumElements += (minNumElements / granularity);
|
||||
if (minNumElements > (granularity << 8))
|
||||
minNumElements += granularity << 6;
|
||||
else
|
||||
minNumElements += granularity << 5;
|
||||
}
|
||||
setAllocatedSize ((minNumElements + minNumElements / 2 + 8) & ~7);
|
||||
}
|
||||
|
||||
setAllocatedSize (granularity * (minNumElements / granularity + 1));
|
||||
}
|
||||
/** Minimises the amount of storage allocated so that it's no more than
|
||||
the given number of elements.
|
||||
*/
|
||||
void shrinkToNoMoreThan (int maxNumElements) throw()
|
||||
{
|
||||
if (maxNumElements < numAllocated)
|
||||
setAllocatedSize (maxNumElements);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
ElementType* elements;
|
||||
int numAllocated, granularity;
|
||||
int numAllocated;
|
||||
|
||||
private:
|
||||
ArrayAllocationBase (const ArrayAllocationBase&);
|
||||
|
|
|
|||
|
|
@ -145,6 +145,12 @@ void MemoryBlock::ensureSize (const int minimumSize,
|
|||
setSize (minimumSize, initialiseToZero);
|
||||
}
|
||||
|
||||
void MemoryBlock::swapWith (MemoryBlock& other) throw()
|
||||
{
|
||||
swapVariables (size, other.size);
|
||||
data.swapWith (other.data);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void MemoryBlock::fillWith (const uint8 value) throw()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -151,6 +151,11 @@ public:
|
|||
void append (const void* const data,
|
||||
const int numBytes) throw();
|
||||
|
||||
/** Exchanges the contents of this and another memory block.
|
||||
No actual copying is required for this, so it's very fast.
|
||||
*/
|
||||
void swapWith (MemoryBlock& other) throw();
|
||||
|
||||
//==============================================================================
|
||||
/** Copies data into this MemoryBlock from a memory address.
|
||||
|
||||
|
|
|
|||
|
|
@ -58,15 +58,9 @@ class OwnedArray
|
|||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates an empty array.
|
||||
|
||||
@param granularity this is the size of increment by which the internal storage
|
||||
used by the array will grow. Only change it from the default if you know the
|
||||
array is going to be very big and needs to be able to grow efficiently.
|
||||
*/
|
||||
OwnedArray (const int granularity = juceDefaultArrayGranularity) throw()
|
||||
: data (granularity),
|
||||
numUsed (0)
|
||||
/** Creates an empty array. */
|
||||
OwnedArray() throw()
|
||||
: numUsed (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -674,19 +668,7 @@ public:
|
|||
void minimiseStorageOverheads() throw()
|
||||
{
|
||||
lock.enter();
|
||||
|
||||
if (numUsed == 0)
|
||||
{
|
||||
data.setAllocatedSize (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int newAllocation = data.granularity * (numUsed / data.granularity + 1);
|
||||
|
||||
if (newAllocation < data.numAllocated)
|
||||
data.setAllocatedSize (newAllocation);
|
||||
}
|
||||
|
||||
data.shrinkToNoMoreThan (numUsed);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
|
|
@ -698,7 +680,9 @@ public:
|
|||
*/
|
||||
void ensureStorageAllocated (const int minNumElements) throw()
|
||||
{
|
||||
lock.enter();
|
||||
data.ensureAllocatedSize (minNumElements);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -51,22 +51,15 @@ class ReferenceCountedArray
|
|||
public:
|
||||
//==============================================================================
|
||||
/** Creates an empty array.
|
||||
|
||||
@param granularity this is the size of increment by which the internal storage
|
||||
used by the array will grow. Only change it from the default if you know the
|
||||
array is going to be very big and needs to be able to grow efficiently.
|
||||
|
||||
@see ReferenceCountedObject, Array, OwnedArray
|
||||
*/
|
||||
ReferenceCountedArray (const int granularity = juceDefaultArrayGranularity) throw()
|
||||
: data (granularity),
|
||||
numUsed (0)
|
||||
ReferenceCountedArray() throw()
|
||||
: numUsed (0)
|
||||
{
|
||||
}
|
||||
|
||||
/** Creates a copy of another array */
|
||||
ReferenceCountedArray (const ReferenceCountedArray<ObjectClass, TypeOfCriticalSectionToUse>& other) throw()
|
||||
: data (other.data.granularity)
|
||||
{
|
||||
other.lockArray();
|
||||
numUsed = other.numUsed;
|
||||
|
|
@ -93,7 +86,6 @@ public:
|
|||
|
||||
clear();
|
||||
|
||||
data.granularity = other.granularity;
|
||||
data.ensureAllocatedSize (other.numUsed);
|
||||
numUsed = other.numUsed;
|
||||
memcpy (data.elements, other.data.elements, numUsed * sizeof (ObjectClass*));
|
||||
|
|
@ -738,19 +730,7 @@ public:
|
|||
void minimiseStorageOverheads() throw()
|
||||
{
|
||||
lock.enter();
|
||||
|
||||
if (numUsed == 0)
|
||||
{
|
||||
data.setAllocatedSize (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int newAllocation = data.granularity * (numUsed / data.granularity + 1);
|
||||
|
||||
if (newAllocation < data.numAllocated)
|
||||
data.setAllocatedSize (newAllocation);
|
||||
}
|
||||
|
||||
data.shrinkToNoMoreThan (numUsed);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,15 +62,9 @@ class SortedSet
|
|||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
/** Creates an empty set.
|
||||
|
||||
@param granularity this is the size of increment by which the internal storage
|
||||
used by the array will grow. Only change it from the default if you know the
|
||||
array is going to be very big and needs to be able to grow efficiently.
|
||||
*/
|
||||
SortedSet (const int granularity = juceDefaultArrayGranularity) throw()
|
||||
: data (granularity),
|
||||
numUsed (0)
|
||||
/** Creates an empty set. */
|
||||
SortedSet() throw()
|
||||
: numUsed (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +72,6 @@ public:
|
|||
@param other the set to copy
|
||||
*/
|
||||
SortedSet (const SortedSet<ElementType, TypeOfCriticalSectionToUse>& other) throw()
|
||||
: data (other.data.granularity)
|
||||
{
|
||||
other.lockSet();
|
||||
numUsed = other.numUsed;
|
||||
|
|
@ -102,7 +95,6 @@ public:
|
|||
other.lockSet();
|
||||
lock.enter();
|
||||
|
||||
data.granularity = other.data.granularity;
|
||||
data.ensureAllocatedSize (other.size());
|
||||
numUsed = other.numUsed;
|
||||
memcpy (data.elements, other.data.elements, numUsed * sizeof (ElementType));
|
||||
|
|
@ -572,19 +564,7 @@ public:
|
|||
void minimiseStorageOverheads() throw()
|
||||
{
|
||||
lock.enter();
|
||||
|
||||
if (numUsed == 0)
|
||||
{
|
||||
data.setAllocatedSize (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int newAllocation = data.granularity * (numUsed / data.granularity + 1);
|
||||
|
||||
if (newAllocation < data.numAllocated)
|
||||
data.setAllocatedSize (newAllocation);
|
||||
}
|
||||
|
||||
data.shrinkToNoMoreThan (numUsed);
|
||||
lock.exit();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,11 @@ void Value::setValue (const var& newValue)
|
|||
value->setValue (newValue);
|
||||
}
|
||||
|
||||
const String Value::toString() const
|
||||
{
|
||||
return value->getValue().toString();
|
||||
}
|
||||
|
||||
const Value& Value::operator= (const var& newValue)
|
||||
{
|
||||
value->setValue (newValue);
|
||||
|
|
|
|||
|
|
@ -76,6 +76,12 @@ public:
|
|||
/** Returns the current value. */
|
||||
operator const var() const;
|
||||
|
||||
/** Returns the value as a string.
|
||||
|
||||
This is alternative to writing things like "myValue.getValue().toString()".
|
||||
*/
|
||||
const String toString() const;
|
||||
|
||||
/** Sets the current value.
|
||||
|
||||
You can also use operator= to set the value.
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ inline void swapVariables (Type& variable1, Type& variable2)
|
|||
variable2 = tempVal;
|
||||
}
|
||||
|
||||
/** Handy macro for getting the number of elements in a simple const C array.
|
||||
/** Handy function for getting the number of elements in a simple const C array.
|
||||
|
||||
E.g.
|
||||
@code
|
||||
|
|
@ -202,7 +202,8 @@ inline void swapVariables (Type& variable1, Type& variable2)
|
|||
int numElements = numElementsInArray (myArray) // returns 3
|
||||
@endcode
|
||||
*/
|
||||
#define numElementsInArray(a) ((int) (sizeof (a) / sizeof ((a)[0])))
|
||||
template <typename Type>
|
||||
inline int numElementsInArray (Type& array) { return (int) (sizeof (array) / sizeof (array[0])); }
|
||||
|
||||
//==============================================================================
|
||||
// Some useful maths functions that aren't always present with all compilers and build settings.
|
||||
|
|
|
|||
|
|
@ -200,15 +200,17 @@
|
|||
|
||||
//==============================================================================
|
||||
/** Clears a block of memory. */
|
||||
#define zeromem(memory, numBytes) memset (memory, 0, numBytes)
|
||||
inline void zeromem (void* memory, int numBytes) { memset (memory, 0, numBytes); }
|
||||
|
||||
/** Clears a reference to a local structure. */
|
||||
#define zerostruct(structure) memset (&structure, 0, sizeof (structure))
|
||||
template <typename Type>
|
||||
inline void zerostruct (Type& structure) { memset (&structure, 0, sizeof (structure)); }
|
||||
|
||||
/** A handy macro that calls delete on a pointer if it's non-zero, and
|
||||
then sets the pointer to null.
|
||||
/** A handy function that calls delete on a pointer if it's non-zero, and then sets
|
||||
the pointer to null.
|
||||
*/
|
||||
#define deleteAndZero(pointer) { delete (pointer); (pointer) = 0; }
|
||||
template <typename Type>
|
||||
inline void deleteAndZero (Type& pointer) { delete pointer; pointer = 0; }
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -203,20 +203,12 @@
|
|||
forcedinline void myfunction (int x)
|
||||
@endcode
|
||||
*/
|
||||
#ifdef JUCE_DEBUG
|
||||
#ifndef JUCE_DEBUG
|
||||
#define forcedinline __forceinline
|
||||
#else
|
||||
#define forcedinline inline
|
||||
#endif
|
||||
|
||||
/** A platform-independent way of stopping the compiler inlining a function.
|
||||
|
||||
Use the syntax: @code
|
||||
juce_noinline void myfunction (int x)
|
||||
@endcode
|
||||
*/
|
||||
#define juce_noinline
|
||||
|
||||
#else
|
||||
/** A platform-independent way of forcing an inline function.
|
||||
|
||||
|
|
@ -230,14 +222,6 @@
|
|||
#define forcedinline inline
|
||||
#endif
|
||||
|
||||
/** A platform-independent way of stopping the compiler inlining a function.
|
||||
|
||||
Use the syntax: @code
|
||||
juce_noinline void myfunction (int x)
|
||||
@endcode
|
||||
*/
|
||||
#define juce_noinline __attribute__((noinline))
|
||||
|
||||
#endif
|
||||
|
||||
#endif // __JUCE_PLATFORMDEFS_JUCEHEADER__
|
||||
|
|
|
|||
|
|
@ -60,6 +60,11 @@ void JUCE_PUBLIC_FUNCTION initialiseJuce_NonGUI()
|
|||
|
||||
#ifdef JUCE_DEBUG
|
||||
{
|
||||
char a1[7];
|
||||
jassert (numElementsInArray(a1) == 7);
|
||||
int a2[3];
|
||||
jassert (numElementsInArray(a2) == 3);
|
||||
|
||||
// Some simple test code to keep an eye on things and make sure these functions
|
||||
// work ok on all platforms. Let me know if any of these assertions fail!
|
||||
int n = 1;
|
||||
|
|
|
|||
|
|
@ -70,10 +70,10 @@
|
|||
#ifdef _DEBUG
|
||||
#define JUCE_DEBUG 1
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#define JUCE_MINGW 1
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#define JUCE_MINGW 1
|
||||
#endif
|
||||
|
||||
/** If defined, this indicates that the processor is little-endian. */
|
||||
#define JUCE_LITTLE_ENDIAN 1
|
||||
|
|
|
|||
|
|
@ -36,10 +36,8 @@ BEGIN_JUCE_NAMESPACE
|
|||
//==============================================================================
|
||||
Button::Button (const String& name)
|
||||
: Component (name),
|
||||
shortcuts (2),
|
||||
keySource (0),
|
||||
text (name),
|
||||
buttonListeners (2),
|
||||
buttonPressTime (0),
|
||||
lastTimeCallbackTime (0),
|
||||
commandManagerToUse (0),
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ Label::Label (const String& componentName,
|
|||
text (labelText),
|
||||
font (15.0f),
|
||||
justification (Justification::centredLeft),
|
||||
listeners (2),
|
||||
ownerComponent (0),
|
||||
horizontalBorderSize (3),
|
||||
verticalBorderSize (1),
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ private:
|
|||
//==============================================================================
|
||||
Slider::Slider (const String& name)
|
||||
: Component (name),
|
||||
listeners (2),
|
||||
lastCurrentValue (0),
|
||||
lastValueMin (0),
|
||||
lastValueMax (0),
|
||||
|
|
|
|||
|
|
@ -64,8 +64,7 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
TableHeaderComponent::TableHeaderComponent()
|
||||
: listeners (2),
|
||||
columnsChanged (false),
|
||||
: columnsChanged (false),
|
||||
columnsResized (false),
|
||||
sortChanged (false),
|
||||
menuActive (true),
|
||||
|
|
|
|||
|
|
@ -79,17 +79,17 @@ public:
|
|||
const Colour& colour_,
|
||||
const tchar passwordCharacter)
|
||||
: font (font_),
|
||||
colour (colour_),
|
||||
atoms (64)
|
||||
colour (colour_)
|
||||
{
|
||||
initialiseAtoms (text, passwordCharacter);
|
||||
}
|
||||
|
||||
UniformTextSection (const UniformTextSection& other)
|
||||
: font (other.font),
|
||||
colour (other.colour),
|
||||
atoms (64)
|
||||
colour (other.colour)
|
||||
{
|
||||
atoms.ensureStorageAllocated (other.atoms.size());
|
||||
|
||||
for (int i = 0; i < other.atoms.size(); ++i)
|
||||
atoms.add (new TextAtom (*(const TextAtom*) other.atoms.getUnchecked(i)));
|
||||
}
|
||||
|
|
@ -141,6 +141,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
atoms.ensureStorageAllocated (atoms.size() + other.atoms.size() - i);
|
||||
|
||||
while (i < other.atoms.size())
|
||||
{
|
||||
atoms.add (other.getAtom(i));
|
||||
|
|
@ -990,10 +992,8 @@ TextEditor::TextEditor (const String& name,
|
|||
currentFont (14.0f),
|
||||
totalNumChars (0),
|
||||
caretPosition (0),
|
||||
sections (8),
|
||||
passwordCharacter (passwordCharacter_),
|
||||
dragType (notDragging),
|
||||
listeners (2)
|
||||
dragType (notDragging)
|
||||
{
|
||||
setOpaque (true);
|
||||
|
||||
|
|
|
|||
|
|
@ -1086,7 +1086,6 @@ enum TreeViewOpenness
|
|||
TreeViewItem::TreeViewItem()
|
||||
: ownerView (0),
|
||||
parentItem (0),
|
||||
subItems (8),
|
||||
y (0),
|
||||
itemHeight (0),
|
||||
totalHeight (0),
|
||||
|
|
|
|||
|
|
@ -33,8 +33,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
DirectoryContentsDisplayComponent::DirectoryContentsDisplayComponent (DirectoryContentsList& listToShow)
|
||||
: fileList (listToShow),
|
||||
listeners (2)
|
||||
: fileList (listToShow)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ FileBrowserComponent::FileBrowserComponent (int flags_,
|
|||
: FileFilter (String::empty),
|
||||
fileFilter (fileFilter_),
|
||||
flags (flags_),
|
||||
listeners (2),
|
||||
previewComp (previewComp_),
|
||||
thread ("Juce FileBrowser")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ BEGIN_JUCE_NAMESPACE
|
|||
Component* Component::componentUnderMouse = 0;
|
||||
Component* Component::currentlyFocusedComponent = 0;
|
||||
|
||||
static Array <Component*> modalComponentStack (4), modalComponentReturnValueKeys (4);
|
||||
static Array <int> modalReturnValues (4);
|
||||
static Array <Component*> modalComponentStack, modalComponentReturnValueKeys;
|
||||
static Array <int> modalReturnValues;
|
||||
|
||||
static const int customCommandMessage = 0x7fff0001;
|
||||
static const int exitModalStateMessage = 0x7fff0002;
|
||||
|
|
@ -108,7 +108,6 @@ Component::Component() throw()
|
|||
: parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
childComponentList_ (16),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
|
|
@ -125,7 +124,6 @@ Component::Component (const String& name) throw()
|
|||
parentComponent_ (0),
|
||||
componentUID (++nextComponentUID),
|
||||
numDeepMouseListeners (0),
|
||||
childComponentList_ (16),
|
||||
lookAndFeel_ (0),
|
||||
effect_ (0),
|
||||
bufferedImage_ (0),
|
||||
|
|
@ -2163,7 +2161,7 @@ void Component::parentSizeChanged()
|
|||
void Component::addComponentListener (ComponentListener* const newListener) throw()
|
||||
{
|
||||
if (componentListeners_ == 0)
|
||||
componentListeners_ = new VoidArray (4);
|
||||
componentListeners_ = new VoidArray();
|
||||
|
||||
componentListeners_->addIfNotAlreadyThere (newListener);
|
||||
}
|
||||
|
|
@ -2243,7 +2241,7 @@ void Component::addMouseListener (MouseListener* const newListener,
|
|||
checkMessageManagerIsLocked
|
||||
|
||||
if (mouseListeners_ == 0)
|
||||
mouseListeners_ = new VoidArray (4);
|
||||
mouseListeners_ = new VoidArray();
|
||||
|
||||
if (! mouseListeners_->contains (newListener))
|
||||
{
|
||||
|
|
@ -3509,7 +3507,7 @@ const Rectangle Component::getParentMonitorArea() const throw()
|
|||
void Component::addKeyListener (KeyListener* const newListener) throw()
|
||||
{
|
||||
if (keyListeners_ == 0)
|
||||
keyListeners_ = new VoidArray (4);
|
||||
keyListeners_ = new VoidArray();
|
||||
|
||||
keyListeners_->addIfNotAlreadyThere (newListener);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,11 +40,7 @@ extern void juce_updateMultiMonitorInfo (Array <Rectangle>& monitorCoords,
|
|||
static Desktop* juce_desktopInstance = 0;
|
||||
|
||||
Desktop::Desktop() throw()
|
||||
: mouseListeners (2),
|
||||
desktopComponents (4),
|
||||
monitorCoordsClipped (2),
|
||||
monitorCoordsUnclipped (2),
|
||||
lastMouseX (0),
|
||||
: lastMouseX (0),
|
||||
lastMouseY (0),
|
||||
kioskModeComponent (0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ BEGIN_JUCE_NAMESPACE
|
|||
ComponentMovementWatcher::ComponentMovementWatcher (Component* const component_)
|
||||
: component (component_),
|
||||
lastPeer (0),
|
||||
registeredParentComps (4),
|
||||
reentrant (false)
|
||||
{
|
||||
jassert (component != 0); // can't use this with a null pointer..
|
||||
|
|
|
|||
|
|
@ -98,8 +98,7 @@ ScrollBar::ScrollBar (const bool vertical_,
|
|||
isDraggingThumb (false),
|
||||
alwaysVisible (false),
|
||||
upButton (0),
|
||||
downButton (0),
|
||||
listeners (2)
|
||||
downButton (0)
|
||||
{
|
||||
setButtonVisibility (buttonsAreVisible);
|
||||
|
||||
|
|
|
|||
|
|
@ -1281,15 +1281,13 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
PopupMenu::PopupMenu()
|
||||
: items (8),
|
||||
lookAndFeel (0),
|
||||
: lookAndFeel (0),
|
||||
separatorPending (false)
|
||||
{
|
||||
}
|
||||
|
||||
PopupMenu::PopupMenu (const PopupMenu& other)
|
||||
: items (8),
|
||||
lookAndFeel (other.lookAndFeel),
|
||||
: lookAndFeel (other.lookAndFeel),
|
||||
separatorPending (false)
|
||||
{
|
||||
items.ensureStorageAllocated (other.items.size());
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ void juce_deleteMouseCursor (void* const cursorHandle, const bool isStandard) th
|
|||
|
||||
//==============================================================================
|
||||
static CriticalSection activeCursorListLock;
|
||||
static VoidArray activeCursors (2);
|
||||
static VoidArray activeCursors;
|
||||
|
||||
//==============================================================================
|
||||
class SharedMouseCursorInternal : public ReferenceCountedObject
|
||||
|
|
|
|||
|
|
@ -674,6 +674,7 @@ private:
|
|||
return y;
|
||||
}
|
||||
|
||||
public:
|
||||
//==============================================================================
|
||||
class ChannelSelectorListBox : public ListBox,
|
||||
public ListBoxModel
|
||||
|
|
@ -930,6 +931,7 @@ private:
|
|||
const ChannelSelectorListBox& operator= (const ChannelSelectorListBox&);
|
||||
};
|
||||
|
||||
private:
|
||||
ChannelSelectorListBox* inputChanList;
|
||||
ChannelSelectorListBox* outputChanList;
|
||||
|
||||
|
|
|
|||
|
|
@ -95,8 +95,6 @@ MidiKeyboardComponent::MidiKeyboardComponent (MidiKeyboardState& state_,
|
|||
canScroll (true),
|
||||
mouseDragging (false),
|
||||
useMousePositionForVelocity (true),
|
||||
keyPresses (4),
|
||||
keyPressNotes (16),
|
||||
keyMappingOctave (6),
|
||||
octaveNumForMiddleC (3)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ extern bool juce_MouseHasMovedSignificantlySincePressed;
|
|||
|
||||
static const int fakeMouseMoveMessage = 0x7fff00ff;
|
||||
|
||||
static VoidArray heavyweightPeers (4);
|
||||
static VoidArray heavyweightPeers;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -45,8 +45,7 @@ class TopLevelWindowManager : public Timer,
|
|||
public:
|
||||
//==============================================================================
|
||||
TopLevelWindowManager()
|
||||
: windows (8),
|
||||
currentActive (0)
|
||||
: currentActive (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
//==============================================================================
|
||||
ColourGradient::ColourGradient() throw()
|
||||
: colours (4)
|
||||
{
|
||||
#ifdef JUCE_DEBUG
|
||||
x1 = 987654.0f;
|
||||
|
|
@ -50,8 +49,7 @@ ColourGradient::ColourGradient (const Colour& colour1,
|
|||
y1 (y1_),
|
||||
x2 (x2_),
|
||||
y2 (y2_),
|
||||
isRadial (isRadial_),
|
||||
colours (4)
|
||||
isRadial (isRadial_)
|
||||
{
|
||||
colours.add (0);
|
||||
colours.add (colour1.getARGB());
|
||||
|
|
|
|||
|
|
@ -35,20 +35,16 @@ BEGIN_JUCE_NAMESPACE
|
|||
static const Graphics::ResamplingQuality defaultQuality = Graphics::mediumResamplingQuality;
|
||||
|
||||
//==============================================================================
|
||||
#define MINIMUM_COORD -0x3fffffff
|
||||
#define MAXIMUM_COORD 0x3fffffff
|
||||
|
||||
#undef ASSERT_COORDS_ARE_SENSIBLE_NUMBERS
|
||||
#define ASSERT_COORDS_ARE_SENSIBLE_NUMBERS(x, y, w, h) \
|
||||
jassert ((int) x >= MINIMUM_COORD \
|
||||
&& (int) x <= MAXIMUM_COORD \
|
||||
&& (int) y >= MINIMUM_COORD \
|
||||
&& (int) y <= MAXIMUM_COORD \
|
||||
&& (int) w >= MINIMUM_COORD \
|
||||
&& (int) w <= MAXIMUM_COORD \
|
||||
&& (int) h >= MINIMUM_COORD \
|
||||
&& (int) h <= MAXIMUM_COORD);
|
||||
template <typename Type>
|
||||
static bool areCoordsSensibleNumbers (Type x, Type y, Type w, Type h)
|
||||
{
|
||||
const int maxVal = 0x3fffffff;
|
||||
|
||||
return (int) x >= -maxVal && (int) x <= maxVal
|
||||
&& (int) y >= -maxVal && (int) y <= maxVal
|
||||
&& (int) w >= -maxVal && (int) w <= maxVal
|
||||
&& (int) h >= -maxVal && (int) h <= maxVal;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
LowLevelGraphicsContext::LowLevelGraphicsContext()
|
||||
|
|
@ -62,7 +58,7 @@ LowLevelGraphicsContext::~LowLevelGraphicsContext()
|
|||
//==============================================================================
|
||||
Graphics::Graphics (Image& imageToDrawOnto) throw()
|
||||
: context (imageToDrawOnto.createLowLevelContext()),
|
||||
ownsContext (true),
|
||||
contextToDelete (context),
|
||||
saveStatePending (false)
|
||||
{
|
||||
resetToDefaultState();
|
||||
|
|
@ -70,7 +66,6 @@ Graphics::Graphics (Image& imageToDrawOnto) throw()
|
|||
|
||||
Graphics::Graphics (LowLevelGraphicsContext* const internalContext) throw()
|
||||
: context (internalContext),
|
||||
ownsContext (false),
|
||||
saveStatePending (false)
|
||||
{
|
||||
resetToDefaultState();
|
||||
|
|
@ -78,8 +73,6 @@ Graphics::Graphics (LowLevelGraphicsContext* const internalContext) throw()
|
|||
|
||||
Graphics::~Graphics() throw()
|
||||
{
|
||||
if (ownsContext)
|
||||
delete context;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -325,7 +318,7 @@ void Graphics::fillRect (int x,
|
|||
int height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
context->fillRect (Rectangle (x, y, width, height), false);
|
||||
}
|
||||
|
|
@ -341,7 +334,7 @@ void Graphics::fillRect (const float x,
|
|||
const float height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addRectangle (x, y, width, height);
|
||||
|
|
@ -397,7 +390,7 @@ void Graphics::drawRect (const int x,
|
|||
const int lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
context->fillRect (Rectangle (x, y, width, lineThickness), false);
|
||||
context->fillRect (Rectangle (x, y + lineThickness, lineThickness, height - lineThickness * 2), false);
|
||||
|
|
@ -412,7 +405,7 @@ void Graphics::drawRect (const float x,
|
|||
const float lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addRectangle (x, y, width, lineThickness);
|
||||
|
|
@ -441,7 +434,7 @@ void Graphics::drawBevel (const int x,
|
|||
const bool sharpEdgeOnOutside) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
if (clipRegionIntersects (x, y, width, height))
|
||||
{
|
||||
|
|
@ -476,7 +469,7 @@ void Graphics::fillEllipse (const float x,
|
|||
const float height) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addEllipse (x, y, width, height);
|
||||
|
|
@ -490,7 +483,7 @@ void Graphics::drawEllipse (const float x,
|
|||
const float lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addEllipse (x, y, width, height);
|
||||
|
|
@ -504,7 +497,7 @@ void Graphics::fillRoundedRectangle (const float x,
|
|||
const float cornerSize) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addRoundedRectangle (x, y, width, height, cornerSize);
|
||||
|
|
@ -529,7 +522,7 @@ void Graphics::drawRoundedRectangle (const float x,
|
|||
const float lineThickness) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (x, y, width, height);
|
||||
jassert (areCoordsSensibleNumbers (x, y, width, height));
|
||||
|
||||
Path p;
|
||||
p.addRoundedRectangle (x, y, width, height, cornerSize);
|
||||
|
|
@ -723,7 +716,7 @@ void Graphics::drawImageWithin (const Image* const imageToDraw,
|
|||
const bool fillAlphaChannelWithCurrentBrush) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (destX, destY, destW, destH);
|
||||
jassert (areCoordsSensibleNumbers (destX, destY, destW, destH));
|
||||
|
||||
if (imageToDraw != 0)
|
||||
{
|
||||
|
|
@ -757,8 +750,8 @@ void Graphics::drawImage (const Image* const imageToDraw,
|
|||
const bool fillAlphaChannelWithCurrentBrush) const throw()
|
||||
{
|
||||
// passing in a silly number can cause maths problems in rendering!
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (dx, dy, dw, dh);
|
||||
ASSERT_COORDS_ARE_SENSIBLE_NUMBERS (sx, sy, sw, sh);
|
||||
jassert (areCoordsSensibleNumbers (dx, dy, dw, dh));
|
||||
jassert (areCoordsSensibleNumbers (sx, sy, sw, sh));
|
||||
|
||||
if (context->clipRegionIntersects (Rectangle (dx, dy, dw, dh)))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -717,7 +717,7 @@ public:
|
|||
private:
|
||||
//==============================================================================
|
||||
LowLevelGraphicsContext* const context;
|
||||
const bool ownsContext;
|
||||
ScopedPointer <LowLevelGraphicsContext> contextToDelete;
|
||||
|
||||
bool saveStatePending;
|
||||
void saveStateIfPending() throw();
|
||||
|
|
|
|||
|
|
@ -443,10 +443,9 @@ void LowLevelGraphicsPostScriptRenderer::writeImage (const Image& im,
|
|||
pixel = Colours::transparentWhite;
|
||||
}
|
||||
|
||||
char colourString [16];
|
||||
sprintf (colourString, "%x%x%x", pixel.getRed(), pixel.getGreen(), pixel.getBlue());
|
||||
const uint8 pixelValues[3] = { pixel.getRed(), pixel.getGreen(), pixel.getBlue() };
|
||||
|
||||
out << (const char*) colourString;
|
||||
out << String::toHexString (pixelValues, 3, 0);
|
||||
charsOnLine += 3;
|
||||
|
||||
if (charsOnLine > 100)
|
||||
|
|
|
|||
|
|
@ -1341,10 +1341,10 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
LowLevelGraphicsSoftwareRenderer::LowLevelGraphicsSoftwareRenderer (Image& image_)
|
||||
: image (image_),
|
||||
stateStack (20)
|
||||
: image (image_)
|
||||
{
|
||||
currentState = new LLGCSavedState (image_.getBounds(), 0, 0, Font(), FillType(), Graphics::mediumResamplingQuality);
|
||||
currentState = new LLGCSavedState (image_.getBounds(), 0, 0, Font(),
|
||||
FillType(), Graphics::mediumResamplingQuality);
|
||||
}
|
||||
|
||||
LowLevelGraphicsSoftwareRenderer::~LowLevelGraphicsSoftwareRenderer()
|
||||
|
|
|
|||
|
|
@ -341,8 +341,7 @@ class TypefaceCache : public DeletedAtShutdown
|
|||
{
|
||||
public:
|
||||
TypefaceCache (int numToCache = 10) throw()
|
||||
: counter (1),
|
||||
faces (2)
|
||||
: counter (1)
|
||||
{
|
||||
while (--numToCache >= 0)
|
||||
faces.add (new CachedFace());
|
||||
|
|
|
|||
|
|
@ -109,8 +109,8 @@ void PositionedGlyph::moveBy (const float deltaX,
|
|||
|
||||
//==============================================================================
|
||||
GlyphArrangement::GlyphArrangement()
|
||||
: glyphs (128)
|
||||
{
|
||||
glyphs.ensureStorageAllocated (128);
|
||||
}
|
||||
|
||||
GlyphArrangement::GlyphArrangement (const GlyphArrangement& other)
|
||||
|
|
|
|||
|
|
@ -93,22 +93,21 @@ public:
|
|||
|
||||
//==============================================================================
|
||||
TextLayout::TextLayout() throw()
|
||||
: tokens (64),
|
||||
totalLines (0)
|
||||
: totalLines (0)
|
||||
{
|
||||
tokens.ensureStorageAllocated (64);
|
||||
}
|
||||
|
||||
TextLayout::TextLayout (const String& text,
|
||||
const Font& font) throw()
|
||||
: tokens (64),
|
||||
totalLines (0)
|
||||
: totalLines (0)
|
||||
{
|
||||
tokens.ensureStorageAllocated (64);
|
||||
appendText (text, font);
|
||||
}
|
||||
|
||||
TextLayout::TextLayout (const TextLayout& other) throw()
|
||||
: tokens (64),
|
||||
totalLines (0)
|
||||
: totalLines (0)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@ static const int defaultGranularity = 32;
|
|||
|
||||
//==============================================================================
|
||||
Path::Path() throw()
|
||||
: data (defaultGranularity),
|
||||
numElements (0),
|
||||
: numElements (0),
|
||||
pathXMin (0),
|
||||
pathXMax (0),
|
||||
pathYMin (0),
|
||||
|
|
@ -64,8 +63,7 @@ Path::~Path() throw()
|
|||
}
|
||||
|
||||
Path::Path (const Path& other) throw()
|
||||
: data (defaultGranularity),
|
||||
numElements (other.numElements),
|
||||
: numElements (other.numElements),
|
||||
pathXMin (other.pathXMin),
|
||||
pathXMax (other.pathXMax),
|
||||
pathYMin (other.pathYMin),
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@
|
|||
namespace jpeglibNamespace
|
||||
{
|
||||
#if JUCE_INCLUDE_JPEGLIB_CODE
|
||||
#if JUCE_MINGW
|
||||
typedef unsigned char boolean;
|
||||
#endif
|
||||
#if JUCE_MINGW
|
||||
typedef unsigned char boolean;
|
||||
#endif
|
||||
extern "C"
|
||||
{
|
||||
#define JPEG_INTERNALS
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ static int cacheTimeout = 5000;
|
|||
|
||||
|
||||
ImageCache::ImageCache()
|
||||
: images (4)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -985,17 +985,6 @@ bool File::appendText (const String& text,
|
|||
return false;
|
||||
}
|
||||
|
||||
bool File::printf (const tchar* pf, ...) const
|
||||
{
|
||||
va_list list;
|
||||
va_start (list, pf);
|
||||
|
||||
String text;
|
||||
text.vprintf (pf, list);
|
||||
|
||||
return appendData ((const char*) text, text.length());
|
||||
}
|
||||
|
||||
bool File::replaceWithText (const String& textToWrite,
|
||||
const bool asUnicode,
|
||||
const bool writeUnicodeHeaderBytes) const
|
||||
|
|
|
|||
|
|
@ -575,7 +575,7 @@ public:
|
|||
|
||||
@returns a stream that will write to this file (initially positioned at the
|
||||
end of the file), or 0 if the file can't be opened for some reason
|
||||
@see createInputStream, printf, appendData, appendText
|
||||
@see createInputStream, appendData, appendText
|
||||
*/
|
||||
FileOutputStream* createOutputStream (const int bufferSize = 0x8000) const;
|
||||
|
||||
|
|
@ -602,14 +602,6 @@ public:
|
|||
const String loadFileAsString() const;
|
||||
|
||||
//==============================================================================
|
||||
/** Writes text to the end of the file.
|
||||
|
||||
This will try to do a printf to the file.
|
||||
|
||||
@returns false if it can't write to the file for some reason
|
||||
*/
|
||||
bool printf (const tchar* format, ...) const;
|
||||
|
||||
/** Appends a block of binary data to the end of the file.
|
||||
|
||||
This will try to write the given buffer to the end of the file.
|
||||
|
|
|
|||
|
|
@ -416,12 +416,6 @@ const String juce_getOutputFromCommand (const String& command)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_64BIT
|
||||
#define filedesc ((long long) internal)
|
||||
#else
|
||||
#define filedesc ((int) internal)
|
||||
#endif
|
||||
|
||||
InterProcessLock::InterProcessLock (const String& name_)
|
||||
: internal (0),
|
||||
name (name_),
|
||||
|
|
@ -436,7 +430,7 @@ InterProcessLock::InterProcessLock (const String& name_)
|
|||
|
||||
temp.create();
|
||||
|
||||
internal = (void*) open (temp.getFullPathName().toUTF8(), O_RDWR);
|
||||
internal = open (temp.getFullPathName().toUTF8(), O_RDWR);
|
||||
}
|
||||
|
||||
InterProcessLock::~InterProcessLock()
|
||||
|
|
@ -444,7 +438,7 @@ InterProcessLock::~InterProcessLock()
|
|||
while (reentrancyLevel > 0)
|
||||
this->exit();
|
||||
|
||||
close (filedesc);
|
||||
close (internal);
|
||||
}
|
||||
|
||||
bool InterProcessLock::enter (const int timeOutMillisecs)
|
||||
|
|
@ -464,7 +458,7 @@ bool InterProcessLock::enter (const int timeOutMillisecs)
|
|||
|
||||
for (;;)
|
||||
{
|
||||
const int result = fcntl (filedesc, F_SETLK, &fl);
|
||||
const int result = fcntl (internal, F_SETLK, &fl);
|
||||
|
||||
if (result >= 0)
|
||||
{
|
||||
|
|
@ -498,7 +492,7 @@ void InterProcessLock::exit()
|
|||
|
||||
for (;;)
|
||||
{
|
||||
const int result = fcntl (filedesc, F_SETLKW, &fl);
|
||||
const int result = fcntl (internal, F_SETLKW, &fl);
|
||||
|
||||
if (result >= 0 || errno != EINTR)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -504,7 +504,7 @@ private:
|
|||
{
|
||||
NSString* route = (NSString*) audioRoute;
|
||||
|
||||
//printf ("audio route: %s\n", [route cString]);
|
||||
//DBG ("audio route: " + nsStringToJuce (route));
|
||||
|
||||
if ([route hasPrefix: @"Receiver"])
|
||||
{
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ void* juce_findFileStart (const String& directory, const String& wildCard, Strin
|
|||
|
||||
if (e != 0)
|
||||
{
|
||||
FindFileStruct* ff = new FindFileStruct();
|
||||
ScopedPointer <FindFileStruct> ff (new FindFileStruct());
|
||||
ff->enumerator = [e retain];
|
||||
ff->parentDir = directory;
|
||||
ff->wildCard = wildCard;
|
||||
|
|
@ -415,10 +415,9 @@ void* juce_findFileStart (const String& directory, const String& wildCard, Strin
|
|||
ff->parentDir += File::separator;
|
||||
|
||||
if (juce_findFileNext (ff, firstResultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly))
|
||||
return ff;
|
||||
return ff.release();
|
||||
|
||||
[e release];
|
||||
delete ff;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -426,9 +425,8 @@ void* juce_findFileStart (const String& directory, const String& wildCard, Strin
|
|||
|
||||
void juce_findFileClose (void* handle)
|
||||
{
|
||||
FindFileStruct* ff = (FindFileStruct*) handle;
|
||||
ScopedPointer <FindFileStruct> ff ((FindFileStruct*) handle);
|
||||
[ff->enumerator release];
|
||||
delete ff;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ public:
|
|||
{
|
||||
makeInactive();
|
||||
[renderContext clearDrawable];
|
||||
delete viewHolder;
|
||||
viewHolder = 0;
|
||||
}
|
||||
|
||||
bool makeActive() const throw()
|
||||
|
|
@ -250,7 +250,7 @@ public:
|
|||
|
||||
private:
|
||||
OpenGLPixelFormat pixelFormat;
|
||||
NSViewComponentInternal* viewHolder;
|
||||
ScopedPointer <NSViewComponentInternal> viewHolder;
|
||||
|
||||
//==============================================================================
|
||||
WindowedGLContext (const WindowedGLContext&);
|
||||
|
|
|
|||
|
|
@ -1723,7 +1723,6 @@ class ASIOAudioIODeviceType : public AudioIODeviceType
|
|||
public:
|
||||
ASIOAudioIODeviceType()
|
||||
: AudioIODeviceType (T("ASIO")),
|
||||
classIds (2),
|
||||
hasScanned (false)
|
||||
{
|
||||
CoInitialize (0);
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ public:
|
|||
|
||||
HRESULT __stdcall GetWindowContext (LPOLEINPLACEFRAME* lplpFrame, LPOLEINPLACEUIWINDOW* lplpDoc, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO lpFrameInfo)
|
||||
{
|
||||
frame->AddRef();
|
||||
// frame->AddRef(); // MS docs are unclear about whether this is needed, but it seems to lead to a memory leak..
|
||||
*lplpFrame = frame;
|
||||
*lplpDoc = 0;
|
||||
lpFrameInfo->fMDIApp = FALSE;
|
||||
|
|
|
|||
|
|
@ -960,8 +960,6 @@ public:
|
|||
isStarted (false),
|
||||
outputDeviceIndex (outputDeviceIndex_),
|
||||
inputDeviceIndex (inputDeviceIndex_),
|
||||
inChans (4),
|
||||
outChans (4),
|
||||
numInputBuffers (0),
|
||||
numOutputBuffers (0),
|
||||
totalSamplesOut (0),
|
||||
|
|
|
|||
|
|
@ -32,16 +32,16 @@
|
|||
static const unsigned int specialId = WM_APP + 0x4400;
|
||||
static const unsigned int broadcastId = WM_APP + 0x4403;
|
||||
static const unsigned int specialCallbackId = WM_APP + 0x4402;
|
||||
|
||||
|
||||
static const TCHAR* const messageWindowName = _T("JUCEWindow");
|
||||
|
||||
HWND juce_messageWindowHandle = 0;
|
||||
|
||||
extern long improbableWindowNumber; // defined in windowing.cpp
|
||||
|
||||
#ifndef WM_APPCOMMAND
|
||||
#define WM_APPCOMMAND 0x0319
|
||||
#endif
|
||||
|
||||
#ifndef WM_APPCOMMAND
|
||||
#define WM_APPCOMMAND 0x0319
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ struct MidiOutHandle
|
|||
juce_UseDebuggingNewOperator
|
||||
};
|
||||
|
||||
static VoidArray handles (4);
|
||||
static Array <MidiOutHandle*> midiOutputHandles;
|
||||
|
||||
//==============================================================================
|
||||
const StringArray MidiOutput::getDevices()
|
||||
|
|
@ -485,9 +485,9 @@ MidiOutput* MidiOutput::openDevice (int index)
|
|||
}
|
||||
}
|
||||
|
||||
for (i = handles.size(); --i >= 0;)
|
||||
for (i = midiOutputHandles.size(); --i >= 0;)
|
||||
{
|
||||
MidiOutHandle* const han = (MidiOutHandle*) handles.getUnchecked(i);
|
||||
MidiOutHandle* const han = midiOutputHandles.getUnchecked(i);
|
||||
|
||||
if (han != 0 && han->deviceId == deviceId)
|
||||
{
|
||||
|
|
@ -510,7 +510,7 @@ MidiOutput* MidiOutput::openDevice (int index)
|
|||
han->deviceId = deviceId;
|
||||
han->refCount = 1;
|
||||
han->handle = h;
|
||||
handles.add (han);
|
||||
midiOutputHandles.add (han);
|
||||
|
||||
MidiOutput* const out = new MidiOutput();
|
||||
out->internal = (void*) han;
|
||||
|
|
@ -533,10 +533,10 @@ MidiOutput::~MidiOutput()
|
|||
{
|
||||
MidiOutHandle* const h = (MidiOutHandle*) internal;
|
||||
|
||||
if (handles.contains ((void*) h) && --(h->refCount) == 0)
|
||||
if (midiOutputHandles.contains (h) && --(h->refCount) == 0)
|
||||
{
|
||||
midiOutClose (h->handle);
|
||||
handles.removeValue ((void*) h);
|
||||
midiOutputHandles.removeValue (h);
|
||||
delete h;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static HKEY findKeyForPath (String name,
|
|||
const String PlatformUtilities::getRegistryValue (const String& regValuePath,
|
||||
const String& defaultValue)
|
||||
{
|
||||
String valueName, s;
|
||||
String valueName, result (defaultValue);
|
||||
HKEY k = findKeyForPath (regValuePath, false, valueName);
|
||||
|
||||
if (k != 0)
|
||||
|
|
@ -82,14 +82,17 @@ const String PlatformUtilities::getRegistryValue (const String& regValuePath,
|
|||
DWORD type = REG_SZ;
|
||||
|
||||
if (RegQueryValueEx (k, valueName, 0, &type, (LPBYTE) buffer, &bufferSize) == ERROR_SUCCESS)
|
||||
s = buffer;
|
||||
else
|
||||
s = defaultValue;
|
||||
{
|
||||
if (type == REG_SZ)
|
||||
result = buffer;
|
||||
else if (type == REG_DWORD)
|
||||
result = String ((int) *(DWORD*) buffer);
|
||||
}
|
||||
|
||||
RegCloseKey (k);
|
||||
}
|
||||
|
||||
return s;
|
||||
return result;
|
||||
}
|
||||
|
||||
void PlatformUtilities::setRegistryValue (const String& regValuePath,
|
||||
|
|
|
|||
|
|
@ -715,10 +715,7 @@ void XmlElement::setAttribute (const tchar* const attributeName,
|
|||
void XmlElement::setAttribute (const tchar* const attributeName,
|
||||
const double number) throw()
|
||||
{
|
||||
tchar buffer [40];
|
||||
CharacterFunctions::printf (buffer, numElementsInArray (buffer), T("%.9g"), number);
|
||||
|
||||
setAttribute (attributeName, buffer);
|
||||
setAttribute (attributeName, String (number));
|
||||
}
|
||||
|
||||
void XmlElement::removeAttribute (const tchar* const attributeName) throw()
|
||||
|
|
|
|||
|
|
@ -73,7 +73,14 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
#if JUCE_WINDOWS
|
||||
void* internal;
|
||||
#elif JUCE_64BIT
|
||||
long long internal;
|
||||
#else
|
||||
int internal;
|
||||
#endif
|
||||
|
||||
String name;
|
||||
int reentrancyLevel;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ void juce_CloseThreadHandle (void* handle);
|
|||
#endif
|
||||
|
||||
//==============================================================================
|
||||
static VoidArray runningThreads (4);
|
||||
static VoidArray runningThreads;
|
||||
static CriticalSection runningThreadsLock;
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
|
||||
//==============================================================================
|
||||
static VoidArray objectsToDelete (16);
|
||||
static VoidArray objectsToDelete;
|
||||
static CriticalSection lock;
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue