60 lines
2.5 KiB
C++
60 lines
2.5 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Project : SDK Core
|
|
//
|
|
// Category : Common Classes
|
|
// Filename : public.sdk/source/common/memorystream.h
|
|
// Created by : Steinberg, 03/2008
|
|
// Description : IBStream Implementation for memory blocks
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// This file is part of a Steinberg SDK. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this distribution
|
|
// and at www.steinberg.net/sdklicenses.
|
|
// No part of the SDK, including this file, may be copied, modified, propagated,
|
|
// or distributed except according to the terms contained in the LICENSE file.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "pluginterfaces/base/ibstream.h"
|
|
|
|
namespace Steinberg {
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Memory based Stream for IBStream implementation (using malloc).
|
|
\ingroup sdkBase
|
|
*/
|
|
class MemoryStream : public IBStream
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------------
|
|
MemoryStream ();
|
|
MemoryStream (void* memory, TSize memorySize); ///< reuse a given memory without getting ownership
|
|
virtual ~MemoryStream ();
|
|
|
|
//---IBStream---------------------------------------
|
|
tresult PLUGIN_API read (void* buffer, int32 numBytes, int32* numBytesRead) SMTG_OVERRIDE;
|
|
tresult PLUGIN_API write (void* buffer, int32 numBytes, int32* numBytesWritten) SMTG_OVERRIDE;
|
|
tresult PLUGIN_API seek (int64 pos, int32 mode, int64* result) SMTG_OVERRIDE;
|
|
tresult PLUGIN_API tell (int64* pos) SMTG_OVERRIDE;
|
|
|
|
TSize getSize () const; ///< returns the current memory size
|
|
void setSize (TSize size); ///< set the memory size, a realloc will occur if memory already used
|
|
char* getData () const; ///< returns the memory pointer
|
|
char* detachData (); ///< returns the memory pointer and give up ownership
|
|
bool truncate (); ///< realloc to the current use memory size if needed
|
|
bool truncateToCursor (); ///< truncate memory at current cursor position
|
|
|
|
//------------------------------------------------------------------------
|
|
DECLARE_FUNKNOWN_METHODS
|
|
protected:
|
|
char* memory; // memory block
|
|
TSize memorySize; // size of the memory block
|
|
TSize size; // size of the stream
|
|
int64 cursor; // stream pointer
|
|
bool ownMemory; // stream has allocated memory itself
|
|
bool allocationError; // stream invalid
|
|
};
|
|
|
|
} // namespace
|