| @@ -5407,7 +5407,7 @@ void juce_CheckForDanglingStreams() | |||||
| }; | }; | ||||
| #endif | #endif | ||||
| OutputStream::OutputStream() throw() | |||||
| OutputStream::OutputStream() | |||||
| { | { | ||||
| #if JUCE_DEBUG | #if JUCE_DEBUG | ||||
| const ScopedLock sl (activeStreamLock); | const ScopedLock sl (activeStreamLock); | ||||
| @@ -5522,75 +5522,15 @@ void OutputStream::writeDoubleBigEndian (double value) | |||||
| void OutputStream::writeString (const String& text) | void OutputStream::writeString (const String& text) | ||||
| { | { | ||||
| // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind | |||||
| // if lots of large, persistent strings were to be written to streams). | |||||
| const int numBytes = text.getNumBytesAsUTF8() + 1; | const int numBytes = text.getNumBytesAsUTF8() + 1; | ||||
| HeapBlock <uint8> temp (numBytes); | HeapBlock <uint8> temp (numBytes); | ||||
| text.copyToUTF8 (temp, numBytes); | text.copyToUTF8 (temp, numBytes); | ||||
| write (temp, numBytes); | write (temp, numBytes); | ||||
| } | } | ||||
| void OutputStream::printf (const char* pf, ...) | |||||
| { | |||||
| unsigned int bufSize = 256; | |||||
| HeapBlock <char> buf (bufSize); | |||||
| for (;;) | |||||
| { | |||||
| va_list list; | |||||
| va_start (list, pf); | |||||
| const int num = CharacterFunctions::vprintf (buf, bufSize, pf, list); | |||||
| va_end (list); | |||||
| if (num > 0) | |||||
| { | |||||
| write (buf, num); | |||||
| break; | |||||
| } | |||||
| else if (num == 0) | |||||
| { | |||||
| break; | |||||
| } | |||||
| bufSize += 256; | |||||
| buf.malloc (bufSize); | |||||
| } | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const int number) | |||||
| { | |||||
| const String s (number); | |||||
| write (s.toUTF8(), s.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const double number) | |||||
| { | |||||
| const String s (number); | |||||
| write (s.toUTF8(), s.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const char character) | |||||
| { | |||||
| writeByte (character); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const char* const text) | |||||
| { | |||||
| write (text, (int) strlen (text)); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const String& text) | |||||
| { | |||||
| write (text.toUTF8(), text.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| void OutputStream::writeText (const String& text, | |||||
| const bool asUnicode, | |||||
| void OutputStream::writeText (const String& text, const bool asUnicode, | |||||
| const bool writeUnicodeHeaderBytes) | const bool writeUnicodeHeaderBytes) | ||||
| { | { | ||||
| if (asUnicode) | if (asUnicode) | ||||
| @@ -5643,8 +5583,7 @@ void OutputStream::writeText (const String& text, | |||||
| } | } | ||||
| } | } | ||||
| int OutputStream::writeFromInputStream (InputStream& source, | |||||
| int numBytesToWrite) | |||||
| int OutputStream::writeFromInputStream (InputStream& source, int numBytesToWrite) | |||||
| { | { | ||||
| if (numBytesToWrite < 0) | if (numBytesToWrite < 0) | ||||
| numBytesToWrite = 0x7fffffff; | numBytesToWrite = 0x7fffffff; | ||||
| @@ -5669,6 +5608,28 @@ int OutputStream::writeFromInputStream (InputStream& source, | |||||
| return numWritten; | return numWritten; | ||||
| } | } | ||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const int number) | |||||
| { | |||||
| return stream << String (number); | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const double number) | |||||
| { | |||||
| return stream << String (number); | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char character) | |||||
| { | |||||
| stream.writeByte (character); | |||||
| return stream; | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char* const text) | |||||
| { | |||||
| stream.write (text, (int) strlen (text)); | |||||
| return stream; | |||||
| } | |||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| /*** End of inlined file: juce_OutputStream.cpp ***/ | /*** End of inlined file: juce_OutputStream.cpp ***/ | ||||
| @@ -11141,6 +11102,17 @@ String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number) | |||||
| return string1 += String (number); | return string1 += String (number); | ||||
| } | } | ||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text) | |||||
| { | |||||
| // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind | |||||
| // if lots of large, persistent strings were to be written to streams). | |||||
| const int numBytes = text.getNumBytesAsUTF8(); | |||||
| HeapBlock <uint8> temp (numBytes); | |||||
| text.copyToUTF8 (temp, numBytes); | |||||
| stream.write (temp, numBytes); | |||||
| return stream; | |||||
| } | |||||
| int String::indexOfChar (const tchar character) const throw() | int String::indexOfChar (const tchar character) const throw() | ||||
| { | { | ||||
| const tchar* t = text->text; | const tchar* t = text->text; | ||||
| @@ -1062,6 +1062,8 @@ public: | |||||
| #endif // __JUCE_CHARACTERFUNCTIONS_JUCEHEADER__ | #endif // __JUCE_CHARACTERFUNCTIONS_JUCEHEADER__ | ||||
| /*** End of inlined file: juce_CharacterFunctions.h ***/ | /*** End of inlined file: juce_CharacterFunctions.h ***/ | ||||
| class OutputStream; | |||||
| class JUCE_API String | class JUCE_API String | ||||
| { | { | ||||
| public: | public: | ||||
| @@ -1408,12 +1410,6 @@ String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const unsigned long nu | |||||
| String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const float number); | String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const float number); | ||||
| String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number); | String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number); | ||||
| template <class charT, class traits> | |||||
| std::basic_ostream <charT, traits>& operator<< (std::basic_ostream <charT, traits>& stream, const String& stringToWrite) | |||||
| { | |||||
| return stream << stringToWrite.toUTF8(); | |||||
| } | |||||
| bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw(); | ||||
| bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const char* string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const char* string2) throw(); | ||||
| bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const juce_wchar* string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const juce_wchar* string2) throw(); | ||||
| @@ -1425,6 +1421,14 @@ bool JUCE_PUBLIC_FUNCTION operator< (const String& string1, const String& stri | |||||
| bool JUCE_PUBLIC_FUNCTION operator>= (const String& string1, const String& string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator>= (const String& string1, const String& string2) throw(); | ||||
| bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw(); | ||||
| template <class charT, class traits> | |||||
| std::basic_ostream <charT, traits>& operator<< (std::basic_ostream <charT, traits>& stream, const String& stringToWrite) | |||||
| { | |||||
| return stream << stringToWrite.toUTF8(); | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text); | |||||
| #endif // __JUCE_STRING_JUCEHEADER__ | #endif // __JUCE_STRING_JUCEHEADER__ | ||||
| /*** End of inlined file: juce_String.h ***/ | /*** End of inlined file: juce_String.h ***/ | ||||
| @@ -2793,6 +2797,10 @@ protected: | |||||
| class JUCE_API OutputStream | class JUCE_API OutputStream | ||||
| { | { | ||||
| protected: | |||||
| OutputStream(); | |||||
| public: | public: | ||||
| virtual ~OutputStream(); | virtual ~OutputStream(); | ||||
| @@ -2837,27 +2845,18 @@ public: | |||||
| const bool asUnicode, | const bool asUnicode, | ||||
| const bool writeUnicodeHeaderBytes); | const bool writeUnicodeHeaderBytes); | ||||
| virtual void printf (const char* format, ...); | |||||
| virtual int writeFromInputStream (InputStream& source, | |||||
| int maxNumBytesToWrite); | |||||
| virtual OutputStream& operator<< (const int number); | |||||
| virtual OutputStream& operator<< (const double number); | |||||
| virtual int writeFromInputStream (InputStream& source, int maxNumBytesToWrite); | |||||
| virtual OutputStream& operator<< (const char character); | |||||
| virtual OutputStream& operator<< (const char* const text); | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| virtual OutputStream& operator<< (const String& text); | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const int number); | |||||
| juce_UseDebuggingNewOperator | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const double number); | |||||
| protected: | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char character); | |||||
| OutputStream() throw(); | |||||
| }; | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char* const text); | |||||
| #endif // __JUCE_OUTPUTSTREAM_JUCEHEADER__ | #endif // __JUCE_OUTPUTSTREAM_JUCEHEADER__ | ||||
| /*** End of inlined file: juce_OutputStream.h ***/ | /*** End of inlined file: juce_OutputStream.h ***/ | ||||
| @@ -51,7 +51,7 @@ void juce_CheckForDanglingStreams() | |||||
| #endif | #endif | ||||
| //============================================================================== | //============================================================================== | ||||
| OutputStream::OutputStream() throw() | |||||
| OutputStream::OutputStream() | |||||
| { | { | ||||
| #if JUCE_DEBUG | #if JUCE_DEBUG | ||||
| const ScopedLock sl (activeStreamLock); | const ScopedLock sl (activeStreamLock); | ||||
| @@ -167,75 +167,15 @@ void OutputStream::writeDoubleBigEndian (double value) | |||||
| void OutputStream::writeString (const String& text) | void OutputStream::writeString (const String& text) | ||||
| { | { | ||||
| // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind | |||||
| // if lots of large, persistent strings were to be written to streams). | |||||
| const int numBytes = text.getNumBytesAsUTF8() + 1; | const int numBytes = text.getNumBytesAsUTF8() + 1; | ||||
| HeapBlock <uint8> temp (numBytes); | HeapBlock <uint8> temp (numBytes); | ||||
| text.copyToUTF8 (temp, numBytes); | text.copyToUTF8 (temp, numBytes); | ||||
| write (temp, numBytes); | write (temp, numBytes); | ||||
| } | } | ||||
| void OutputStream::printf (const char* pf, ...) | |||||
| { | |||||
| unsigned int bufSize = 256; | |||||
| HeapBlock <char> buf (bufSize); | |||||
| for (;;) | |||||
| { | |||||
| va_list list; | |||||
| va_start (list, pf); | |||||
| const int num = CharacterFunctions::vprintf (buf, bufSize, pf, list); | |||||
| va_end (list); | |||||
| if (num > 0) | |||||
| { | |||||
| write (buf, num); | |||||
| break; | |||||
| } | |||||
| else if (num == 0) | |||||
| { | |||||
| break; | |||||
| } | |||||
| bufSize += 256; | |||||
| buf.malloc (bufSize); | |||||
| } | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const int number) | |||||
| { | |||||
| const String s (number); | |||||
| write (s.toUTF8(), s.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const double number) | |||||
| { | |||||
| const String s (number); | |||||
| write (s.toUTF8(), s.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const char character) | |||||
| { | |||||
| writeByte (character); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const char* const text) | |||||
| { | |||||
| write (text, (int) strlen (text)); | |||||
| return *this; | |||||
| } | |||||
| OutputStream& OutputStream::operator<< (const String& text) | |||||
| { | |||||
| write (text.toUTF8(), text.getNumBytesAsUTF8()); | |||||
| return *this; | |||||
| } | |||||
| void OutputStream::writeText (const String& text, | |||||
| const bool asUnicode, | |||||
| void OutputStream::writeText (const String& text, const bool asUnicode, | |||||
| const bool writeUnicodeHeaderBytes) | const bool writeUnicodeHeaderBytes) | ||||
| { | { | ||||
| if (asUnicode) | if (asUnicode) | ||||
| @@ -288,8 +228,7 @@ void OutputStream::writeText (const String& text, | |||||
| } | } | ||||
| } | } | ||||
| int OutputStream::writeFromInputStream (InputStream& source, | |||||
| int numBytesToWrite) | |||||
| int OutputStream::writeFromInputStream (InputStream& source, int numBytesToWrite) | |||||
| { | { | ||||
| if (numBytesToWrite < 0) | if (numBytesToWrite < 0) | ||||
| numBytesToWrite = 0x7fffffff; | numBytesToWrite = 0x7fffffff; | ||||
| @@ -314,5 +253,28 @@ int OutputStream::writeFromInputStream (InputStream& source, | |||||
| return numWritten; | return numWritten; | ||||
| } | } | ||||
| //============================================================================== | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const int number) | |||||
| { | |||||
| return stream << String (number); | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const double number) | |||||
| { | |||||
| return stream << String (number); | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char character) | |||||
| { | |||||
| stream.writeByte (character); | |||||
| return stream; | |||||
| } | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char* const text) | |||||
| { | |||||
| stream.write (text, (int) strlen (text)); | |||||
| return stream; | |||||
| } | |||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| @@ -41,6 +41,10 @@ | |||||
| */ | */ | ||||
| class JUCE_API OutputStream | class JUCE_API OutputStream | ||||
| { | { | ||||
| protected: | |||||
| //============================================================================== | |||||
| OutputStream(); | |||||
| public: | public: | ||||
| /** Destructor. | /** Destructor. | ||||
| @@ -88,87 +92,69 @@ public: | |||||
| */ | */ | ||||
| virtual void writeByte (char byte); | virtual void writeByte (char byte); | ||||
| /** Writes a boolean to the stream. | |||||
| This is encoded as a byte - either 1 or 0. | |||||
| /** Writes a boolean to the stream as a single byte. | |||||
| This is encoded as a binary byte (not as text) with a value of 1 or 0. | |||||
| @see InputStream::readBool | @see InputStream::readBool | ||||
| */ | */ | ||||
| virtual void writeBool (bool boolValue); | virtual void writeBool (bool boolValue); | ||||
| /** Writes a 16-bit integer to the stream in a little-endian byte order. | /** Writes a 16-bit integer to the stream in a little-endian byte order. | ||||
| This will write two bytes to the stream: (value & 0xff), then (value >> 8). | This will write two bytes to the stream: (value & 0xff), then (value >> 8). | ||||
| @see InputStream::readShort | @see InputStream::readShort | ||||
| */ | */ | ||||
| virtual void writeShort (short value); | virtual void writeShort (short value); | ||||
| /** Writes a 16-bit integer to the stream in a big-endian byte order. | /** Writes a 16-bit integer to the stream in a big-endian byte order. | ||||
| This will write two bytes to the stream: (value >> 8), then (value & 0xff). | This will write two bytes to the stream: (value >> 8), then (value & 0xff). | ||||
| @see InputStream::readShortBigEndian | @see InputStream::readShortBigEndian | ||||
| */ | */ | ||||
| virtual void writeShortBigEndian (short value); | virtual void writeShortBigEndian (short value); | ||||
| /** Writes a 32-bit integer to the stream in a little-endian byte order. | /** Writes a 32-bit integer to the stream in a little-endian byte order. | ||||
| @see InputStream::readInt | @see InputStream::readInt | ||||
| */ | */ | ||||
| virtual void writeInt (int value); | virtual void writeInt (int value); | ||||
| /** Writes a 32-bit integer to the stream in a big-endian byte order. | /** Writes a 32-bit integer to the stream in a big-endian byte order. | ||||
| @see InputStream::readIntBigEndian | @see InputStream::readIntBigEndian | ||||
| */ | */ | ||||
| virtual void writeIntBigEndian (int value); | virtual void writeIntBigEndian (int value); | ||||
| /** Writes a 64-bit integer to the stream in a little-endian byte order. | /** Writes a 64-bit integer to the stream in a little-endian byte order. | ||||
| @see InputStream::readInt64 | @see InputStream::readInt64 | ||||
| */ | */ | ||||
| virtual void writeInt64 (int64 value); | virtual void writeInt64 (int64 value); | ||||
| /** Writes a 64-bit integer to the stream in a big-endian byte order. | /** Writes a 64-bit integer to the stream in a big-endian byte order. | ||||
| @see InputStream::readInt64BigEndian | @see InputStream::readInt64BigEndian | ||||
| */ | */ | ||||
| virtual void writeInt64BigEndian (int64 value); | virtual void writeInt64BigEndian (int64 value); | ||||
| /** Writes a 32-bit floating point value to the stream. | |||||
| /** Writes a 32-bit floating point value to the stream in a binary format. | |||||
| The binary 32-bit encoding of the float is written as a little-endian int. | The binary 32-bit encoding of the float is written as a little-endian int. | ||||
| @see InputStream::readFloat | @see InputStream::readFloat | ||||
| */ | */ | ||||
| virtual void writeFloat (float value); | virtual void writeFloat (float value); | ||||
| /** Writes a 32-bit floating point value to the stream. | |||||
| /** Writes a 32-bit floating point value to the stream in a binary format. | |||||
| The binary 32-bit encoding of the float is written as a big-endian int. | The binary 32-bit encoding of the float is written as a big-endian int. | ||||
| @see InputStream::readFloatBigEndian | @see InputStream::readFloatBigEndian | ||||
| */ | */ | ||||
| virtual void writeFloatBigEndian (float value); | virtual void writeFloatBigEndian (float value); | ||||
| /** Writes a 64-bit floating point value to the stream. | |||||
| /** Writes a 64-bit floating point value to the stream in a binary format. | |||||
| The eight raw bytes of the double value are written out as a little-endian 64-bit int. | The eight raw bytes of the double value are written out as a little-endian 64-bit int. | ||||
| @see InputStream::readDouble | @see InputStream::readDouble | ||||
| */ | */ | ||||
| virtual void writeDouble (double value); | virtual void writeDouble (double value); | ||||
| /** Writes a 64-bit floating point value to the stream. | |||||
| /** Writes a 64-bit floating point value to the stream in a binary format. | |||||
| The eight raw bytes of the double value are written out as a big-endian 64-bit int. | The eight raw bytes of the double value are written out as a big-endian 64-bit int. | ||||
| @see InputStream::readDoubleBigEndian | @see InputStream::readDoubleBigEndian | ||||
| */ | */ | ||||
| virtual void writeDoubleBigEndian (double value); | virtual void writeDoubleBigEndian (double value); | ||||
| /** Writes a condensed encoding of a 32-bit integer. | |||||
| /** Writes a condensed binary encoding of a 32-bit integer. | |||||
| If you're storing a lot of integers which are unlikely to have very large values, | If you're storing a lot of integers which are unlikely to have very large values, | ||||
| this can save a lot of space, because values under 0xff will only take up 2 bytes, | this can save a lot of space, because values under 0xff will only take up 2 bytes, | ||||
| @@ -180,23 +166,23 @@ public: | |||||
| */ | */ | ||||
| virtual void writeCompressedInt (int value); | virtual void writeCompressedInt (int value); | ||||
| /** Stores a string in the stream. | |||||
| /** Stores a string in the stream in a binary format. | |||||
| This isn't the method to use if you're trying to append text to the end of a | This isn't the method to use if you're trying to append text to the end of a | ||||
| text-file! It's intended for storing a string for later retrieval | |||||
| by InputStream::readString. | |||||
| text-file! It's intended for storing a string so that it can be retrieved later | |||||
| by InputStream::readString(). | |||||
| It writes the string to the stream as UTF8, with a null character terminating it. | |||||
| It writes the string to the stream as UTF8, including the null termination character. | |||||
| For appending text to a file, instead use writeText, printf, or operator<< | |||||
| For appending text to a file, instead use writeText, or operator<< | |||||
| @see InputStream::readString, writeText, printf, operator<< | |||||
| @see InputStream::readString, writeText, operator<< | |||||
| */ | */ | ||||
| virtual void writeString (const String& text); | virtual void writeString (const String& text); | ||||
| /** Writes a string of text to the stream. | /** Writes a string of text to the stream. | ||||
| It can either write it as 8-bit system-encoded characters, or as unicode, and | |||||
| It can either write it as UTF8 characters or as unicode, and | |||||
| can also add unicode header bytes (0xff, 0xfe) to indicate the endianness (this | can also add unicode header bytes (0xff, 0xfe) to indicate the endianness (this | ||||
| should only be done at the start of a file). | should only be done at the start of a file). | ||||
| @@ -206,12 +192,6 @@ public: | |||||
| const bool asUnicode, | const bool asUnicode, | ||||
| const bool writeUnicodeHeaderBytes); | const bool writeUnicodeHeaderBytes); | ||||
| /** Writes a string of text to the stream. | |||||
| @see writeText | |||||
| */ | |||||
| virtual void printf (const char* format, ...); | |||||
| /** Reads data from an input stream and writes it to this stream. | /** Reads data from an input stream and writes it to this stream. | ||||
| @param source the stream to read from | @param source the stream to read from | ||||
| @@ -219,32 +199,25 @@ public: | |||||
| less than zero, it will keep reading until the input | less than zero, it will keep reading until the input | ||||
| is exhausted) | is exhausted) | ||||
| */ | */ | ||||
| virtual int writeFromInputStream (InputStream& source, | |||||
| int maxNumBytesToWrite); | |||||
| virtual int writeFromInputStream (InputStream& source, int maxNumBytesToWrite); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Writes a number to the stream as 8-bit characters in the default system encoding. */ | |||||
| virtual OutputStream& operator<< (const int number); | |||||
| /** Writes a number to the stream as 8-bit characters in the default system encoding. */ | |||||
| virtual OutputStream& operator<< (const double number); | |||||
| juce_UseDebuggingNewOperator | |||||
| }; | |||||
| /** Writes a character to the stream. */ | |||||
| virtual OutputStream& operator<< (const char character); | |||||
| //============================================================================== | |||||
| /** Writes a number to a stream as 8-bit characters in the default system encoding. */ | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const int number); | |||||
| /** Writes a null-terminated string to the stream. */ | |||||
| virtual OutputStream& operator<< (const char* const text); | |||||
| /** Writes a number to a stream as 8-bit characters in the default system encoding. */ | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const double number); | |||||
| /** Writes a null-terminated text string to the stream, converting it to UTF8. */ | |||||
| virtual OutputStream& operator<< (const String& text); | |||||
| /** Writes a character to a stream. */ | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char character); | |||||
| //============================================================================== | |||||
| juce_UseDebuggingNewOperator | |||||
| /** Writes a null-terminated text string to a stream. */ | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const char* const text); | |||||
| protected: | |||||
| //============================================================================== | |||||
| OutputStream() throw(); | |||||
| }; | |||||
| #endif // __JUCE_OUTPUTSTREAM_JUCEHEADER__ | #endif // __JUCE_OUTPUTSTREAM_JUCEHEADER__ | ||||
| @@ -39,6 +39,7 @@ BEGIN_JUCE_NAMESPACE | |||||
| #include "juce_String.h" | #include "juce_String.h" | ||||
| #include "../core/juce_Atomic.h" | #include "../core/juce_Atomic.h" | ||||
| #include "../io/streams/juce_OutputStream.h" | |||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||
| #pragma warning (pop) | #pragma warning (pop) | ||||
| @@ -771,6 +772,17 @@ String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number) | |||||
| return string1 += String (number); | return string1 += String (number); | ||||
| } | } | ||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text) | |||||
| { | |||||
| // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind | |||||
| // if lots of large, persistent strings were to be written to streams). | |||||
| const int numBytes = text.getNumBytesAsUTF8(); | |||||
| HeapBlock <uint8> temp (numBytes); | |||||
| text.copyToUTF8 (temp, numBytes); | |||||
| stream.write (temp, numBytes); | |||||
| return stream; | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| int String::indexOfChar (const tchar character) const throw() | int String::indexOfChar (const tchar character) const throw() | ||||
| { | { | ||||
| @@ -27,6 +27,7 @@ | |||||
| #define __JUCE_STRING_JUCEHEADER__ | #define __JUCE_STRING_JUCEHEADER__ | ||||
| #include "juce_CharacterFunctions.h" | #include "juce_CharacterFunctions.h" | ||||
| class OutputStream; | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -1090,6 +1091,7 @@ const String JUCE_PUBLIC_FUNCTION operator+ (String string1, char characterTo | |||||
| /** Concatenates two strings. */ | /** Concatenates two strings. */ | ||||
| const String JUCE_PUBLIC_FUNCTION operator+ (String string1, juce_wchar characterToAppend); | const String JUCE_PUBLIC_FUNCTION operator+ (String string1, juce_wchar characterToAppend); | ||||
| //============================================================================== | |||||
| /** Appends a character at the end of a string. */ | /** Appends a character at the end of a string. */ | ||||
| String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const char characterToAppend); | String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const char characterToAppend); | ||||
| /** Appends a character at the end of a string. */ | /** Appends a character at the end of a string. */ | ||||
| @@ -1116,15 +1118,7 @@ String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const float num | |||||
| /** Appends a decimal number at the end of a string. */ | /** Appends a decimal number at the end of a string. */ | ||||
| String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number); | String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number); | ||||
| /** This streaming override allows you to pass a juce String directly into std output streams. | |||||
| This is very handy for writing strings to std::cout, std::cerr, etc. | |||||
| */ | |||||
| template <class charT, class traits> | |||||
| std::basic_ostream <charT, traits>& operator<< (std::basic_ostream <charT, traits>& stream, const String& stringToWrite) | |||||
| { | |||||
| return stream << stringToWrite.toUTF8(); | |||||
| } | |||||
| //============================================================================== | |||||
| /** Case-sensitive comparison of two strings. */ | /** Case-sensitive comparison of two strings. */ | ||||
| bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw(); | ||||
| /** Case-sensitive comparison of two strings. */ | /** Case-sensitive comparison of two strings. */ | ||||
| @@ -1146,5 +1140,18 @@ bool JUCE_PUBLIC_FUNCTION operator>= (const String& string1, const String& stri | |||||
| /** Case-sensitive comparison of two strings. */ | /** Case-sensitive comparison of two strings. */ | ||||
| bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw(); | bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw(); | ||||
| //============================================================================== | |||||
| /** This streaming override allows you to pass a juce String directly into std output streams. | |||||
| This is very handy for writing strings to std::cout, std::cerr, etc. | |||||
| */ | |||||
| template <class charT, class traits> | |||||
| std::basic_ostream <charT, traits>& operator<< (std::basic_ostream <charT, traits>& stream, const String& stringToWrite) | |||||
| { | |||||
| return stream << stringToWrite.toUTF8(); | |||||
| } | |||||
| /** Writes a string to an OutputStream as UTF8. */ | |||||
| OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text); | |||||
| #endif // __JUCE_STRING_JUCEHEADER__ | #endif // __JUCE_STRING_JUCEHEADER__ | ||||