diff --git a/modules/juce_core/streams/juce_MemoryInputStream.cpp b/modules/juce_core/streams/juce_MemoryInputStream.cpp index 9f6a8dee97..cd7aa09e4d 100644 --- a/modules/juce_core/streams/juce_MemoryInputStream.cpp +++ b/modules/juce_core/streams/juce_MemoryInputStream.cpp @@ -28,7 +28,10 @@ MemoryInputStream::MemoryInputStream (const void* sourceData, size_t sourceDataS dataSize (sourceDataSize) { if (keepCopy) - createInternalCopy(); + { + internalCopy = MemoryBlock (sourceData, sourceDataSize); + data = internalCopy.getData(); + } } MemoryInputStream::MemoryInputStream (const MemoryBlock& sourceData, bool keepCopy) @@ -36,14 +39,16 @@ MemoryInputStream::MemoryInputStream (const MemoryBlock& sourceData, bool keepCo dataSize (sourceData.getSize()) { if (keepCopy) - createInternalCopy(); + { + internalCopy = sourceData; + data = internalCopy.getData(); + } } -void MemoryInputStream::createInternalCopy() +MemoryInputStream::MemoryInputStream (MemoryBlock&& source) + : internalCopy (std::move (source)) { - internalCopy.malloc (dataSize); - memcpy (internalCopy, data, dataSize); - data = internalCopy; + data = internalCopy.getData(); } MemoryInputStream::~MemoryInputStream() diff --git a/modules/juce_core/streams/juce_MemoryInputStream.h b/modules/juce_core/streams/juce_MemoryInputStream.h index fc08528f8d..01aef62aeb 100644 --- a/modules/juce_core/streams/juce_MemoryInputStream.h +++ b/modules/juce_core/streams/juce_MemoryInputStream.h @@ -62,6 +62,9 @@ public: MemoryInputStream (const MemoryBlock& data, bool keepInternalCopyOfData); + /** Creates a stream by moving from a MemoryBlock. */ + MemoryInputStream (MemoryBlock&& blockToTake); + /** Destructor. */ ~MemoryInputStream() override; @@ -83,9 +86,7 @@ private: //============================================================================== const void* data; size_t dataSize, position = 0; - HeapBlock internalCopy; - - void createInternalCopy(); + MemoryBlock internalCopy; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryInputStream) };