| @@ -5085,35 +5085,37 @@ int InputStream::readCompressedInt() | |||||
| int64 InputStream::readInt64() | int64 InputStream::readInt64() | ||||
| { | { | ||||
| char temp[8]; | |||||
| union { uint8 asBytes[8]; uint64 asInt64; } n; | |||||
| if (read (temp, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfBigEndian (*reinterpret_cast <uint64*> (temp)); | |||||
| if (read (n.asBytes, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfBigEndian (n.asInt64); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| int64 InputStream::readInt64BigEndian() | int64 InputStream::readInt64BigEndian() | ||||
| { | { | ||||
| char temp[8]; | |||||
| union { uint8 asBytes[8]; uint64 asInt64; } n; | |||||
| if (read (temp, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfLittleEndian (*reinterpret_cast <uint64*> (temp)); | |||||
| if (read (n.asBytes, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfLittleEndian (n.asInt64); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| float InputStream::readFloat() | float InputStream::readFloat() | ||||
| { | { | ||||
| union { int asInt; float asFloat; } n; | |||||
| n.asInt = readInt(); | |||||
| // the union below relies on these types being the same size... | |||||
| static_jassert (sizeof (int32) == sizeof (float)); | |||||
| union { int32 asInt; float asFloat; } n; | |||||
| n.asInt = (int32) readInt(); | |||||
| return n.asFloat; | return n.asFloat; | ||||
| } | } | ||||
| float InputStream::readFloatBigEndian() | float InputStream::readFloatBigEndian() | ||||
| { | { | ||||
| union { int asInt; float asFloat; } n; | |||||
| n.asInt = readIntBigEndian(); | |||||
| union { int32 asInt; float asFloat; } n; | |||||
| n.asInt = (int32) readIntBigEndian(); | |||||
| return n.asFloat; | return n.asFloat; | ||||
| } | } | ||||
| @@ -10322,10 +10324,10 @@ public: | |||||
| static StringHolder empty; | static StringHolder empty; | ||||
| private: | private: | ||||
| static inline StringHolder* bufferFromText (juce_wchar* const text) throw() | |||||
| static inline StringHolder* bufferFromText (void* const text) throw() | |||||
| { | { | ||||
| // (Can't use offsetof() here because of warnings about this not being a POD) | // (Can't use offsetof() here because of warnings about this not being a POD) | ||||
| return reinterpret_cast <StringHolder*> (reinterpret_cast <char*> (text) | |||||
| return reinterpret_cast <StringHolder*> (static_cast <char*> (text) | |||||
| - (reinterpret_cast <size_t> (reinterpret_cast <StringHolder*> (1)->text) - 1)); | - (reinterpret_cast <size_t> (reinterpret_cast <StringHolder*> (1)->text) - 1)); | ||||
| } | } | ||||
| }; | }; | ||||
| @@ -11533,9 +11535,7 @@ const String String::substring (int start, int end) const | |||||
| return empty; | return empty; | ||||
| int len = 0; | int len = 0; | ||||
| const juce_wchar* const t = text; | |||||
| while (len <= end && t [len] != 0) | |||||
| while (len <= end && text [len] != 0) | |||||
| ++len; | ++len; | ||||
| if (end >= len) | if (end >= len) | ||||
| @@ -11558,8 +11558,8 @@ const String String::substring (const int start) const | |||||
| if (start >= len) | if (start >= len) | ||||
| return empty; | return empty; | ||||
| else | |||||
| return String (text + start, len - start); | |||||
| return String (text + start, len - start); | |||||
| } | } | ||||
| const String String::dropLastCharacters (const int numberToDrop) const | const String String::dropLastCharacters (const int numberToDrop) const | ||||
| @@ -11578,11 +11578,10 @@ const String String::fromFirstOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? indexOfIgnoreCase (sub) | const int i = ignoreCase ? indexOfIgnoreCase (sub) | ||||
| : indexOf (sub); | : indexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return empty; | return empty; | ||||
| else | |||||
| return substring (includeSubString ? i : i + sub.length()); | |||||
| return substring (includeSubString ? i : i + sub.length()); | |||||
| } | } | ||||
| const String String::fromLastOccurrenceOf (const String& sub, | const String String::fromLastOccurrenceOf (const String& sub, | ||||
| @@ -11591,7 +11590,6 @@ const String String::fromLastOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) | const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) | ||||
| : lastIndexOf (sub); | : lastIndexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return *this; | return *this; | ||||
| @@ -11604,7 +11602,6 @@ const String String::upToFirstOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? indexOfIgnoreCase (sub) | const int i = ignoreCase ? indexOfIgnoreCase (sub) | ||||
| : indexOf (sub); | : indexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return *this; | return *this; | ||||
| @@ -11685,8 +11682,8 @@ const String String::trim() const | |||||
| return empty; | return empty; | ||||
| else if (start > 0 || end < len) | else if (start > 0 || end < len) | ||||
| return String (text + start, end - start); | return String (text + start, end - start); | ||||
| else | |||||
| return *this; | |||||
| return *this; | |||||
| } | } | ||||
| const String String::trimStart() const | const String String::trimStart() const | ||||
| @@ -11701,8 +11698,8 @@ const String String::trimStart() const | |||||
| if (t == text) | if (t == text) | ||||
| return *this; | return *this; | ||||
| else | |||||
| return String (t); | |||||
| return String (t); | |||||
| } | } | ||||
| const String String::trimEnd() const | const String String::trimEnd() const | ||||
| @@ -11720,9 +11717,6 @@ const String String::trimEnd() const | |||||
| const String String::trimCharactersAtStart (const String& charactersToTrim) const | const String String::trimCharactersAtStart (const String& charactersToTrim) const | ||||
| { | { | ||||
| if (isEmpty()) | |||||
| return empty; | |||||
| const juce_wchar* t = text; | const juce_wchar* t = text; | ||||
| while (charactersToTrim.containsChar (*t)) | while (charactersToTrim.containsChar (*t)) | ||||
| @@ -11730,8 +11724,8 @@ const String String::trimCharactersAtStart (const String& charactersToTrim) cons | |||||
| if (t == text) | if (t == text) | ||||
| return *this; | return *this; | ||||
| else | |||||
| return String (t); | |||||
| return String (t); | |||||
| } | } | ||||
| const String String::trimCharactersAtEnd (const String& charactersToTrim) const | const String String::trimCharactersAtEnd (const String& charactersToTrim) const | ||||
| @@ -11791,7 +11785,17 @@ const String String::removeCharacters (const String& charactersToRemove) const | |||||
| const String String::initialSectionContainingOnly (const String& permittedCharacters) const | const String String::initialSectionContainingOnly (const String& permittedCharacters) const | ||||
| { | { | ||||
| return substring (0, CharacterFunctions::getIntialSectionContainingOnly (text, permittedCharacters.text)); | |||||
| int i = 0; | |||||
| for (;;) | |||||
| { | |||||
| if (! permittedCharacters.containsChar (text[i])) | |||||
| break; | |||||
| ++i; | |||||
| } | |||||
| return substring (0, i); | |||||
| } | } | ||||
| const String String::initialSectionNotContaining (const String& charactersToStopAt) const | const String String::initialSectionNotContaining (const String& charactersToStopAt) const | ||||
| @@ -12104,7 +12108,7 @@ const char* String::toUTF8() const | |||||
| String* const mutableThis = const_cast <String*> (this); | String* const mutableThis = const_cast <String*> (this); | ||||
| mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, currentLen + 1 + utf8BytesNeeded / sizeof (juce_wchar)); | mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, currentLen + 1 + utf8BytesNeeded / sizeof (juce_wchar)); | ||||
| char* const otherCopy = (char*) (text + currentLen); | |||||
| char* const otherCopy = reinterpret_cast <char*> (text + currentLen); | |||||
| copyToUTF8 (otherCopy, std::numeric_limits<int>::max()); | copyToUTF8 (otherCopy, std::numeric_limits<int>::max()); | ||||
| return otherCopy; | return otherCopy; | ||||
| @@ -12291,12 +12295,11 @@ const char* String::toCString() const | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| int len = length(); | |||||
| const int len = length(); | |||||
| String* const mutableThis = const_cast <String*> (this); | String* const mutableThis = const_cast <String*> (this); | ||||
| mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, (len + 1) * 2); | mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, (len + 1) * 2); | ||||
| char* otherCopy = (char*) (text + len + 1); | |||||
| char* otherCopy = reinterpret_cast <char*> (text + len + 1); | |||||
| CharacterFunctions::copy (otherCopy, text, len); | CharacterFunctions::copy (otherCopy, text, len); | ||||
| otherCopy [len] = 0; | otherCopy [len] = 0; | ||||
| return otherCopy; | return otherCopy; | ||||
| @@ -26339,6 +26342,26 @@ MidiBuffer::~MidiBuffer() throw() | |||||
| { | { | ||||
| } | } | ||||
| inline uint8* MidiBuffer::getData() const throw() | |||||
| { | |||||
| return static_cast <uint8*> (data.getData()); | |||||
| } | |||||
| inline int MidiBuffer::getEventTime (const void* const d) throw() | |||||
| { | |||||
| return *static_cast <const int*> (d); | |||||
| } | |||||
| inline uint16 MidiBuffer::getEventDataSize (const void* const d) throw() | |||||
| { | |||||
| return *reinterpret_cast <const uint16*> (static_cast <const char*> (d) + sizeof (int)); | |||||
| } | |||||
| inline uint16 MidiBuffer::getEventTotalSize (const void* const d) throw() | |||||
| { | |||||
| return getEventDataSize (d) + sizeof (int) + sizeof (uint16); | |||||
| } | |||||
| void MidiBuffer::clear() throw() | void MidiBuffer::clear() throw() | ||||
| { | { | ||||
| bytesUsed = 0; | bytesUsed = 0; | ||||
| @@ -26406,23 +26429,23 @@ void MidiBuffer::addEvent (const uint8* const newData, | |||||
| if (numBytes > 0) | if (numBytes > 0) | ||||
| { | { | ||||
| int spaceNeeded = bytesUsed + numBytes + 6; | |||||
| int spaceNeeded = bytesUsed + numBytes + sizeof (int) + sizeof (uint16); | |||||
| data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); | data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); | ||||
| uint8* d = findEventAfter (getData(), sampleNumber); | uint8* d = findEventAfter (getData(), sampleNumber); | ||||
| const int bytesToMove = bytesUsed - (int) (d - getData()); | const int bytesToMove = bytesUsed - (int) (d - getData()); | ||||
| if (bytesToMove > 0) | if (bytesToMove > 0) | ||||
| memmove (d + numBytes + 6, d, bytesToMove); | |||||
| memmove (d + numBytes + sizeof (int) + sizeof (uint16), d, bytesToMove); | |||||
| *reinterpret_cast <int*> (d) = sampleNumber; | *reinterpret_cast <int*> (d) = sampleNumber; | ||||
| d += 4; | |||||
| d += sizeof (int); | |||||
| *reinterpret_cast <uint16*> (d) = (uint16) numBytes; | *reinterpret_cast <uint16*> (d) = (uint16) numBytes; | ||||
| d += 2; | |||||
| d += sizeof (uint16); | |||||
| memcpy (d, newData, numBytes); | memcpy (d, newData, numBytes); | ||||
| bytesUsed += numBytes + 6; | |||||
| bytesUsed += numBytes + sizeof (int) + sizeof (uint16); | |||||
| } | } | ||||
| } | } | ||||
| @@ -26457,8 +26480,7 @@ int MidiBuffer::getNumEvents() const throw() | |||||
| while (d < end) | while (d < end) | ||||
| { | { | ||||
| d += 4; | |||||
| d += 2 + *reinterpret_cast <const uint16*> (d); | |||||
| d += getEventTotalSize (d); | |||||
| ++n; | ++n; | ||||
| } | } | ||||
| @@ -26467,7 +26489,7 @@ int MidiBuffer::getNumEvents() const throw() | |||||
| int MidiBuffer::getFirstEventTime() const throw() | int MidiBuffer::getFirstEventTime() const throw() | ||||
| { | { | ||||
| return (bytesUsed > 0) ? *reinterpret_cast <const int*> (data.getData()) : 0; | |||||
| return bytesUsed > 0 ? getEventTime (data.getData()) : 0; | |||||
| } | } | ||||
| int MidiBuffer::getLastEventTime() const throw() | int MidiBuffer::getLastEventTime() const throw() | ||||
| @@ -26480,10 +26502,10 @@ int MidiBuffer::getLastEventTime() const throw() | |||||
| for (;;) | for (;;) | ||||
| { | { | ||||
| const uint8* nextOne = d + 6 + *reinterpret_cast <const uint16*> (d + 4); | |||||
| const uint8* const nextOne = d + getEventTotalSize (d); | |||||
| if (nextOne >= endData) | if (nextOne >= endData) | ||||
| return *reinterpret_cast <const int*> (d); | |||||
| return getEventTime (d); | |||||
| d = nextOne; | d = nextOne; | ||||
| } | } | ||||
| @@ -26493,11 +26515,8 @@ uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const thr | |||||
| { | { | ||||
| const uint8* const endData = getData() + bytesUsed; | const uint8* const endData = getData() + bytesUsed; | ||||
| while (d < endData && *reinterpret_cast <const int*> (d) <= samplePosition) | |||||
| { | |||||
| d += 4; | |||||
| d += 2 + *reinterpret_cast <const uint16*> (d); | |||||
| } | |||||
| while (d < endData && getEventTime (d) <= samplePosition) | |||||
| d += getEventTotalSize (d); | |||||
| return d; | return d; | ||||
| } | } | ||||
| @@ -26517,11 +26536,8 @@ void MidiBuffer::Iterator::setNextSamplePosition (const int samplePosition) thro | |||||
| data = buffer.getData(); | data = buffer.getData(); | ||||
| const uint8* dataEnd = data + buffer.bytesUsed; | const uint8* dataEnd = data + buffer.bytesUsed; | ||||
| while (data < dataEnd && *reinterpret_cast <const int*> (data) < samplePosition) | |||||
| { | |||||
| data += 4; | |||||
| data += 2 + *(uint16*) data; | |||||
| } | |||||
| while (data < dataEnd && getEventTime (data) < samplePosition) | |||||
| data += getEventTotalSize (data); | |||||
| } | } | ||||
| bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, int& samplePosition) throw() | bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, int& samplePosition) throw() | ||||
| @@ -26529,10 +26545,9 @@ bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, | |||||
| if (data >= buffer.getData() + buffer.bytesUsed) | if (data >= buffer.getData() + buffer.bytesUsed) | ||||
| return false; | return false; | ||||
| samplePosition = *reinterpret_cast <const int*> (data); | |||||
| data += 4; | |||||
| numBytes = *reinterpret_cast <const uint16*> (data); | |||||
| data += 2; | |||||
| samplePosition = getEventTime (data); | |||||
| numBytes = getEventDataSize (data); | |||||
| data += sizeof (int) + sizeof (uint16); | |||||
| midiData = data; | midiData = data; | ||||
| data += numBytes; | data += numBytes; | ||||
| @@ -26544,10 +26559,9 @@ bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result, int& samplePositio | |||||
| if (data >= buffer.getData() + buffer.bytesUsed) | if (data >= buffer.getData() + buffer.bytesUsed) | ||||
| return false; | return false; | ||||
| samplePosition = *reinterpret_cast <const int*> (data); | |||||
| data += 4; | |||||
| const int numBytes = *reinterpret_cast <const uint16*> (data); | |||||
| data += 2; | |||||
| samplePosition = getEventTime (data); | |||||
| const int numBytes = getEventDataSize (data); | |||||
| data += sizeof (int) + sizeof (uint16); | |||||
| result = MidiMessage (data, numBytes, samplePosition); | result = MidiMessage (data, numBytes, samplePosition); | ||||
| data += numBytes; | data += numBytes; | ||||
| @@ -27189,26 +27203,24 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||||
| MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| message (0), | |||||
| size (dataSize) | size (dataSize) | ||||
| { | { | ||||
| jassert (dataSize > 0); | jassert (dataSize > 0); | ||||
| if (dataSize <= 4) | if (dataSize <= 4) | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| else | else | ||||
| data = (uint8*) juce_malloc (dataSize); | |||||
| data = static_cast<uint8*> (juce_malloc (dataSize)); | |||||
| memcpy (data, d, dataSize); | memcpy (data, d, dataSize); | ||||
| // check that the length matches the data.. | // check that the length matches the data.. | ||||
| jassert (size > 3 || *reinterpret_cast<const uint8*> (d) >= 0xf0 | |||||
| || getMessageLengthFromFirstByte (*reinterpret_cast<const uint8*> (d)) == size); | |||||
| jassert (size > 3 || data[0] >= 0xf0 || getMessageLengthFromFirstByte (data[0]) == size); | |||||
| } | } | ||||
| MidiMessage::MidiMessage (const int byte1, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (1) | size (1) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -27219,7 +27231,7 @@ MidiMessage::MidiMessage (const int byte1, const double t) throw() | |||||
| MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (2) | size (2) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -27231,7 +27243,7 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) thro | |||||
| MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (3) | size (3) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -27244,40 +27256,39 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, con | |||||
| MidiMessage::MidiMessage (const MidiMessage& other) | MidiMessage::MidiMessage (const MidiMessage& other) | ||||
| : timeStamp (other.timeStamp), | : timeStamp (other.timeStamp), | ||||
| message (other.message), | |||||
| size (other.size) | size (other.size) | ||||
| { | { | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) | MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) | ||||
| : timeStamp (newTimeStamp), | : timeStamp (newTimeStamp), | ||||
| message (other.message), | |||||
| size (other.size) | size (other.size) | ||||
| { | { | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) | MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| message (0) | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)) | |||||
| { | { | ||||
| const uint8* src = static_cast <const uint8*> (src_); | const uint8* src = static_cast <const uint8*> (src_); | ||||
| unsigned int byte = (unsigned int) *src; | unsigned int byte = (unsigned int) *src; | ||||
| @@ -27315,7 +27326,7 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| size = 1 + (int) (d - src); | size = 1 + (int) (d - src); | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| *data = (uint8) byte; | *data = (uint8) byte; | ||||
| memcpy (data + 1, src, size - 1); | memcpy (data + 1, src, size - 1); | ||||
| } | } | ||||
| @@ -27325,14 +27336,15 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| const int bytesLeft = readVariableLengthVal (src + 1, n); | const int bytesLeft = readVariableLengthVal (src + 1, n); | ||||
| size = jmin (sz + 1, n + 2 + bytesLeft); | size = jmin (sz + 1, n + 2 + bytesLeft); | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| *data = (uint8) byte; | *data = (uint8) byte; | ||||
| memcpy (data + 1, src, size - 1); | memcpy (data + 1, src, size - 1); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| preallocatedData.asInt32 = 0; | |||||
| size = getMessageLengthFromFirstByte ((uint8) byte); | size = getMessageLengthFromFirstByte ((uint8) byte); | ||||
| *data = (uint8) byte; | |||||
| data[0] = (uint8) byte; | |||||
| if (size > 1) | if (size > 1) | ||||
| { | { | ||||
| @@ -27347,7 +27359,7 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| message = 0; | |||||
| preallocatedData.asInt32 = 0; | |||||
| size = 0; | size = 0; | ||||
| } | } | ||||
| } | } | ||||
| @@ -27358,19 +27370,19 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) | |||||
| { | { | ||||
| timeStamp = other.timeStamp; | timeStamp = other.timeStamp; | ||||
| size = other.size; | size = other.size; | ||||
| message = other.message; | |||||
| if (data != (uint8*) &message) | |||||
| if (data != static_cast <const uint8*> (preallocatedData.asBytes)) | |||||
| juce_free (data); | juce_free (data); | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| @@ -27379,7 +27391,7 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) | |||||
| MidiMessage::~MidiMessage() | MidiMessage::~MidiMessage() | ||||
| { | { | ||||
| if (data != (uint8*) &message) | |||||
| if (data != static_cast <const uint8*> (preallocatedData.asBytes)) | |||||
| juce_free (data); | juce_free (data); | ||||
| } | } | ||||
| @@ -81506,11 +81518,9 @@ public: | |||||
| y = y_; | y = y_; | ||||
| generate (scratchBuffer, x, width); | generate (scratchBuffer, x, width); | ||||
| const uint8* mask = reinterpret_cast <uint8*> (scratchBuffer.getData()); | |||||
| if (sizeof (SrcPixelType) == sizeof (PixelARGB)) | |||||
| mask += PixelARGB::indexA; | |||||
| et.clipLineToMask (x, y_, mask, sizeof (SrcPixelType), width); | |||||
| et.clipLineToMask (x, y_, | |||||
| reinterpret_cast<uint8*> (scratchBuffer.getData()) + SrcPixelType::indexA, | |||||
| sizeof (SrcPixelType), width); | |||||
| } | } | ||||
| private: | private: | ||||
| @@ -213585,7 +213595,7 @@ void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* call | |||||
| static BOOL CALLBACK BroadcastEnumWindowProc (HWND hwnd, LPARAM lParam) | static BOOL CALLBACK BroadcastEnumWindowProc (HWND hwnd, LPARAM lParam) | ||||
| { | { | ||||
| if (hwnd != juce_messageWindowHandle) | if (hwnd != juce_messageWindowHandle) | ||||
| (reinterpret_cast <VoidArray*> (lParam))->add ((void*) hwnd); | |||||
| reinterpret_cast <VoidArray*> (lParam)->add ((void*) hwnd); | |||||
| return TRUE; | return TRUE; | ||||
| } | } | ||||
| @@ -231933,15 +231943,15 @@ public: | |||||
| const int width = image.getWidth(); | const int width = image.getWidth(); | ||||
| const int height = image.getHeight(); | const int height = image.getHeight(); | ||||
| HeapBlock <uint32> colour (width * height); | |||||
| HeapBlock <char> colour (width * height); | |||||
| int index = 0; | int index = 0; | ||||
| for (int y = 0; y < height; ++y) | for (int y = 0; y < height; ++y) | ||||
| for (int x = 0; x < width; ++x) | for (int x = 0; x < width; ++x) | ||||
| colour[index++] = image.getPixelAt (x, y).getARGB(); | |||||
| colour[index++] = static_cast<char> (image.getPixelAt (x, y).getARGB()); | |||||
| XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | ||||
| 0, reinterpret_cast<char*> (colour.getData()), | |||||
| 0, colour.getData(), | |||||
| width, height, 32, 0); | width, height, 32, 0); | ||||
| Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | ||||
| @@ -231961,7 +231971,7 @@ public: | |||||
| const int width = image.getWidth(); | const int width = image.getWidth(); | ||||
| const int height = image.getHeight(); | const int height = image.getHeight(); | ||||
| const int stride = (width + 7) >> 3; | const int stride = (width + 7) >> 3; | ||||
| HeapBlock <uint8> mask; | |||||
| HeapBlock <char> mask; | |||||
| mask.calloc (stride * height); | mask.calloc (stride * height); | ||||
| const bool msbfirst = (BitmapBitOrder (display) == MSBFirst); | const bool msbfirst = (BitmapBitOrder (display) == MSBFirst); | ||||
| @@ -231969,7 +231979,7 @@ public: | |||||
| { | { | ||||
| for (int x = 0; x < width; ++x) | for (int x = 0; x < width; ++x) | ||||
| { | { | ||||
| const uint8 bit = (uint8) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const char bit = (char) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const int offset = y * stride + (x >> 3); | const int offset = y * stride + (x >> 3); | ||||
| if (image.getPixelAt (x, y).getAlpha() >= 128) | if (image.getPixelAt (x, y).getAlpha() >= 128) | ||||
| @@ -231978,7 +231988,7 @@ public: | |||||
| } | } | ||||
| return XCreatePixmapFromBitmapData (display, DefaultRootWindow (display), | return XCreatePixmapFromBitmapData (display, DefaultRootWindow (display), | ||||
| reinterpret_cast<char*> (mask.getData()), width, height, 1, 0, 1); | |||||
| mask.getData(), width, height, 1, 0, 1); | |||||
| } | } | ||||
| void setIcon (const Image& newIcon) | void setIcon (const Image& newIcon) | ||||
| @@ -233824,7 +233834,7 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| } | } | ||||
| const int stride = (cursorW + 7) >> 3; | const int stride = (cursorW + 7) >> 3; | ||||
| HeapBlock <uint8> maskPlane, sourcePlane; | |||||
| HeapBlock <char> maskPlane, sourcePlane; | |||||
| maskPlane.calloc (stride * cursorH); | maskPlane.calloc (stride * cursorH); | ||||
| sourcePlane.calloc (stride * cursorH); | sourcePlane.calloc (stride * cursorH); | ||||
| @@ -233834,7 +233844,7 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| { | { | ||||
| for (int x = cursorW; --x >= 0;) | for (int x = cursorW; --x >= 0;) | ||||
| { | { | ||||
| const uint8 mask = (uint8) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const char mask = (char) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const int offset = y * stride + (x >> 3); | const int offset = y * stride + (x >> 3); | ||||
| const Colour c (im.getPixelAt (x, y)); | const Colour c (im.getPixelAt (x, y)); | ||||
| @@ -233847,8 +233857,8 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| } | } | ||||
| } | } | ||||
| Pixmap sourcePixmap = XCreatePixmapFromBitmapData (display, root, reinterpret_cast <char*> (sourcePlane.getData()), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap maskPixmap = XCreatePixmapFromBitmapData (display, root, reinterpret_cast <char*> (maskPlane.getData()), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap sourcePixmap = XCreatePixmapFromBitmapData (display, root, sourcePlane.getData(), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap maskPixmap = XCreatePixmapFromBitmapData (display, root, maskPlane.getData(), cursorW, cursorH, 0xffff, 0, 1); | |||||
| XColor white, black; | XColor white, black; | ||||
| black.red = black.green = black.blue = 0; | black.red = black.green = black.blue = 0; | ||||
| @@ -234512,7 +234522,7 @@ public: | |||||
| if (isInterleaved) | if (isInterleaved) | ||||
| { | { | ||||
| scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | ||||
| float* interleaved = reinterpret_cast <float*> (scratch.getData()); | |||||
| float* interleaved = static_cast <float*> (scratch.getData()); | |||||
| AudioDataConverters::interleaveSamples ((const float**) data, interleaved, numSamples, numChannelsRunning); | AudioDataConverters::interleaveSamples ((const float**) data, interleaved, numSamples, numChannelsRunning); | ||||
| AudioDataConverters::convertFloatToFormat (sampleFormat, interleaved, interleaved, numSamples * numChannelsRunning); | AudioDataConverters::convertFloatToFormat (sampleFormat, interleaved, interleaved, numSamples * numChannelsRunning); | ||||
| @@ -234550,7 +234560,7 @@ public: | |||||
| if (isInterleaved) | if (isInterleaved) | ||||
| { | { | ||||
| scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | ||||
| float* interleaved = reinterpret_cast <float*> (scratch.getData()); | |||||
| float* interleaved = static_cast <float*> (scratch.getData()); | |||||
| snd_pcm_sframes_t num = snd_pcm_readi (handle, (void*) interleaved, numSamples); | snd_pcm_sframes_t num = snd_pcm_readi (handle, (void*) interleaved, numSamples); | ||||
| @@ -243259,7 +243269,7 @@ static const String getConnectedEndpointName (MIDIEndpointRef endpoint) | |||||
| if (s.isNotEmpty()) | if (s.isNotEmpty()) | ||||
| { | { | ||||
| if (result.isNotEmpty()) | if (result.isNotEmpty()) | ||||
| result += (", "); | |||||
| result += ", "; | |||||
| result += s; | result += s; | ||||
| } | } | ||||
| @@ -251422,7 +251432,7 @@ static const String getConnectedEndpointName (MIDIEndpointRef endpoint) | |||||
| if (s.isNotEmpty()) | if (s.isNotEmpty()) | ||||
| { | { | ||||
| if (result.isNotEmpty()) | if (result.isNotEmpty()) | ||||
| result += (", "); | |||||
| result += ", "; | |||||
| result += s; | result += s; | ||||
| } | } | ||||
| @@ -870,13 +870,13 @@ public: | |||||
| static uint64 swapIfLittleEndian (uint64 value); | static uint64 swapIfLittleEndian (uint64 value); | ||||
| static uint32 littleEndianInt (const char* bytes); | |||||
| static uint32 littleEndianInt (const void* bytes); | |||||
| static uint16 littleEndianShort (const char* bytes); | |||||
| static uint16 littleEndianShort (const void* bytes); | |||||
| static uint32 bigEndianInt (const char* bytes); | |||||
| static uint32 bigEndianInt (const void* bytes); | |||||
| static uint16 bigEndianShort (const char* bytes); | |||||
| static uint16 bigEndianShort (const void* bytes); | |||||
| static int littleEndian24Bit (const char* bytes); | static int littleEndian24Bit (const char* bytes); | ||||
| @@ -944,10 +944,10 @@ inline uint64 ByteOrder::swap (uint64 value) | |||||
| inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return swap (v); } | inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return swap (v); } | ||||
| inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return swap (v); } | inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return swap (v); } | ||||
| inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return swap (v); } | inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return swap (v); } | ||||
| inline uint32 ByteOrder::littleEndianInt (const char* const bytes) { return *reinterpret_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const char* const bytes) { return *reinterpret_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const char* const bytes) { return swap (*reinterpret_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const char* const bytes) { return swap (*reinterpret_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::littleEndianInt (const void* const bytes) { return *static_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const void* const bytes) { return *static_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const void* const bytes) { return swap (*static_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const void* const bytes) { return swap (*static_cast <const uint16*> (bytes)); } | |||||
| inline bool ByteOrder::isBigEndian() { return false; } | inline bool ByteOrder::isBigEndian() { return false; } | ||||
| #else | #else | ||||
| inline uint16 ByteOrder::swapIfBigEndian (const uint16 v) { return swap (v); } | inline uint16 ByteOrder::swapIfBigEndian (const uint16 v) { return swap (v); } | ||||
| @@ -956,10 +956,10 @@ inline uint64 ByteOrder::swap (uint64 value) | |||||
| inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return v; } | inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return v; } | ||||
| inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return v; } | inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return v; } | ||||
| inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return v; } | inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return v; } | ||||
| inline uint32 ByteOrder::littleEndianInt (const char* const bytes) { return swap (*reinterpret_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const char* const bytes) { return swap (*reinterpret_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const char* const bytes) { return *reinterpret_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const char* const bytes) { return *reinterpret_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::littleEndianInt (const void* const bytes) { return swap (*static_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const void* const bytes) { return swap (*static_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const void* const bytes) { return *static_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const void* const bytes) { return *static_cast <const uint16*> (bytes); } | |||||
| inline bool ByteOrder::isBigEndian() { return true; } | inline bool ByteOrder::isBigEndian() { return true; } | ||||
| #endif | #endif | ||||
| @@ -1513,8 +1513,8 @@ public: | |||||
| { | { | ||||
| } | } | ||||
| HeapBlock (const size_t numElements) | |||||
| : data (reinterpret_cast <ElementType*> (::juce_malloc (numElements * sizeof (ElementType)))) | |||||
| explicit HeapBlock (const size_t numElements) | |||||
| : data (static_cast <ElementType*> (::juce_malloc (numElements * sizeof (ElementType)))) | |||||
| { | { | ||||
| } | } | ||||
| @@ -1548,13 +1548,13 @@ public: | |||||
| void malloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void malloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| ::juce_free (data); | ::juce_free (data); | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| } | } | ||||
| void calloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void calloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| ::juce_free (data); | ::juce_free (data); | ||||
| data = reinterpret_cast <ElementType*> (::juce_calloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_calloc (newNumElements * elementSize)); | |||||
| } | } | ||||
| void allocate (const size_t newNumElements, const bool initialiseToZero) | void allocate (const size_t newNumElements, const bool initialiseToZero) | ||||
| @@ -1562,17 +1562,17 @@ public: | |||||
| ::juce_free (data); | ::juce_free (data); | ||||
| if (initialiseToZero) | if (initialiseToZero) | ||||
| data = reinterpret_cast <ElementType*> (::juce_calloc (newNumElements * sizeof (ElementType))); | |||||
| data = static_cast <ElementType*> (::juce_calloc (newNumElements * sizeof (ElementType))); | |||||
| else | else | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * sizeof (ElementType))); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * sizeof (ElementType))); | |||||
| } | } | ||||
| void realloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void realloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| if (data == 0) | if (data == 0) | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| else | else | ||||
| data = reinterpret_cast <ElementType*> (::juce_realloc (data, newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_realloc (data, newNumElements * elementSize)); | |||||
| } | } | ||||
| void free() | void free() | ||||
| @@ -4509,7 +4509,7 @@ class JUCE_API XmlElement | |||||
| { | { | ||||
| public: | public: | ||||
| XmlElement (const String& tagName) throw(); | |||||
| explicit XmlElement (const String& tagName) throw(); | |||||
| XmlElement (const XmlElement& other) throw(); | XmlElement (const XmlElement& other) throw(); | ||||
| @@ -6430,9 +6430,9 @@ class JUCE_API ScopedLock | |||||
| { | { | ||||
| public: | public: | ||||
| inline ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } | |||||
| inline explicit ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } | |||||
| inline ~ScopedLock() throw() { lock_.exit(); } | |||||
| inline ~ScopedLock() throw() { lock_.exit(); } | |||||
| private: | private: | ||||
| @@ -6446,9 +6446,9 @@ class ScopedUnlock | |||||
| { | { | ||||
| public: | public: | ||||
| inline ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } | |||||
| inline explicit ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } | |||||
| inline ~ScopedUnlock() throw() { lock_.enter(); } | |||||
| inline ~ScopedUnlock() throw() { lock_.enter(); } | |||||
| private: | private: | ||||
| @@ -6615,7 +6615,7 @@ class JUCE_API ValueTree | |||||
| { | { | ||||
| public: | public: | ||||
| ValueTree (const String& type); | |||||
| explicit ValueTree (const String& type); | |||||
| ValueTree (const ValueTree& other); | ValueTree (const ValueTree& other); | ||||
| @@ -7117,7 +7117,7 @@ class JUCE_API Random | |||||
| { | { | ||||
| public: | public: | ||||
| Random (int64 seedValue) throw(); | |||||
| explicit Random (int64 seedValue) throw(); | |||||
| ~Random() throw(); | ~Random() throw(); | ||||
| @@ -7518,15 +7518,15 @@ public: | |||||
| MD5& operator= (const MD5& other); | MD5& operator= (const MD5& other); | ||||
| MD5 (const MemoryBlock& data); | |||||
| explicit MD5 (const MemoryBlock& data); | |||||
| MD5 (const char* data, const size_t numBytes); | MD5 (const char* data, const size_t numBytes); | ||||
| MD5 (const String& text); | |||||
| explicit MD5 (const String& text); | |||||
| MD5 (InputStream& input, int64 numBytesToRead = -1); | MD5 (InputStream& input, int64 numBytesToRead = -1); | ||||
| MD5 (const File& file); | |||||
| explicit MD5 (const File& file); | |||||
| ~MD5(); | ~MD5(); | ||||
| @@ -7580,6 +7580,11 @@ public: | |||||
| int numRandomSeeds = 0); | int numRandomSeeds = 0); | ||||
| static bool isProbablyPrime (const BigInteger& number, int certainty); | static bool isProbablyPrime (const BigInteger& number, int certainty); | ||||
| private: | |||||
| Primes(); | |||||
| Primes (const Primes&); | |||||
| Primes& operator= (const Primes&); | |||||
| }; | }; | ||||
| #endif // __JUCE_PRIMES_JUCEHEADER__ | #endif // __JUCE_PRIMES_JUCEHEADER__ | ||||
| @@ -7599,7 +7604,7 @@ public: | |||||
| RSAKey(); | RSAKey(); | ||||
| RSAKey (const String& stringRepresentation); | |||||
| explicit RSAKey (const String& stringRepresentation); | |||||
| ~RSAKey(); | ~RSAKey(); | ||||
| @@ -7679,7 +7684,7 @@ class JUCE_API FileInputStream : public InputStream | |||||
| { | { | ||||
| public: | public: | ||||
| FileInputStream (const File& fileToRead); | |||||
| explicit FileInputStream (const File& fileToRead); | |||||
| ~FileInputStream(); | ~FileInputStream(); | ||||
| @@ -8641,7 +8646,7 @@ class JUCE_API InterProcessLock | |||||
| { | { | ||||
| public: | public: | ||||
| InterProcessLock (const String& name); | |||||
| explicit InterProcessLock (const String& name); | |||||
| ~InterProcessLock(); | ~InterProcessLock(); | ||||
| @@ -8702,6 +8707,11 @@ public: | |||||
| static void lowerPrivilege(); | static void lowerPrivilege(); | ||||
| static bool JUCE_CALLTYPE isRunningUnderDebugger(); | static bool JUCE_CALLTYPE isRunningUnderDebugger(); | ||||
| private: | |||||
| Process(); | |||||
| Process (const Process&); | |||||
| Process& operator= (const Process&); | |||||
| }; | }; | ||||
| #endif // __JUCE_PROCESS_JUCEHEADER__ | #endif // __JUCE_PROCESS_JUCEHEADER__ | ||||
| @@ -8755,7 +8765,7 @@ class JUCE_API Thread | |||||
| { | { | ||||
| public: | public: | ||||
| Thread (const String& threadName); | |||||
| explicit Thread (const String& threadName); | |||||
| virtual ~Thread(); | virtual ~Thread(); | ||||
| @@ -8883,9 +8893,9 @@ class JUCE_API ScopedReadLock | |||||
| { | { | ||||
| public: | public: | ||||
| inline ScopedReadLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterRead(); } | |||||
| inline explicit ScopedReadLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterRead(); } | |||||
| inline ~ScopedReadLock() throw() { lock_.exitRead(); } | |||||
| inline ~ScopedReadLock() throw() { lock_.exitRead(); } | |||||
| private: | private: | ||||
| @@ -8910,11 +8920,11 @@ class JUCE_API ScopedTryLock | |||||
| { | { | ||||
| public: | public: | ||||
| inline ScopedTryLock (const CriticalSection& lock) throw() : lock_ (lock), lockWasSuccessful (lock.tryEnter()) {} | |||||
| inline explicit ScopedTryLock (const CriticalSection& lock) throw() : lock_ (lock), lockWasSuccessful (lock.tryEnter()) {} | |||||
| inline ~ScopedTryLock() throw() { if (lockWasSuccessful) lock_.exit(); } | |||||
| inline ~ScopedTryLock() throw() { if (lockWasSuccessful) lock_.exit(); } | |||||
| bool isLocked() const throw() { return lockWasSuccessful; } | |||||
| bool isLocked() const throw() { return lockWasSuccessful; } | |||||
| private: | private: | ||||
| @@ -8940,9 +8950,9 @@ class JUCE_API ScopedWriteLock | |||||
| { | { | ||||
| public: | public: | ||||
| inline ScopedWriteLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterWrite(); } | |||||
| inline explicit ScopedWriteLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterWrite(); } | |||||
| inline ~ScopedWriteLock() throw() { lock_.exitWrite(); } | |||||
| inline ~ScopedWriteLock() throw() { lock_.exitWrite(); } | |||||
| private: | private: | ||||
| @@ -8973,7 +8983,7 @@ class JUCE_API ThreadPoolJob | |||||
| { | { | ||||
| public: | public: | ||||
| ThreadPoolJob (const String& name); | |||||
| explicit ThreadPoolJob (const String& name); | |||||
| virtual ~ThreadPoolJob(); | virtual ~ThreadPoolJob(); | ||||
| @@ -9101,7 +9111,7 @@ class JUCE_API TimeSliceThread : public Thread | |||||
| { | { | ||||
| public: | public: | ||||
| TimeSliceThread (const String& threadName); | |||||
| explicit TimeSliceThread (const String& threadName); | |||||
| ~TimeSliceThread(); | ~TimeSliceThread(); | ||||
| @@ -10639,7 +10649,7 @@ public: | |||||
| protected: | protected: | ||||
| String name; | String name; | ||||
| Typeface (const String& name) throw(); | |||||
| explicit Typeface (const String& name) throw(); | |||||
| private: | private: | ||||
| Typeface (const Typeface&); | Typeface (const Typeface&); | ||||
| @@ -10652,7 +10662,7 @@ public: | |||||
| CustomTypeface(); | CustomTypeface(); | ||||
| CustomTypeface (InputStream& serialisedTypefaceStream); | |||||
| explicit CustomTypeface (InputStream& serialisedTypefaceStream); | |||||
| ~CustomTypeface(); | ~CustomTypeface(); | ||||
| @@ -11407,6 +11417,8 @@ public: | |||||
| { | { | ||||
| } | } | ||||
| enum { indexA = 0 }; | |||||
| private: | private: | ||||
| uint8 a : 8; | uint8 a : 8; | ||||
| @@ -11832,7 +11844,7 @@ class JUCE_API Graphics | |||||
| { | { | ||||
| public: | public: | ||||
| Graphics (Image& imageToDrawOnto) throw(); | |||||
| explicit Graphics (Image& imageToDrawOnto) throw(); | |||||
| ~Graphics() throw(); | ~Graphics() throw(); | ||||
| @@ -12176,7 +12188,7 @@ public: | |||||
| int bottomGap, | int bottomGap, | ||||
| int rightGap) throw(); | int rightGap) throw(); | ||||
| BorderSize (int allGaps) throw(); | |||||
| explicit BorderSize (int allGaps) throw(); | |||||
| ~BorderSize() throw(); | ~BorderSize() throw(); | ||||
| @@ -12234,7 +12246,7 @@ public: | |||||
| virtual ~Component(); | virtual ~Component(); | ||||
| Component (const String& componentName); | |||||
| explicit Component (const String& componentName); | |||||
| const String& getName() const throw() { return componentName_; } | const String& getName() const throw() { return componentName_; } | ||||
| @@ -12813,7 +12825,7 @@ namespace StandardApplicationCommandIDs | |||||
| struct JUCE_API ApplicationCommandInfo | struct JUCE_API ApplicationCommandInfo | ||||
| { | { | ||||
| ApplicationCommandInfo (CommandID commandID) throw(); | |||||
| explicit ApplicationCommandInfo (CommandID commandID) throw(); | |||||
| void setInfo (const String& shortName, | void setInfo (const String& shortName, | ||||
| const String& description, | const String& description, | ||||
| @@ -14251,7 +14263,7 @@ class JUCE_API AudioThumbnailCache : public TimeSliceThread | |||||
| { | { | ||||
| public: | public: | ||||
| AudioThumbnailCache (int maxNumThumbsToStore); | |||||
| explicit AudioThumbnailCache (int maxNumThumbsToStore); | |||||
| ~AudioThumbnailCache(); | ~AudioThumbnailCache(); | ||||
| @@ -15174,7 +15186,7 @@ public: | |||||
| virtual ~AudioIODeviceType(); | virtual ~AudioIODeviceType(); | ||||
| protected: | protected: | ||||
| AudioIODeviceType (const String& typeName); | |||||
| explicit AudioIODeviceType (const String& typeName); | |||||
| private: | private: | ||||
| String typeName; | String typeName; | ||||
| @@ -15468,7 +15480,13 @@ public: | |||||
| private: | private: | ||||
| double timeStamp; | double timeStamp; | ||||
| uint8* data; | uint8* data; | ||||
| int message, size; | |||||
| int size; | |||||
| union | |||||
| { | |||||
| uint8 asBytes[4]; | |||||
| uint32 asInt32; | |||||
| } preallocatedData; | |||||
| }; | }; | ||||
| #endif // __JUCE_MIDIMESSAGE_JUCEHEADER__ | #endif // __JUCE_MIDIMESSAGE_JUCEHEADER__ | ||||
| @@ -15526,7 +15544,7 @@ protected: | |||||
| String name; | String name; | ||||
| void* internal; | void* internal; | ||||
| MidiInput (const String& name); | |||||
| explicit MidiInput (const String& name); | |||||
| private: | private: | ||||
| MidiInput (const MidiInput&); | MidiInput (const MidiInput&); | ||||
| @@ -15552,7 +15570,7 @@ public: | |||||
| MidiBuffer() throw(); | MidiBuffer() throw(); | ||||
| MidiBuffer (const MidiMessage& message) throw(); | |||||
| explicit MidiBuffer (const MidiMessage& message) throw(); | |||||
| MidiBuffer (const MidiBuffer& other) throw(); | MidiBuffer (const MidiBuffer& other) throw(); | ||||
| @@ -15621,8 +15639,11 @@ private: | |||||
| MemoryBlock data; | MemoryBlock data; | ||||
| int bytesUsed; | int bytesUsed; | ||||
| uint8* getData() const throw() { return reinterpret_cast <uint8*> (data.getData()); } | |||||
| uint8* getData() const throw(); | |||||
| uint8* findEventAfter (uint8* d, const int samplePosition) const throw(); | uint8* findEventAfter (uint8* d, const int samplePosition) const throw(); | ||||
| static int getEventTime (const void* d) throw(); | |||||
| static uint16 getEventDataSize (const void* d) throw(); | |||||
| static uint16 getEventTotalSize (const void* d) throw(); | |||||
| }; | }; | ||||
| #endif // __JUCE_MIDIBUFFER_JUCEHEADER__ | #endif // __JUCE_MIDIBUFFER_JUCEHEADER__ | ||||
| @@ -15765,8 +15786,8 @@ class JUCE_API TooltipWindow : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| TooltipWindow (Component* parentComponent = 0, | |||||
| int millisecondsBeforeTipAppears = 700); | |||||
| explicit TooltipWindow (Component* parentComponent = 0, | |||||
| int millisecondsBeforeTipAppears = 700); | |||||
| ~TooltipWindow(); | ~TooltipWindow(); | ||||
| @@ -15826,7 +15847,7 @@ class JUCE_API Button : public Component, | |||||
| { | { | ||||
| protected: | protected: | ||||
| Button (const String& buttonName); | |||||
| explicit Button (const String& buttonName); | |||||
| public: | public: | ||||
| virtual ~Button(); | virtual ~Button(); | ||||
| @@ -16105,7 +16126,7 @@ class JUCE_API Viewport : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| Viewport (const String& componentName = String::empty); | |||||
| explicit Viewport (const String& componentName = String::empty); | |||||
| ~Viewport(); | ~Viewport(); | ||||
| @@ -16401,8 +16422,8 @@ class JUCE_API TextEditor : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| TextEditor (const String& componentName = String::empty, | |||||
| tchar passwordCharacter = 0); | |||||
| explicit TextEditor (const String& componentName = String::empty, | |||||
| tchar passwordCharacter = 0); | |||||
| virtual ~TextEditor(); | virtual ~TextEditor(); | ||||
| @@ -16821,7 +16842,7 @@ class JUCE_API ComboBox : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| ComboBox (const String& componentName); | |||||
| explicit ComboBox (const String& componentName); | |||||
| ~ComboBox(); | ~ComboBox(); | ||||
| @@ -17194,6 +17215,11 @@ public: | |||||
| static void deinterleaveSamples (const float* source, float** dest, | static void deinterleaveSamples (const float* source, float** dest, | ||||
| int numSamples, int numChannels); | int numSamples, int numChannels); | ||||
| private: | |||||
| AudioDataConverters(); | |||||
| AudioDataConverters (const AudioDataConverters&); | |||||
| AudioDataConverters& operator= (const AudioDataConverters&); | |||||
| }; | }; | ||||
| #endif // __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ | #endif // __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ | ||||
| @@ -20015,7 +20041,7 @@ class JUCE_API ImageButton : public Button | |||||
| { | { | ||||
| public: | public: | ||||
| ImageButton (const String& name); | |||||
| explicit ImageButton (const String& name); | |||||
| ~ImageButton(); | ~ImageButton(); | ||||
| @@ -20979,7 +21005,7 @@ class JUCE_API ProgressBar : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| ProgressBar (double& progress); | |||||
| explicit ProgressBar (double& progress); | |||||
| ~ProgressBar(); | ~ProgressBar(); | ||||
| @@ -21058,7 +21084,7 @@ class JUCE_API Slider : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| Slider (const String& componentName); | |||||
| explicit Slider (const String& componentName); | |||||
| ~Slider(); | ~Slider(); | ||||
| @@ -23481,7 +23507,7 @@ class JUCE_API KeyPressMappingSet : public KeyListener, | |||||
| { | { | ||||
| public: | public: | ||||
| KeyPressMappingSet (ApplicationCommandManager* commandManager) throw(); | |||||
| explicit KeyPressMappingSet (ApplicationCommandManager* commandManager) throw(); | |||||
| KeyPressMappingSet (const KeyPressMappingSet& other) throw(); | KeyPressMappingSet (const KeyPressMappingSet& other) throw(); | ||||
| @@ -23873,7 +23899,7 @@ class JUCE_API TabbedComponent : public Component | |||||
| { | { | ||||
| public: | public: | ||||
| TabbedComponent (const TabbedButtonBar::Orientation orientation); | |||||
| explicit TabbedComponent (const TabbedButtonBar::Orientation orientation); | |||||
| ~TabbedComponent(); | ~TabbedComponent(); | ||||
| @@ -25349,7 +25375,7 @@ public: | |||||
| { | { | ||||
| } | } | ||||
| SelectedItemSet (const Array <SelectableItemType>& items) | |||||
| explicit SelectedItemSet (const Array <SelectableItemType>& items) | |||||
| : selectedItems (items) | : selectedItems (items) | ||||
| { | { | ||||
| } | } | ||||
| @@ -25531,7 +25557,7 @@ class LassoComponent : public Component | |||||
| { | { | ||||
| public: | public: | ||||
| LassoComponent (const int outlineThickness_ = 1) | |||||
| explicit LassoComponent (const int outlineThickness_ = 1) | |||||
| : source (0), | : source (0), | ||||
| outlineThickness (outlineThickness_) | outlineThickness (outlineThickness_) | ||||
| { | { | ||||
| @@ -26960,7 +26986,7 @@ class JUCE_API WebBrowserComponent : public Component | |||||
| { | { | ||||
| public: | public: | ||||
| WebBrowserComponent (bool unloadPageWhenBrowserIsHidden = true); | |||||
| explicit WebBrowserComponent (bool unloadPageWhenBrowserIsHidden = true); | |||||
| ~WebBrowserComponent(); | ~WebBrowserComponent(); | ||||
| @@ -48,7 +48,7 @@ | |||||
| struct JUCE_API ApplicationCommandInfo | struct JUCE_API ApplicationCommandInfo | ||||
| { | { | ||||
| //============================================================================== | //============================================================================== | ||||
| ApplicationCommandInfo (CommandID commandID) throw(); | |||||
| explicit ApplicationCommandInfo (CommandID commandID) throw(); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Sets a number of the structures values at once. | /** Sets a number of the structures values at once. | ||||
| @@ -49,7 +49,7 @@ public: | |||||
| The maxNumThumbsToStore parameter lets you specify how many previews should | The maxNumThumbsToStore parameter lets you specify how many previews should | ||||
| be kept in memory at once. | be kept in memory at once. | ||||
| */ | */ | ||||
| AudioThumbnailCache (int maxNumThumbsToStore); | |||||
| explicit AudioThumbnailCache (int maxNumThumbsToStore); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~AudioThumbnailCache(); | ~AudioThumbnailCache(); | ||||
| @@ -132,7 +132,7 @@ public: | |||||
| virtual ~AudioIODeviceType(); | virtual ~AudioIODeviceType(); | ||||
| protected: | protected: | ||||
| AudioIODeviceType (const String& typeName); | |||||
| explicit AudioIODeviceType (const String& typeName); | |||||
| private: | private: | ||||
| String typeName; | String typeName; | ||||
| @@ -177,7 +177,7 @@ protected: | |||||
| String name; | String name; | ||||
| void* internal; | void* internal; | ||||
| MidiInput (const String& name); | |||||
| explicit MidiInput (const String& name); | |||||
| private: | private: | ||||
| MidiInput (const MidiInput&); | MidiInput (const MidiInput&); | ||||
| @@ -87,6 +87,11 @@ public: | |||||
| static void deinterleaveSamples (const float* source, float** dest, | static void deinterleaveSamples (const float* source, float** dest, | ||||
| int numSamples, int numChannels); | int numSamples, int numChannels); | ||||
| private: | |||||
| AudioDataConverters(); | |||||
| AudioDataConverters (const AudioDataConverters&); | |||||
| AudioDataConverters& operator= (const AudioDataConverters&); | |||||
| }; | }; | ||||
| @@ -66,6 +66,26 @@ MidiBuffer::~MidiBuffer() throw() | |||||
| { | { | ||||
| } | } | ||||
| inline uint8* MidiBuffer::getData() const throw() | |||||
| { | |||||
| return static_cast <uint8*> (data.getData()); | |||||
| } | |||||
| inline int MidiBuffer::getEventTime (const void* const d) throw() | |||||
| { | |||||
| return *static_cast <const int*> (d); | |||||
| } | |||||
| inline uint16 MidiBuffer::getEventDataSize (const void* const d) throw() | |||||
| { | |||||
| return *reinterpret_cast <const uint16*> (static_cast <const char*> (d) + sizeof (int)); | |||||
| } | |||||
| inline uint16 MidiBuffer::getEventTotalSize (const void* const d) throw() | |||||
| { | |||||
| return getEventDataSize (d) + sizeof (int) + sizeof (uint16); | |||||
| } | |||||
| void MidiBuffer::clear() throw() | void MidiBuffer::clear() throw() | ||||
| { | { | ||||
| bytesUsed = 0; | bytesUsed = 0; | ||||
| @@ -133,23 +153,23 @@ void MidiBuffer::addEvent (const uint8* const newData, | |||||
| if (numBytes > 0) | if (numBytes > 0) | ||||
| { | { | ||||
| int spaceNeeded = bytesUsed + numBytes + 6; | |||||
| int spaceNeeded = bytesUsed + numBytes + sizeof (int) + sizeof (uint16); | |||||
| data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); | data.ensureSize ((spaceNeeded + spaceNeeded / 2 + 8) & ~7); | ||||
| uint8* d = findEventAfter (getData(), sampleNumber); | uint8* d = findEventAfter (getData(), sampleNumber); | ||||
| const int bytesToMove = bytesUsed - (int) (d - getData()); | const int bytesToMove = bytesUsed - (int) (d - getData()); | ||||
| if (bytesToMove > 0) | if (bytesToMove > 0) | ||||
| memmove (d + numBytes + 6, d, bytesToMove); | |||||
| memmove (d + numBytes + sizeof (int) + sizeof (uint16), d, bytesToMove); | |||||
| *reinterpret_cast <int*> (d) = sampleNumber; | *reinterpret_cast <int*> (d) = sampleNumber; | ||||
| d += 4; | |||||
| d += sizeof (int); | |||||
| *reinterpret_cast <uint16*> (d) = (uint16) numBytes; | *reinterpret_cast <uint16*> (d) = (uint16) numBytes; | ||||
| d += 2; | |||||
| d += sizeof (uint16); | |||||
| memcpy (d, newData, numBytes); | memcpy (d, newData, numBytes); | ||||
| bytesUsed += numBytes + 6; | |||||
| bytesUsed += numBytes + sizeof (int) + sizeof (uint16); | |||||
| } | } | ||||
| } | } | ||||
| @@ -184,8 +204,7 @@ int MidiBuffer::getNumEvents() const throw() | |||||
| while (d < end) | while (d < end) | ||||
| { | { | ||||
| d += 4; | |||||
| d += 2 + *reinterpret_cast <const uint16*> (d); | |||||
| d += getEventTotalSize (d); | |||||
| ++n; | ++n; | ||||
| } | } | ||||
| @@ -194,7 +213,7 @@ int MidiBuffer::getNumEvents() const throw() | |||||
| int MidiBuffer::getFirstEventTime() const throw() | int MidiBuffer::getFirstEventTime() const throw() | ||||
| { | { | ||||
| return (bytesUsed > 0) ? *reinterpret_cast <const int*> (data.getData()) : 0; | |||||
| return bytesUsed > 0 ? getEventTime (data.getData()) : 0; | |||||
| } | } | ||||
| int MidiBuffer::getLastEventTime() const throw() | int MidiBuffer::getLastEventTime() const throw() | ||||
| @@ -207,10 +226,10 @@ int MidiBuffer::getLastEventTime() const throw() | |||||
| for (;;) | for (;;) | ||||
| { | { | ||||
| const uint8* nextOne = d + 6 + *reinterpret_cast <const uint16*> (d + 4); | |||||
| const uint8* const nextOne = d + getEventTotalSize (d); | |||||
| if (nextOne >= endData) | if (nextOne >= endData) | ||||
| return *reinterpret_cast <const int*> (d); | |||||
| return getEventTime (d); | |||||
| d = nextOne; | d = nextOne; | ||||
| } | } | ||||
| @@ -220,11 +239,8 @@ uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const thr | |||||
| { | { | ||||
| const uint8* const endData = getData() + bytesUsed; | const uint8* const endData = getData() + bytesUsed; | ||||
| while (d < endData && *reinterpret_cast <const int*> (d) <= samplePosition) | |||||
| { | |||||
| d += 4; | |||||
| d += 2 + *reinterpret_cast <const uint16*> (d); | |||||
| } | |||||
| while (d < endData && getEventTime (d) <= samplePosition) | |||||
| d += getEventTotalSize (d); | |||||
| return d; | return d; | ||||
| } | } | ||||
| @@ -246,11 +262,8 @@ void MidiBuffer::Iterator::setNextSamplePosition (const int samplePosition) thro | |||||
| data = buffer.getData(); | data = buffer.getData(); | ||||
| const uint8* dataEnd = data + buffer.bytesUsed; | const uint8* dataEnd = data + buffer.bytesUsed; | ||||
| while (data < dataEnd && *reinterpret_cast <const int*> (data) < samplePosition) | |||||
| { | |||||
| data += 4; | |||||
| data += 2 + *(uint16*) data; | |||||
| } | |||||
| while (data < dataEnd && getEventTime (data) < samplePosition) | |||||
| data += getEventTotalSize (data); | |||||
| } | } | ||||
| bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, int& samplePosition) throw() | bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, int& samplePosition) throw() | ||||
| @@ -258,10 +271,9 @@ bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, int& numBytes, | |||||
| if (data >= buffer.getData() + buffer.bytesUsed) | if (data >= buffer.getData() + buffer.bytesUsed) | ||||
| return false; | return false; | ||||
| samplePosition = *reinterpret_cast <const int*> (data); | |||||
| data += 4; | |||||
| numBytes = *reinterpret_cast <const uint16*> (data); | |||||
| data += 2; | |||||
| samplePosition = getEventTime (data); | |||||
| numBytes = getEventDataSize (data); | |||||
| data += sizeof (int) + sizeof (uint16); | |||||
| midiData = data; | midiData = data; | ||||
| data += numBytes; | data += numBytes; | ||||
| @@ -273,10 +285,9 @@ bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result, int& samplePositio | |||||
| if (data >= buffer.getData() + buffer.bytesUsed) | if (data >= buffer.getData() + buffer.bytesUsed) | ||||
| return false; | return false; | ||||
| samplePosition = *reinterpret_cast <const int*> (data); | |||||
| data += 4; | |||||
| const int numBytes = *reinterpret_cast <const uint16*> (data); | |||||
| data += 2; | |||||
| samplePosition = getEventTime (data); | |||||
| const int numBytes = getEventDataSize (data); | |||||
| data += sizeof (int) + sizeof (uint16); | |||||
| result = MidiMessage (data, numBytes, samplePosition); | result = MidiMessage (data, numBytes, samplePosition); | ||||
| data += numBytes; | data += numBytes; | ||||
| @@ -47,7 +47,7 @@ public: | |||||
| MidiBuffer() throw(); | MidiBuffer() throw(); | ||||
| /** Creates a MidiBuffer containing a single midi message. */ | /** Creates a MidiBuffer containing a single midi message. */ | ||||
| MidiBuffer (const MidiMessage& message) throw(); | |||||
| explicit MidiBuffer (const MidiMessage& message) throw(); | |||||
| /** Creates a copy of another MidiBuffer. */ | /** Creates a copy of another MidiBuffer. */ | ||||
| MidiBuffer (const MidiBuffer& other) throw(); | MidiBuffer (const MidiBuffer& other) throw(); | ||||
| @@ -229,8 +229,11 @@ private: | |||||
| MemoryBlock data; | MemoryBlock data; | ||||
| int bytesUsed; | int bytesUsed; | ||||
| uint8* getData() const throw() { return reinterpret_cast <uint8*> (data.getData()); } | |||||
| uint8* getData() const throw(); | |||||
| uint8* findEventAfter (uint8* d, const int samplePosition) const throw(); | uint8* findEventAfter (uint8* d, const int samplePosition) const throw(); | ||||
| static int getEventTime (const void* d) throw(); | |||||
| static uint16 getEventDataSize (const void* d) throw(); | |||||
| static uint16 getEventTotalSize (const void* d) throw(); | |||||
| }; | }; | ||||
| @@ -78,26 +78,24 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() | |||||
| //============================================================================== | //============================================================================== | ||||
| MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| message (0), | |||||
| size (dataSize) | size (dataSize) | ||||
| { | { | ||||
| jassert (dataSize > 0); | jassert (dataSize > 0); | ||||
| if (dataSize <= 4) | if (dataSize <= 4) | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| else | else | ||||
| data = (uint8*) juce_malloc (dataSize); | |||||
| data = static_cast<uint8*> (juce_malloc (dataSize)); | |||||
| memcpy (data, d, dataSize); | memcpy (data, d, dataSize); | ||||
| // check that the length matches the data.. | // check that the length matches the data.. | ||||
| jassert (size > 3 || *reinterpret_cast<const uint8*> (d) >= 0xf0 | |||||
| || getMessageLengthFromFirstByte (*reinterpret_cast<const uint8*> (d)) == size); | |||||
| jassert (size > 3 || data[0] >= 0xf0 || getMessageLengthFromFirstByte (data[0]) == size); | |||||
| } | } | ||||
| MidiMessage::MidiMessage (const int byte1, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (1) | size (1) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -108,7 +106,7 @@ MidiMessage::MidiMessage (const int byte1, const double t) throw() | |||||
| MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (2) | size (2) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -120,7 +118,7 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) thro | |||||
| MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) throw() | MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) throw() | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)), | |||||
| size (3) | size (3) | ||||
| { | { | ||||
| data[0] = (uint8) byte1; | data[0] = (uint8) byte1; | ||||
| @@ -133,40 +131,39 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, con | |||||
| MidiMessage::MidiMessage (const MidiMessage& other) | MidiMessage::MidiMessage (const MidiMessage& other) | ||||
| : timeStamp (other.timeStamp), | : timeStamp (other.timeStamp), | ||||
| message (other.message), | |||||
| size (other.size) | size (other.size) | ||||
| { | { | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) | MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) | ||||
| : timeStamp (newTimeStamp), | : timeStamp (newTimeStamp), | ||||
| message (other.message), | |||||
| size (other.size) | size (other.size) | ||||
| { | { | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) | MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uint8 lastStatusByte, double t) | ||||
| : timeStamp (t), | : timeStamp (t), | ||||
| data ((uint8*) &message), | |||||
| message (0) | |||||
| data (static_cast<uint8*> (preallocatedData.asBytes)) | |||||
| { | { | ||||
| const uint8* src = static_cast <const uint8*> (src_); | const uint8* src = static_cast <const uint8*> (src_); | ||||
| unsigned int byte = (unsigned int) *src; | unsigned int byte = (unsigned int) *src; | ||||
| @@ -204,7 +201,7 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| size = 1 + (int) (d - src); | size = 1 + (int) (d - src); | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| *data = (uint8) byte; | *data = (uint8) byte; | ||||
| memcpy (data + 1, src, size - 1); | memcpy (data + 1, src, size - 1); | ||||
| } | } | ||||
| @@ -214,14 +211,15 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| const int bytesLeft = readVariableLengthVal (src + 1, n); | const int bytesLeft = readVariableLengthVal (src + 1, n); | ||||
| size = jmin (sz + 1, n + 2 + bytesLeft); | size = jmin (sz + 1, n + 2 + bytesLeft); | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| *data = (uint8) byte; | *data = (uint8) byte; | ||||
| memcpy (data + 1, src, size - 1); | memcpy (data + 1, src, size - 1); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| preallocatedData.asInt32 = 0; | |||||
| size = getMessageLengthFromFirstByte ((uint8) byte); | size = getMessageLengthFromFirstByte ((uint8) byte); | ||||
| *data = (uint8) byte; | |||||
| data[0] = (uint8) byte; | |||||
| if (size > 1) | if (size > 1) | ||||
| { | { | ||||
| @@ -236,7 +234,7 @@ MidiMessage::MidiMessage (const void* src_, int sz, int& numBytesUsed, const uin | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| message = 0; | |||||
| preallocatedData.asInt32 = 0; | |||||
| size = 0; | size = 0; | ||||
| } | } | ||||
| } | } | ||||
| @@ -247,19 +245,19 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) | |||||
| { | { | ||||
| timeStamp = other.timeStamp; | timeStamp = other.timeStamp; | ||||
| size = other.size; | size = other.size; | ||||
| message = other.message; | |||||
| if (data != (uint8*) &message) | |||||
| if (data != static_cast <const uint8*> (preallocatedData.asBytes)) | |||||
| juce_free (data); | juce_free (data); | ||||
| if (other.data != (uint8*) &other.message) | |||||
| if (other.data != static_cast <const uint8*> (other.preallocatedData.asBytes)) | |||||
| { | { | ||||
| data = (uint8*) juce_malloc (size); | |||||
| data = static_cast<uint8*> (juce_malloc (size)); | |||||
| memcpy (data, other.data, size); | memcpy (data, other.data, size); | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| data = (uint8*) &message; | |||||
| data = static_cast<uint8*> (preallocatedData.asBytes); | |||||
| preallocatedData.asInt32 = other.preallocatedData.asInt32; | |||||
| } | } | ||||
| } | } | ||||
| @@ -268,7 +266,7 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) | |||||
| MidiMessage::~MidiMessage() | MidiMessage::~MidiMessage() | ||||
| { | { | ||||
| if (data != (uint8*) &message) | |||||
| if (data != static_cast <const uint8*> (preallocatedData.asBytes)) | |||||
| juce_free (data); | juce_free (data); | ||||
| } | } | ||||
| @@ -896,7 +896,13 @@ public: | |||||
| private: | private: | ||||
| double timeStamp; | double timeStamp; | ||||
| uint8* data; | uint8* data; | ||||
| int message, size; | |||||
| int size; | |||||
| union | |||||
| { | |||||
| uint8 asBytes[4]; | |||||
| uint32 asInt32; | |||||
| } preallocatedData; | |||||
| }; | }; | ||||
| @@ -89,8 +89,8 @@ public: | |||||
| If you want an array of zero values, you can use the calloc() method instead. | If you want an array of zero values, you can use the calloc() method instead. | ||||
| */ | */ | ||||
| HeapBlock (const size_t numElements) | |||||
| : data (reinterpret_cast <ElementType*> (::juce_malloc (numElements * sizeof (ElementType)))) | |||||
| explicit HeapBlock (const size_t numElements) | |||||
| : data (static_cast <ElementType*> (::juce_malloc (numElements * sizeof (ElementType)))) | |||||
| { | { | ||||
| } | } | ||||
| @@ -180,7 +180,7 @@ public: | |||||
| void malloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void malloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| ::juce_free (data); | ::juce_free (data); | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| } | } | ||||
| /** Allocates a specified amount of memory and clears it. | /** Allocates a specified amount of memory and clears it. | ||||
| @@ -189,7 +189,7 @@ public: | |||||
| void calloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void calloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| ::juce_free (data); | ::juce_free (data); | ||||
| data = reinterpret_cast <ElementType*> (::juce_calloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_calloc (newNumElements * elementSize)); | |||||
| } | } | ||||
| /** Allocates a specified amount of memory and optionally clears it. | /** Allocates a specified amount of memory and optionally clears it. | ||||
| @@ -201,9 +201,9 @@ public: | |||||
| ::juce_free (data); | ::juce_free (data); | ||||
| if (initialiseToZero) | if (initialiseToZero) | ||||
| data = reinterpret_cast <ElementType*> (::juce_calloc (newNumElements * sizeof (ElementType))); | |||||
| data = static_cast <ElementType*> (::juce_calloc (newNumElements * sizeof (ElementType))); | |||||
| else | else | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * sizeof (ElementType))); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * sizeof (ElementType))); | |||||
| } | } | ||||
| /** Re-allocates a specified amount of memory. | /** Re-allocates a specified amount of memory. | ||||
| @@ -214,9 +214,9 @@ public: | |||||
| void realloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | void realloc (const size_t newNumElements, const size_t elementSize = sizeof (ElementType)) | ||||
| { | { | ||||
| if (data == 0) | if (data == 0) | ||||
| data = reinterpret_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_malloc (newNumElements * elementSize)); | |||||
| else | else | ||||
| data = reinterpret_cast <ElementType*> (::juce_realloc (data, newNumElements * elementSize)); | |||||
| data = static_cast <ElementType*> (::juce_realloc (data, newNumElements * elementSize)); | |||||
| } | } | ||||
| /** Frees any currently-allocated data. | /** Frees any currently-allocated data. | ||||
| @@ -77,7 +77,7 @@ public: | |||||
| Like an XmlElement, each ValueTree node has a type, which you can access with | Like an XmlElement, each ValueTree node has a type, which you can access with | ||||
| getType() and hasType(). | getType() and hasType(). | ||||
| */ | */ | ||||
| ValueTree (const String& type); | |||||
| explicit ValueTree (const String& type); | |||||
| /** Creates a reference to another ValueTree. */ | /** Creates a reference to another ValueTree. */ | ||||
| ValueTree (const ValueTree& other); | ValueTree (const ValueTree& other); | ||||
| @@ -65,16 +65,16 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Turns 4 bytes into a little-endian integer. */ | /** Turns 4 bytes into a little-endian integer. */ | ||||
| static uint32 littleEndianInt (const char* bytes); | |||||
| static uint32 littleEndianInt (const void* bytes); | |||||
| /** Turns 2 bytes into a little-endian integer. */ | /** Turns 2 bytes into a little-endian integer. */ | ||||
| static uint16 littleEndianShort (const char* bytes); | |||||
| static uint16 littleEndianShort (const void* bytes); | |||||
| /** Turns 4 bytes into a big-endian integer. */ | /** Turns 4 bytes into a big-endian integer. */ | ||||
| static uint32 bigEndianInt (const char* bytes); | |||||
| static uint32 bigEndianInt (const void* bytes); | |||||
| /** Turns 2 bytes into a big-endian integer. */ | /** Turns 2 bytes into a big-endian integer. */ | ||||
| static uint16 bigEndianShort (const char* bytes); | |||||
| static uint16 bigEndianShort (const void* bytes); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Converts 3 little-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ | /** Converts 3 little-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ | ||||
| @@ -151,10 +151,10 @@ inline uint64 ByteOrder::swap (uint64 value) | |||||
| inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return swap (v); } | inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return swap (v); } | ||||
| inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return swap (v); } | inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return swap (v); } | ||||
| inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return swap (v); } | inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return swap (v); } | ||||
| inline uint32 ByteOrder::littleEndianInt (const char* const bytes) { return *reinterpret_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const char* const bytes) { return *reinterpret_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const char* const bytes) { return swap (*reinterpret_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const char* const bytes) { return swap (*reinterpret_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::littleEndianInt (const void* const bytes) { return *static_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const void* const bytes) { return *static_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const void* const bytes) { return swap (*static_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const void* const bytes) { return swap (*static_cast <const uint16*> (bytes)); } | |||||
| inline bool ByteOrder::isBigEndian() { return false; } | inline bool ByteOrder::isBigEndian() { return false; } | ||||
| #else | #else | ||||
| inline uint16 ByteOrder::swapIfBigEndian (const uint16 v) { return swap (v); } | inline uint16 ByteOrder::swapIfBigEndian (const uint16 v) { return swap (v); } | ||||
| @@ -163,10 +163,10 @@ inline uint64 ByteOrder::swap (uint64 value) | |||||
| inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return v; } | inline uint16 ByteOrder::swapIfLittleEndian (const uint16 v) { return v; } | ||||
| inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return v; } | inline uint32 ByteOrder::swapIfLittleEndian (const uint32 v) { return v; } | ||||
| inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return v; } | inline uint64 ByteOrder::swapIfLittleEndian (const uint64 v) { return v; } | ||||
| inline uint32 ByteOrder::littleEndianInt (const char* const bytes) { return swap (*reinterpret_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const char* const bytes) { return swap (*reinterpret_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const char* const bytes) { return *reinterpret_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const char* const bytes) { return *reinterpret_cast <const uint16*> (bytes); } | |||||
| inline uint32 ByteOrder::littleEndianInt (const void* const bytes) { return swap (*static_cast <const uint32*> (bytes)); } | |||||
| inline uint16 ByteOrder::littleEndianShort (const void* const bytes) { return swap (*static_cast <const uint16*> (bytes)); } | |||||
| inline uint32 ByteOrder::bigEndianInt (const void* const bytes) { return *static_cast <const uint32*> (bytes); } | |||||
| inline uint16 ByteOrder::bigEndianShort (const void* const bytes) { return *static_cast <const uint16*> (bytes); } | |||||
| inline bool ByteOrder::isBigEndian() { return true; } | inline bool ByteOrder::isBigEndian() { return true; } | ||||
| #endif | #endif | ||||
| @@ -45,7 +45,7 @@ public: | |||||
| new Random (Time::currentTimeMillis()) | new Random (Time::currentTimeMillis()) | ||||
| */ | */ | ||||
| Random (int64 seedValue) throw(); | |||||
| explicit Random (int64 seedValue) throw(); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~Random() throw(); | ~Random() throw(); | ||||
| @@ -55,7 +55,7 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Creates a checksum for a block of binary data. */ | /** Creates a checksum for a block of binary data. */ | ||||
| MD5 (const MemoryBlock& data); | |||||
| explicit MD5 (const MemoryBlock& data); | |||||
| /** Creates a checksum for a block of binary data. */ | /** Creates a checksum for a block of binary data. */ | ||||
| MD5 (const char* data, const size_t numBytes); | MD5 (const char* data, const size_t numBytes); | ||||
| @@ -68,7 +68,7 @@ public: | |||||
| of this method with a checksum created by a different framework, which may have | of this method with a checksum created by a different framework, which may have | ||||
| used a different encoding. | used a different encoding. | ||||
| */ | */ | ||||
| MD5 (const String& text); | |||||
| explicit MD5 (const String& text); | |||||
| /** Creates a checksum for the input from a stream. | /** Creates a checksum for the input from a stream. | ||||
| @@ -79,7 +79,7 @@ public: | |||||
| MD5 (InputStream& input, int64 numBytesToRead = -1); | MD5 (InputStream& input, int64 numBytesToRead = -1); | ||||
| /** Creates a checksum for a file. */ | /** Creates a checksum for a file. */ | ||||
| MD5 (const File& file); | |||||
| explicit MD5 (const File& file); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~MD5(); | ~MD5(); | ||||
| @@ -64,6 +64,12 @@ public: | |||||
| safe value might be anything over about 20-30. | safe value might be anything over about 20-30. | ||||
| */ | */ | ||||
| static bool isProbablyPrime (const BigInteger& number, int certainty); | static bool isProbablyPrime (const BigInteger& number, int certainty); | ||||
| private: | |||||
| Primes(); | |||||
| Primes (const Primes&); | |||||
| Primes& operator= (const Primes&); | |||||
| }; | }; | ||||
| @@ -50,7 +50,7 @@ public: | |||||
| This reloads a key from a string created by the toString() method. | This reloads a key from a string created by the toString() method. | ||||
| */ | */ | ||||
| RSAKey (const String& stringRepresentation); | |||||
| explicit RSAKey (const String& stringRepresentation); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~RSAKey(); | ~RSAKey(); | ||||
| @@ -79,7 +79,7 @@ protected: | |||||
| initially set to this string, but these can be changed later | initially set to this string, but these can be changed later | ||||
| using the setName() and setButtonText() methods) | using the setName() and setButtonText() methods) | ||||
| */ | */ | ||||
| Button (const String& buttonName); | |||||
| explicit Button (const String& buttonName); | |||||
| public: | public: | ||||
| /** Destructor. */ | /** Destructor. */ | ||||
| @@ -49,7 +49,7 @@ public: | |||||
| @param name the name to give the component | @param name the name to give the component | ||||
| */ | */ | ||||
| ImageButton (const String& name); | |||||
| explicit ImageButton (const String& name); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~ImageButton(); | ~ImageButton(); | ||||
| @@ -84,7 +84,7 @@ public: | |||||
| @param componentName the name to set for the component (see Component::setName()) | @param componentName the name to set for the component (see Component::setName()) | ||||
| */ | */ | ||||
| ComboBox (const String& componentName); | |||||
| explicit ComboBox (const String& componentName); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~ComboBox(); | ~ComboBox(); | ||||
| @@ -59,7 +59,7 @@ public: | |||||
| you'd better be careful not to delete this variable while the | you'd better be careful not to delete this variable while the | ||||
| ProgressBar still exists! | ProgressBar still exists! | ||||
| */ | */ | ||||
| ProgressBar (double& progress); | |||||
| explicit ProgressBar (double& progress); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~ProgressBar(); | ~ProgressBar(); | ||||
| @@ -68,7 +68,7 @@ public: | |||||
| When created, you'll need to set up the slider's style and range with setSliderStyle(), | When created, you'll need to set up the slider's style and range with setSliderStyle(), | ||||
| setRange(), etc. | setRange(), etc. | ||||
| */ | */ | ||||
| Slider (const String& componentName); | |||||
| explicit Slider (const String& componentName); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~Slider(); | ~Slider(); | ||||
| @@ -89,8 +89,8 @@ public: | |||||
| for a black splodge (not all fonts include this, though), or 0x2022, | for a black splodge (not all fonts include this, though), or 0x2022, | ||||
| which is a bullet (probably the best choice for linux). | which is a bullet (probably the best choice for linux). | ||||
| */ | */ | ||||
| TextEditor (const String& componentName = String::empty, | |||||
| tchar passwordCharacter = 0); | |||||
| explicit TextEditor (const String& componentName = String::empty, | |||||
| tchar passwordCharacter = 0); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| virtual ~TextEditor(); | virtual ~TextEditor(); | ||||
| @@ -81,7 +81,7 @@ public: | |||||
| @see getName, setName | @see getName, setName | ||||
| */ | */ | ||||
| Component (const String& componentName); | |||||
| explicit Component (const String& componentName); | |||||
| /** Returns the name of this component. | /** Returns the name of this component. | ||||
| @@ -107,7 +107,7 @@ public: | |||||
| @see ApplicationCommandManager | @see ApplicationCommandManager | ||||
| */ | */ | ||||
| KeyPressMappingSet (ApplicationCommandManager* commandManager) throw(); | |||||
| explicit KeyPressMappingSet (ApplicationCommandManager* commandManager) throw(); | |||||
| /** Creates an copy of a KeyPressMappingSet. */ | /** Creates an copy of a KeyPressMappingSet. */ | ||||
| KeyPressMappingSet (const KeyPressMappingSet& other) throw(); | KeyPressMappingSet (const KeyPressMappingSet& other) throw(); | ||||
| @@ -47,7 +47,7 @@ public: | |||||
| Once created, add some tabs with the addTab() method. | Once created, add some tabs with the addTab() method. | ||||
| */ | */ | ||||
| TabbedComponent (const TabbedButtonBar::Orientation orientation); | |||||
| explicit TabbedComponent (const TabbedButtonBar::Orientation orientation); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~TabbedComponent(); | ~TabbedComponent(); | ||||
| @@ -53,7 +53,7 @@ public: | |||||
| The viewport is initially empty - use the setViewedComponent() method to | The viewport is initially empty - use the setViewedComponent() method to | ||||
| add a child component for it to manage. | add a child component for it to manage. | ||||
| */ | */ | ||||
| Viewport (const String& componentName = String::empty); | |||||
| explicit Viewport (const String& componentName = String::empty); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~Viewport(); | ~Viewport(); | ||||
| @@ -106,7 +106,7 @@ public: | |||||
| The fill colour is used to fill the lasso'ed rectangle, and the outline | The fill colour is used to fill the lasso'ed rectangle, and the outline | ||||
| colour is used to draw a line around its edge. | colour is used to draw a line around its edge. | ||||
| */ | */ | ||||
| LassoComponent (const int outlineThickness_ = 1) | |||||
| explicit LassoComponent (const int outlineThickness_ = 1) | |||||
| : source (0), | : source (0), | ||||
| outlineThickness (outlineThickness_) | outlineThickness (outlineThickness_) | ||||
| { | { | ||||
| @@ -56,7 +56,7 @@ public: | |||||
| the browser using resources in the background when it's not | the browser using resources in the background when it's not | ||||
| actually being used. | actually being used. | ||||
| */ | */ | ||||
| WebBrowserComponent (bool unloadPageWhenBrowserIsHidden = true); | |||||
| explicit WebBrowserComponent (bool unloadPageWhenBrowserIsHidden = true); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~WebBrowserComponent(); | ~WebBrowserComponent(); | ||||
| @@ -67,8 +67,8 @@ public: | |||||
| @see TooltipClient, LookAndFeel::drawTooltip, LookAndFeel::getTooltipSize | @see TooltipClient, LookAndFeel::drawTooltip, LookAndFeel::getTooltipSize | ||||
| */ | */ | ||||
| TooltipWindow (Component* parentComponent = 0, | |||||
| int millisecondsBeforeTipAppears = 700); | |||||
| explicit TooltipWindow (Component* parentComponent = 0, | |||||
| int millisecondsBeforeTipAppears = 700); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~TooltipWindow(); | ~TooltipWindow(); | ||||
| @@ -546,6 +546,10 @@ public: | |||||
| { | { | ||||
| } | } | ||||
| //============================================================================== | |||||
| /** The indexes of the different components in the byte layout of this type of colour. */ | |||||
| enum { indexA = 0 }; | |||||
| private: | private: | ||||
| //============================================================================== | //============================================================================== | ||||
| uint8 a : 8; | uint8 a : 8; | ||||
| @@ -64,7 +64,7 @@ public: | |||||
| Obviously you shouldn't delete the image before this context is deleted. | Obviously you shouldn't delete the image before this context is deleted. | ||||
| */ | */ | ||||
| Graphics (Image& imageToDrawOnto) throw(); | |||||
| explicit Graphics (Image& imageToDrawOnto) throw(); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~Graphics() throw(); | ~Graphics() throw(); | ||||
| @@ -586,11 +586,9 @@ public: | |||||
| y = y_; | y = y_; | ||||
| generate (scratchBuffer, x, width); | generate (scratchBuffer, x, width); | ||||
| const uint8* mask = reinterpret_cast <uint8*> (scratchBuffer.getData()); | |||||
| if (sizeof (SrcPixelType) == sizeof (PixelARGB)) | |||||
| mask += PixelARGB::indexA; | |||||
| et.clipLineToMask (x, y_, mask, sizeof (SrcPixelType), width); | |||||
| et.clipLineToMask (x, y_, | |||||
| reinterpret_cast<uint8*> (scratchBuffer.getData()) + SrcPixelType::indexA, | |||||
| sizeof (SrcPixelType), width); | |||||
| } | } | ||||
| private: | private: | ||||
| @@ -112,7 +112,7 @@ public: | |||||
| protected: | protected: | ||||
| String name; | String name; | ||||
| Typeface (const String& name) throw(); | |||||
| explicit Typeface (const String& name) throw(); | |||||
| private: | private: | ||||
| Typeface (const Typeface&); | Typeface (const Typeface&); | ||||
| @@ -141,7 +141,7 @@ public: | |||||
| The stream must have been created by writeToStream(). | The stream must have been created by writeToStream(). | ||||
| @see writeToStream | @see writeToStream | ||||
| */ | */ | ||||
| CustomTypeface (InputStream& serialisedTypefaceStream); | |||||
| explicit CustomTypeface (InputStream& serialisedTypefaceStream); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~CustomTypeface(); | ~CustomTypeface(); | ||||
| @@ -58,7 +58,7 @@ public: | |||||
| int rightGap) throw(); | int rightGap) throw(); | ||||
| /** Creates a border with the given gap on all sides. */ | /** Creates a border with the given gap on all sides. */ | ||||
| BorderSize (int allGaps) throw(); | |||||
| explicit BorderSize (int allGaps) throw(); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~BorderSize() throw(); | ~BorderSize() throw(); | ||||
| @@ -45,7 +45,7 @@ public: | |||||
| @param fileToRead the file to read from - if the file can't be accessed for some | @param fileToRead the file to read from - if the file can't be accessed for some | ||||
| reason, then the stream will just contain no data | reason, then the stream will just contain no data | ||||
| */ | */ | ||||
| FileInputStream (const File& fileToRead); | |||||
| explicit FileInputStream (const File& fileToRead); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~FileInputStream(); | ~FileInputStream(); | ||||
| @@ -108,35 +108,37 @@ int InputStream::readCompressedInt() | |||||
| int64 InputStream::readInt64() | int64 InputStream::readInt64() | ||||
| { | { | ||||
| char temp[8]; | |||||
| union { uint8 asBytes[8]; uint64 asInt64; } n; | |||||
| if (read (temp, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfBigEndian (*reinterpret_cast <uint64*> (temp)); | |||||
| if (read (n.asBytes, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfBigEndian (n.asInt64); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| int64 InputStream::readInt64BigEndian() | int64 InputStream::readInt64BigEndian() | ||||
| { | { | ||||
| char temp[8]; | |||||
| union { uint8 asBytes[8]; uint64 asInt64; } n; | |||||
| if (read (temp, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfLittleEndian (*reinterpret_cast <uint64*> (temp)); | |||||
| if (read (n.asBytes, 8) == 8) | |||||
| return (int64) ByteOrder::swapIfLittleEndian (n.asInt64); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| float InputStream::readFloat() | float InputStream::readFloat() | ||||
| { | { | ||||
| union { int asInt; float asFloat; } n; | |||||
| n.asInt = readInt(); | |||||
| // the union below relies on these types being the same size... | |||||
| static_jassert (sizeof (int32) == sizeof (float)); | |||||
| union { int32 asInt; float asFloat; } n; | |||||
| n.asInt = (int32) readInt(); | |||||
| return n.asFloat; | return n.asFloat; | ||||
| } | } | ||||
| float InputStream::readFloatBigEndian() | float InputStream::readFloatBigEndian() | ||||
| { | { | ||||
| union { int asInt; float asFloat; } n; | |||||
| n.asInt = readIntBigEndian(); | |||||
| union { int32 asInt; float asFloat; } n; | |||||
| n.asInt = (int32) readIntBigEndian(); | |||||
| return n.asFloat; | return n.asFloat; | ||||
| } | } | ||||
| @@ -234,7 +234,7 @@ public: | |||||
| if (isInterleaved) | if (isInterleaved) | ||||
| { | { | ||||
| scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | ||||
| float* interleaved = reinterpret_cast <float*> (scratch.getData()); | |||||
| float* interleaved = static_cast <float*> (scratch.getData()); | |||||
| AudioDataConverters::interleaveSamples ((const float**) data, interleaved, numSamples, numChannelsRunning); | AudioDataConverters::interleaveSamples ((const float**) data, interleaved, numSamples, numChannelsRunning); | ||||
| AudioDataConverters::convertFloatToFormat (sampleFormat, interleaved, interleaved, numSamples * numChannelsRunning); | AudioDataConverters::convertFloatToFormat (sampleFormat, interleaved, interleaved, numSamples * numChannelsRunning); | ||||
| @@ -272,7 +272,7 @@ public: | |||||
| if (isInterleaved) | if (isInterleaved) | ||||
| { | { | ||||
| scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | scratch.ensureSize (sizeof (float) * numSamples * numChannelsRunning, false); | ||||
| float* interleaved = reinterpret_cast <float*> (scratch.getData()); | |||||
| float* interleaved = static_cast <float*> (scratch.getData()); | |||||
| snd_pcm_sframes_t num = snd_pcm_readi (handle, (void*) interleaved, numSamples); | snd_pcm_sframes_t num = snd_pcm_readi (handle, (void*) interleaved, numSamples); | ||||
| @@ -1114,15 +1114,15 @@ public: | |||||
| const int width = image.getWidth(); | const int width = image.getWidth(); | ||||
| const int height = image.getHeight(); | const int height = image.getHeight(); | ||||
| HeapBlock <uint32> colour (width * height); | |||||
| HeapBlock <char> colour (width * height); | |||||
| int index = 0; | int index = 0; | ||||
| for (int y = 0; y < height; ++y) | for (int y = 0; y < height; ++y) | ||||
| for (int x = 0; x < width; ++x) | for (int x = 0; x < width; ++x) | ||||
| colour[index++] = image.getPixelAt (x, y).getARGB(); | |||||
| colour[index++] = static_cast<char> (image.getPixelAt (x, y).getARGB()); | |||||
| XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap, | ||||
| 0, reinterpret_cast<char*> (colour.getData()), | |||||
| 0, colour.getData(), | |||||
| width, height, 32, 0); | width, height, 32, 0); | ||||
| Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display), | ||||
| @@ -1142,7 +1142,7 @@ public: | |||||
| const int width = image.getWidth(); | const int width = image.getWidth(); | ||||
| const int height = image.getHeight(); | const int height = image.getHeight(); | ||||
| const int stride = (width + 7) >> 3; | const int stride = (width + 7) >> 3; | ||||
| HeapBlock <uint8> mask; | |||||
| HeapBlock <char> mask; | |||||
| mask.calloc (stride * height); | mask.calloc (stride * height); | ||||
| const bool msbfirst = (BitmapBitOrder (display) == MSBFirst); | const bool msbfirst = (BitmapBitOrder (display) == MSBFirst); | ||||
| @@ -1150,7 +1150,7 @@ public: | |||||
| { | { | ||||
| for (int x = 0; x < width; ++x) | for (int x = 0; x < width; ++x) | ||||
| { | { | ||||
| const uint8 bit = (uint8) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const char bit = (char) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const int offset = y * stride + (x >> 3); | const int offset = y * stride + (x >> 3); | ||||
| if (image.getPixelAt (x, y).getAlpha() >= 128) | if (image.getPixelAt (x, y).getAlpha() >= 128) | ||||
| @@ -1159,7 +1159,7 @@ public: | |||||
| } | } | ||||
| return XCreatePixmapFromBitmapData (display, DefaultRootWindow (display), | return XCreatePixmapFromBitmapData (display, DefaultRootWindow (display), | ||||
| reinterpret_cast<char*> (mask.getData()), width, height, 1, 0, 1); | |||||
| mask.getData(), width, height, 1, 0, 1); | |||||
| } | } | ||||
| void setIcon (const Image& newIcon) | void setIcon (const Image& newIcon) | ||||
| @@ -3027,7 +3027,7 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| } | } | ||||
| const int stride = (cursorW + 7) >> 3; | const int stride = (cursorW + 7) >> 3; | ||||
| HeapBlock <uint8> maskPlane, sourcePlane; | |||||
| HeapBlock <char> maskPlane, sourcePlane; | |||||
| maskPlane.calloc (stride * cursorH); | maskPlane.calloc (stride * cursorH); | ||||
| sourcePlane.calloc (stride * cursorH); | sourcePlane.calloc (stride * cursorH); | ||||
| @@ -3037,7 +3037,7 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| { | { | ||||
| for (int x = cursorW; --x >= 0;) | for (int x = cursorW; --x >= 0;) | ||||
| { | { | ||||
| const uint8 mask = (uint8) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const char mask = (char) (1 << (msbfirst ? (7 - (x & 7)) : (x & 7))); | |||||
| const int offset = y * stride + (x >> 3); | const int offset = y * stride + (x >> 3); | ||||
| const Colour c (im.getPixelAt (x, y)); | const Colour c (im.getPixelAt (x, y)); | ||||
| @@ -3050,8 +3050,8 @@ void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hot | |||||
| } | } | ||||
| } | } | ||||
| Pixmap sourcePixmap = XCreatePixmapFromBitmapData (display, root, reinterpret_cast <char*> (sourcePlane.getData()), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap maskPixmap = XCreatePixmapFromBitmapData (display, root, reinterpret_cast <char*> (maskPlane.getData()), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap sourcePixmap = XCreatePixmapFromBitmapData (display, root, sourcePlane.getData(), cursorW, cursorH, 0xffff, 0, 1); | |||||
| Pixmap maskPixmap = XCreatePixmapFromBitmapData (display, root, maskPlane.getData(), cursorW, cursorH, 0xffff, 0, 1); | |||||
| XColor white, black; | XColor white, black; | ||||
| black.red = black.green = black.blue = 0; | black.red = black.green = black.blue = 0; | ||||
| @@ -161,7 +161,7 @@ static const String getConnectedEndpointName (MIDIEndpointRef endpoint) | |||||
| if (s.isNotEmpty()) | if (s.isNotEmpty()) | ||||
| { | { | ||||
| if (result.isNotEmpty()) | if (result.isNotEmpty()) | ||||
| result += (", "); | |||||
| result += ", "; | |||||
| result += s; | result += s; | ||||
| } | } | ||||
| @@ -213,7 +213,7 @@ void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* call | |||||
| static BOOL CALLBACK BroadcastEnumWindowProc (HWND hwnd, LPARAM lParam) | static BOOL CALLBACK BroadcastEnumWindowProc (HWND hwnd, LPARAM lParam) | ||||
| { | { | ||||
| if (hwnd != juce_messageWindowHandle) | if (hwnd != juce_messageWindowHandle) | ||||
| (reinterpret_cast <VoidArray*> (lParam))->add ((void*) hwnd); | |||||
| reinterpret_cast <VoidArray*> (lParam)->add ((void*) hwnd); | |||||
| return TRUE; | return TRUE; | ||||
| } | } | ||||
| @@ -138,10 +138,10 @@ public: | |||||
| static StringHolder empty; | static StringHolder empty; | ||||
| private: | private: | ||||
| static inline StringHolder* bufferFromText (juce_wchar* const text) throw() | |||||
| static inline StringHolder* bufferFromText (void* const text) throw() | |||||
| { | { | ||||
| // (Can't use offsetof() here because of warnings about this not being a POD) | // (Can't use offsetof() here because of warnings about this not being a POD) | ||||
| return reinterpret_cast <StringHolder*> (reinterpret_cast <char*> (text) | |||||
| return reinterpret_cast <StringHolder*> (static_cast <char*> (text) | |||||
| - (reinterpret_cast <size_t> (reinterpret_cast <StringHolder*> (1)->text) - 1)); | - (reinterpret_cast <size_t> (reinterpret_cast <StringHolder*> (1)->text) - 1)); | ||||
| } | } | ||||
| }; | }; | ||||
| @@ -1364,9 +1364,7 @@ const String String::substring (int start, int end) const | |||||
| return empty; | return empty; | ||||
| int len = 0; | int len = 0; | ||||
| const juce_wchar* const t = text; | |||||
| while (len <= end && t [len] != 0) | |||||
| while (len <= end && text [len] != 0) | |||||
| ++len; | ++len; | ||||
| if (end >= len) | if (end >= len) | ||||
| @@ -1389,8 +1387,8 @@ const String String::substring (const int start) const | |||||
| if (start >= len) | if (start >= len) | ||||
| return empty; | return empty; | ||||
| else | |||||
| return String (text + start, len - start); | |||||
| return String (text + start, len - start); | |||||
| } | } | ||||
| const String String::dropLastCharacters (const int numberToDrop) const | const String String::dropLastCharacters (const int numberToDrop) const | ||||
| @@ -1409,11 +1407,10 @@ const String String::fromFirstOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? indexOfIgnoreCase (sub) | const int i = ignoreCase ? indexOfIgnoreCase (sub) | ||||
| : indexOf (sub); | : indexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return empty; | return empty; | ||||
| else | |||||
| return substring (includeSubString ? i : i + sub.length()); | |||||
| return substring (includeSubString ? i : i + sub.length()); | |||||
| } | } | ||||
| const String String::fromLastOccurrenceOf (const String& sub, | const String String::fromLastOccurrenceOf (const String& sub, | ||||
| @@ -1422,7 +1419,6 @@ const String String::fromLastOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) | const int i = ignoreCase ? lastIndexOfIgnoreCase (sub) | ||||
| : lastIndexOf (sub); | : lastIndexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return *this; | return *this; | ||||
| @@ -1435,7 +1431,6 @@ const String String::upToFirstOccurrenceOf (const String& sub, | |||||
| { | { | ||||
| const int i = ignoreCase ? indexOfIgnoreCase (sub) | const int i = ignoreCase ? indexOfIgnoreCase (sub) | ||||
| : indexOf (sub); | : indexOf (sub); | ||||
| if (i < 0) | if (i < 0) | ||||
| return *this; | return *this; | ||||
| @@ -1517,8 +1512,8 @@ const String String::trim() const | |||||
| return empty; | return empty; | ||||
| else if (start > 0 || end < len) | else if (start > 0 || end < len) | ||||
| return String (text + start, end - start); | return String (text + start, end - start); | ||||
| else | |||||
| return *this; | |||||
| return *this; | |||||
| } | } | ||||
| const String String::trimStart() const | const String String::trimStart() const | ||||
| @@ -1533,8 +1528,8 @@ const String String::trimStart() const | |||||
| if (t == text) | if (t == text) | ||||
| return *this; | return *this; | ||||
| else | |||||
| return String (t); | |||||
| return String (t); | |||||
| } | } | ||||
| const String String::trimEnd() const | const String String::trimEnd() const | ||||
| @@ -1552,9 +1547,6 @@ const String String::trimEnd() const | |||||
| const String String::trimCharactersAtStart (const String& charactersToTrim) const | const String String::trimCharactersAtStart (const String& charactersToTrim) const | ||||
| { | { | ||||
| if (isEmpty()) | |||||
| return empty; | |||||
| const juce_wchar* t = text; | const juce_wchar* t = text; | ||||
| while (charactersToTrim.containsChar (*t)) | while (charactersToTrim.containsChar (*t)) | ||||
| @@ -1562,8 +1554,8 @@ const String String::trimCharactersAtStart (const String& charactersToTrim) cons | |||||
| if (t == text) | if (t == text) | ||||
| return *this; | return *this; | ||||
| else | |||||
| return String (t); | |||||
| return String (t); | |||||
| } | } | ||||
| const String String::trimCharactersAtEnd (const String& charactersToTrim) const | const String String::trimCharactersAtEnd (const String& charactersToTrim) const | ||||
| @@ -1624,7 +1616,17 @@ const String String::removeCharacters (const String& charactersToRemove) const | |||||
| const String String::initialSectionContainingOnly (const String& permittedCharacters) const | const String String::initialSectionContainingOnly (const String& permittedCharacters) const | ||||
| { | { | ||||
| return substring (0, CharacterFunctions::getIntialSectionContainingOnly (text, permittedCharacters.text)); | |||||
| int i = 0; | |||||
| for (;;) | |||||
| { | |||||
| if (! permittedCharacters.containsChar (text[i])) | |||||
| break; | |||||
| ++i; | |||||
| } | |||||
| return substring (0, i); | |||||
| } | } | ||||
| const String String::initialSectionNotContaining (const String& charactersToStopAt) const | const String String::initialSectionNotContaining (const String& charactersToStopAt) const | ||||
| @@ -1940,7 +1942,7 @@ const char* String::toUTF8() const | |||||
| String* const mutableThis = const_cast <String*> (this); | String* const mutableThis = const_cast <String*> (this); | ||||
| mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, currentLen + 1 + utf8BytesNeeded / sizeof (juce_wchar)); | mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, currentLen + 1 + utf8BytesNeeded / sizeof (juce_wchar)); | ||||
| char* const otherCopy = (char*) (text + currentLen); | |||||
| char* const otherCopy = reinterpret_cast <char*> (text + currentLen); | |||||
| copyToUTF8 (otherCopy, std::numeric_limits<int>::max()); | copyToUTF8 (otherCopy, std::numeric_limits<int>::max()); | ||||
| return otherCopy; | return otherCopy; | ||||
| @@ -2128,12 +2130,11 @@ const char* String::toCString() const | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| int len = length(); | |||||
| const int len = length(); | |||||
| String* const mutableThis = const_cast <String*> (this); | String* const mutableThis = const_cast <String*> (this); | ||||
| mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, (len + 1) * 2); | mutableThis->text = StringHolder::makeUniqueWithSize (mutableThis->text, (len + 1) * 2); | ||||
| char* otherCopy = (char*) (text + len + 1); | |||||
| char* otherCopy = reinterpret_cast <char*> (text + len + 1); | |||||
| CharacterFunctions::copy (otherCopy, text, len); | CharacterFunctions::copy (otherCopy, text, len); | ||||
| otherCopy [len] = 0; | otherCopy [len] = 0; | ||||
| return otherCopy; | return otherCopy; | ||||
| @@ -145,7 +145,7 @@ class JUCE_API XmlElement | |||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| /** Creates an XmlElement with this tag name. */ | /** Creates an XmlElement with this tag name. */ | ||||
| XmlElement (const String& tagName) throw(); | |||||
| explicit XmlElement (const String& tagName) throw(); | |||||
| /** Creates a (deep) copy of another element. */ | /** Creates a (deep) copy of another element. */ | ||||
| XmlElement (const XmlElement& other) throw(); | XmlElement (const XmlElement& other) throw(); | ||||
| @@ -43,7 +43,7 @@ public: | |||||
| @param name a name that processes will use to identify this lock object | @param name a name that processes will use to identify this lock object | ||||
| */ | */ | ||||
| InterProcessLock (const String& name); | |||||
| explicit InterProcessLock (const String& name); | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -91,6 +91,12 @@ public: | |||||
| /** Returns true if this process is being hosted by a debugger. | /** Returns true if this process is being hosted by a debugger. | ||||
| */ | */ | ||||
| static bool JUCE_CALLTYPE isRunningUnderDebugger(); | static bool JUCE_CALLTYPE isRunningUnderDebugger(); | ||||
| private: | |||||
| Process(); | |||||
| Process (const Process&); | |||||
| Process& operator= (const Process&); | |||||
| }; | }; | ||||
| @@ -66,7 +66,7 @@ public: | |||||
| otherwise there are no guarantees what will happen! Best just to use it | 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. | as a local stack object, rather than creating one with the new() operator. | ||||
| */ | */ | ||||
| inline ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } | |||||
| inline explicit ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -75,7 +75,7 @@ public: | |||||
| Make sure this object is created and deleted by the same thread, | Make sure this object is created and deleted by the same thread, | ||||
| otherwise there are no guarantees what will happen! | otherwise there are no guarantees what will happen! | ||||
| */ | */ | ||||
| inline ~ScopedLock() throw() { lock_.exit(); } | |||||
| inline ~ScopedLock() throw() { lock_.exit(); } | |||||
| private: | private: | ||||
| @@ -139,7 +139,7 @@ public: | |||||
| otherwise there are no guarantees what will happen! Best just to use it | 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. | as a local stack object, rather than creating one with the new() operator. | ||||
| */ | */ | ||||
| inline ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } | |||||
| inline explicit ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -148,7 +148,7 @@ public: | |||||
| Make sure this object is created and deleted by the same thread, | Make sure this object is created and deleted by the same thread, | ||||
| otherwise there are no guarantees what will happen! | otherwise there are no guarantees what will happen! | ||||
| */ | */ | ||||
| inline ~ScopedUnlock() throw() { lock_.enter(); } | |||||
| inline ~ScopedUnlock() throw() { lock_.enter(); } | |||||
| private: | private: | ||||
| @@ -66,7 +66,7 @@ public: | |||||
| otherwise there are no guarantees what will happen! Best just to use it | 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. | as a local stack object, rather than creating one with the new() operator. | ||||
| */ | */ | ||||
| inline ScopedReadLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterRead(); } | |||||
| inline explicit ScopedReadLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterRead(); } | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -75,7 +75,7 @@ public: | |||||
| Make sure this object is created and deleted by the same thread, | Make sure this object is created and deleted by the same thread, | ||||
| otherwise there are no guarantees what will happen! | otherwise there are no guarantees what will happen! | ||||
| */ | */ | ||||
| inline ~ScopedReadLock() throw() { lock_.exitRead(); } | |||||
| inline ~ScopedReadLock() throw() { lock_.exitRead(); } | |||||
| private: | private: | ||||
| @@ -75,7 +75,7 @@ public: | |||||
| otherwise there are no guarantees what will happen! Best just to use it | 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. | as a local stack object, rather than creating one with the new() operator. | ||||
| */ | */ | ||||
| inline ScopedTryLock (const CriticalSection& lock) throw() : lock_ (lock), lockWasSuccessful (lock.tryEnter()) {} | |||||
| inline explicit ScopedTryLock (const CriticalSection& lock) throw() : lock_ (lock), lockWasSuccessful (lock.tryEnter()) {} | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -84,13 +84,13 @@ public: | |||||
| Make sure this object is created and deleted by the same thread, | Make sure this object is created and deleted by the same thread, | ||||
| otherwise there are no guarantees what will happen! | otherwise there are no guarantees what will happen! | ||||
| */ | */ | ||||
| inline ~ScopedTryLock() throw() { if (lockWasSuccessful) lock_.exit(); } | |||||
| inline ~ScopedTryLock() throw() { if (lockWasSuccessful) lock_.exit(); } | |||||
| /** Lock state | /** Lock state | ||||
| @return True if the CriticalSection is locked. | @return True if the CriticalSection is locked. | ||||
| */ | */ | ||||
| bool isLocked() const throw() { return lockWasSuccessful; } | |||||
| bool isLocked() const throw() { return lockWasSuccessful; } | |||||
| private: | private: | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -66,7 +66,7 @@ public: | |||||
| otherwise there are no guarantees what will happen! Best just to use it | 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. | as a local stack object, rather than creating one with the new() operator. | ||||
| */ | */ | ||||
| inline ScopedWriteLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterWrite(); } | |||||
| inline explicit ScopedWriteLock (const ReadWriteLock& lock) throw() : lock_ (lock) { lock.enterWrite(); } | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -75,7 +75,7 @@ public: | |||||
| Make sure this object is created and deleted by the same thread, | Make sure this object is created and deleted by the same thread, | ||||
| otherwise there are no guarantees what will happen! | otherwise there are no guarantees what will happen! | ||||
| */ | */ | ||||
| inline ~ScopedWriteLock() throw() { lock_.exitWrite(); } | |||||
| inline ~ScopedWriteLock() throw() { lock_.exitWrite(); } | |||||
| private: | private: | ||||
| @@ -55,7 +55,7 @@ public: | |||||
| When first created, the thread is not running. Use the startThread() | When first created, the thread is not running. Use the startThread() | ||||
| method to start it. | method to start it. | ||||
| */ | */ | ||||
| Thread (const String& threadName); | |||||
| explicit Thread (const String& threadName); | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -200,6 +200,8 @@ public: | |||||
| This puts the thread to sleep until either the timeout period expires, or | This puts the thread to sleep until either the timeout period expires, or | ||||
| another thread calls the notify() method to wake it up. | another thread calls the notify() method to wake it up. | ||||
| A negative time-out value means that the method will wait indefinitely. | |||||
| @returns true if the event has been signalled, false if the timeout expires. | @returns true if the event has been signalled, false if the timeout expires. | ||||
| */ | */ | ||||
| bool wait (int timeOutMilliseconds) const; | bool wait (int timeOutMilliseconds) const; | ||||
| @@ -57,7 +57,7 @@ public: | |||||
| After creating your job, add it to a thread pool with ThreadPool::addJob(). | After creating your job, add it to a thread pool with ThreadPool::addJob(). | ||||
| */ | */ | ||||
| ThreadPoolJob (const String& name); | |||||
| explicit ThreadPoolJob (const String& name); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| virtual ~ThreadPoolJob(); | virtual ~ThreadPoolJob(); | ||||
| @@ -83,7 +83,7 @@ public: | |||||
| When first created, the thread is not running. Use the startThread() | When first created, the thread is not running. Use the startThread() | ||||
| method to start it. | method to start it. | ||||
| */ | */ | ||||
| TimeSliceThread (const String& threadName); | |||||
| explicit TimeSliceThread (const String& threadName); | |||||
| /** Destructor. | /** Destructor. | ||||
| @@ -55,7 +55,7 @@ public: | |||||
| } | } | ||||
| /** Creates a set based on an array of items. */ | /** Creates a set based on an array of items. */ | ||||
| SelectedItemSet (const Array <SelectableItemType>& items) | |||||
| explicit SelectedItemSet (const Array <SelectableItemType>& items) | |||||
| : selectedItems (items) | : selectedItems (items) | ||||
| { | { | ||||
| } | } | ||||