//----------------------------------------------------------------------------- // Project : SDK Core // // Category : SDK Core Interfaces // Filename : pluginterfaces/base/ibstream.h // Created by : Steinberg, 01/2004 // Description : Interface for reading/writing streams // //----------------------------------------------------------------------------- // 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 "funknown.h" namespace Steinberg { //------------------------------------------------------------------------ /** Base class for streams. \ingroup pluginBase - read/write binary data from/to stream - get/set stream read-write position (read and write position is the same) */ //------------------------------------------------------------------------ class IBStream: public FUnknown { public: enum IStreamSeekMode { kIBSeekSet = 0, ///< set absolute seek position kIBSeekCur, ///< set seek position relative to current position kIBSeekEnd ///< set seek position relative to stream end }; //------------------------------------------------------------------------ /** Reads binary data from stream. \param buffer : destination buffer \param numBytes : amount of bytes to be read \param numBytesRead : result - how many bytes have been read from stream (set to 0 if this is of no interest) */ virtual tresult PLUGIN_API read (void* buffer, int32 numBytes, int32* numBytesRead = 0) = 0; /** Writes binary data to stream. \param buffer : source buffer \param numBytes : amount of bytes to write \param numBytesWritten : result - how many bytes have been written to stream (set to 0 if this is of no interest) */ virtual tresult PLUGIN_API write (void* buffer, int32 numBytes, int32* numBytesWritten = 0) = 0; /** Sets stream read-write position. \param pos : new stream position (dependent on mode) \param mode : value of enum IStreamSeekMode \param result : new seek position (set to 0 if this is of no interest) */ virtual tresult PLUGIN_API seek (int64 pos, int32 mode, int64* result = 0) = 0; /** Gets current stream read-write position. \param pos : is assigned the current position if function succeeds */ virtual tresult PLUGIN_API tell (int64* pos) = 0; //------------------------------------------------------------------------ static const FUID iid; }; DECLARE_CLASS_IID (IBStream, 0xC3BF6EA2, 0x30994752, 0x9B6BF990, 0x1EE33E9B) //------------------------------------------------------------------------ /** Stream with a size. \ingroup pluginBase [extends IBStream] when stream type supports it (like file and memory stream) */ //------------------------------------------------------------------------ class ISizeableStream: public FUnknown { public: //------------------------------------------------------------------------ /** Return the stream size */ virtual tresult PLUGIN_API getStreamSize (int64& size) = 0; /** Set the steam size. File streams can only be resized if they are write enabled. */ virtual tresult PLUGIN_API setStreamSize (int64 size) = 0; //------------------------------------------------------------------------ static const FUID iid; }; DECLARE_CLASS_IID (ISizeableStream, 0x04F9549E, 0xE02F4E6E, 0x87E86A87, 0x47F4E17F) //------------------------------------------------------------------------ } // namespace Steinberg