|
- //-----------------------------------------------------------------------------
- // 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
|