29struct DanglingStreamChecker
53bool DanglingStreamChecker::hasBeenDestroyed =
false;
54static DanglingStreamChecker danglingStreamChecker;
59OutputStream::OutputStream()
60 : newLineString (NewLine::getDefault())
63 if (! DanglingStreamChecker::hasBeenDestroyed)
64 danglingStreamChecker.activeStreams.add (
this);
68OutputStream::~OutputStream()
71 if (! DanglingStreamChecker::hasBeenDestroyed)
77bool OutputStream::writeBool (
bool b)
79 return writeByte (
b ? (
char) 1
83bool OutputStream::writeByte (
char byte)
85 return write (&
byte, 1);
91 if (! writeByte ((
char)
byte))
97bool OutputStream::writeShort (
short value)
99 auto v = ByteOrder::swapIfBigEndian ((
uint16) value);
100 return write (&v, 2);
103bool OutputStream::writeShortBigEndian (
short value)
105 auto v = ByteOrder::swapIfLittleEndian ((
uint16) value);
106 return write (&v, 2);
109bool OutputStream::writeInt (
int value)
111 auto v = ByteOrder::swapIfBigEndian ((
uint32) value);
112 return write (&v, 4);
115bool OutputStream::writeIntBigEndian (
int value)
117 auto v = ByteOrder::swapIfLittleEndian ((
uint32) value);
118 return write (&v, 4);
121bool OutputStream::writeCompressedInt (
int value)
123 auto un = (value < 0) ? (
unsigned int) -value
124 : (
unsigned int) value;
131 data[++
num] = (uint8)
un;
135 data[0] = (uint8)
num;
140 return write (data, (
size_t)
num + 1);
143bool OutputStream::writeInt64 (int64 value)
145 auto v = ByteOrder::swapIfBigEndian ((
uint64) value);
146 return write (&v, 8);
149bool OutputStream::writeInt64BigEndian (int64 value)
151 auto v = ByteOrder::swapIfLittleEndian ((
uint64) value);
152 return write (&v, 8);
155bool OutputStream::writeFloat (
float value)
159 return writeInt (n.asInt);
162bool OutputStream::writeFloatBigEndian (
float value)
166 return writeIntBigEndian (n.asInt);
169bool OutputStream::writeDouble (
double value)
173 return writeInt64 (n.asInt);
176bool OutputStream::writeDoubleBigEndian (
double value)
180 return writeInt64BigEndian (n.asInt);
183bool OutputStream::writeString (
const String& text)
187 #if (JUCE_STRING_UTF_TYPE == 8)
188 return write (text.
toRawUTF8(), numBytes);
194 return write (temp, numBytes);
209 write (
"\x0ff\x0fe", 2);
216 auto c =
src.getAndAdvance();
224 writeShort ((
short)
'\r');
233 if (! writeShort ((
short)
c))
248 if (! write (
src, (
size_t) (
t -
src)))
251 if (! write (
"\r\n", 2))
264 if (! write (
src, (
size_t) (
t -
src)))
311 write (buffer, (
size_t)
num);
327template <
typename IntegerType>
330 char buffer[NumberToStringConverters::charsNeededForInt];
331 char* end = buffer + numElementsInArray (buffer);
332 const char* start = NumberToStringConverters::numberToString (end,
number);
333 stream.
write (start, (
size_t) (end - start - 1));
336JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const int number)
338 writeIntToStream (stream, number);
342JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const int64 number)
344 writeIntToStream (stream, number);
348JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const double number)
350 return stream << String (number);
353JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const char character)
355 stream.writeByte (character);
359JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const char*
const text)
361 stream.write (text, strlen (text));
365JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const MemoryBlock& data)
367 if (data.getSize() > 0)
368 stream.write (data.getData(), data.getSize());
373JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const File& fileToRead)
375 FileInputStream in (fileToRead);
383JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, InputStream& streamToRead)
385 stream.writeFromInputStream (streamToRead, -1);
389JUCE_API OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream,
const NewLine&)
391 return stream << stream.getNewLineString();
void removeFirstMatchingValue(ParameterType valueToRemove)
virtual bool write(const void *dataToWrite, size_t numberOfBytes)=0
CharPointerType getCharPointer() const noexcept
const char * toRawUTF8() const
size_t getNumBytesAsUTF8() const noexcept
size_t copyToUTF8(CharPointer_UTF8::CharType *destBuffer, size_t maxBufferSizeBytes) const noexcept