|
Grok 20.3.2
|
Manages buffered read/write using callbacks or memory buffer. More...
#include <BufferedStream.h>
Public Member Functions | |
| BufferedStream (uint8_t *buffer, size_t initial_buffer_size, size_t buffer_size, bool is_input) | |
| Constructs a BufferedStream. | |
| ~BufferedStream () override | |
| Destroys a BufferedStream. | |
| IStream * | bifurcate (void) override |
| void | setFetcher (IFetcher *fetcher) |
| Sets the IFetcher. | |
| IFetcher * | getFetcher (void) override |
| Gets the IFetcher. | |
| void | setMemAdvisor (MemAdvisor *advisor) |
| void | memAdvise (size_t virtual_offset, size_t length, GrkAccessPattern pattern) override |
| void | setChunkBuffer (std::shared_ptr< ChunkBuffer<> > chunkBuffer) override |
| void | setUserData (void *data, grk_stream_free_user_data_fn freeUserDataFun, uint64_t len) override |
| Sets user data. | |
| void | setCallbacks (StreamCallbacks &callbacks) override |
| Sets callbacks. | |
| size_t | read (uint8_t *buffer, uint8_t **zero_copy_buffer, size_t len) override |
| Read bytes. | |
| bool | write24u (uint32_t value) override |
| Writes 3 bytes from uint32_t as big endian. | |
| bool | write8u (uint8_t value) override |
| Writes byte. | |
| size_t | writeBytes (const uint8_t *buffer, size_t len) override |
| Writes bytes to stream (no correction for endian!). | |
| bool | flush () override |
| Flushes stream to disk. | |
| bool | skip (int64_t len) override |
| Skips bytes in stream. | |
| uint64_t | tell (void) override |
| query byte offset of stream (similar to ftell). | |
| uint64_t | numBytesLeft (void) override |
| Gets the number of bytes left before end of stream. | |
| bool | seek (uint64_t offset) override |
| Seek bytes from the stream (absolute). | |
| bool | hasSeek () override |
| Checks if stream is seekable. | |
| bool | supportsZeroCopy () override |
| Checks is stream supports zero copy. | |
| void | setFormat (GRK_CODEC_FORMAT format) override |
| Stores codec format J2K/JP2/MJ2. | |
| GRK_CODEC_FORMAT | getFormat (void) override |
| Gets codec format (J2K/JP2/MJ2). | |
| uint8_t * | currPtr (void) override |
| Gets current pointer (used for zero copy). | |
| bool | isMemStream () override |
| Checks if stream is memory stream i.e. | |
| Public Member Functions inherited from grk::IStream | |
| virtual | ~IStream ()=default |
| Public Member Functions inherited from grk::t1_t2::IStreamWriter | |
| virtual | ~IStreamWriter ()=default |
| template<typename TYPE> | |
| bool | write (TYPE value) |
| Writes to stream. | |
Private Member Functions | |
| size_t | read (uint8_t *buffer, size_t len) |
| Reads bytes from stream. | |
| size_t | readDirect (uint8_t *buffer, size_t len) |
| Reads directly from callback. | |
| bool | writeSkip (int64_t len) |
| Skips bytes in write stream. | |
| bool | readSkip (int64_t len) |
| Skip bytes in read stream. | |
| bool | readSeek (uint64_t offset) |
| Performs absolute seek in read stream. | |
| bool | writeSeek (uint64_t offset) |
| Performs absolute seek in write stream. | |
| void | writeIncrement (size_t len) |
| bool | write_non_template (const uint8_t *value, uint8_t sizeOfType, uint8_t numBytes) override |
| void | invalidateBuffer () |
Private Attributes | |
| void * | userData_ = nullptr |
| user data | |
| grk_stream_free_user_data_fn | freeUserDataCallback_ |
| Pointer to function to free user_data_ (nullptr at initialization) when destroying the stream. | |
| uint64_t | userDataLength_ = 0 |
| User data length. | |
| StreamCallbacks | callbacks_ |
| uint32_t | status_ = 0 |
| Stream status flags. | |
| std::unique_ptr< BufferAligned8 > | buf_ |
| Backing buffer. | |
| std::shared_ptr< ChunkBuffer<> > | chunk_buf_ |
| size_t | bufferedBytes_ = 0 |
| size_t | readBytesSeekable_ = 0 |
| uint64_t | streamOffset_ = 0 |
| GRK_CODEC_FORMAT | format_ = GRK_CODEC_UNK |
| bool | firstCache_ = true |
| size_t | originalBufferLength_ = 0 |
| IFetcher * | fetcher_ = nullptr |
| MemAdvisor * | memAdvisor_ = nullptr |
Manages buffered read/write using callbacks or memory buffer.
For memory buffers, it is possible to perform zero-copy reads where a suitable pointer into the buffer is returned instead of copying into a second buffer.
Note: a memory-mapped file is treated as a memory buffer.
|
inline |
Constructs a BufferedStream.
| buffer | underlying buffer. If null and buffer_size is non-zero, then a new double buffer will be created |
| initial_buffer_size | initial size of double buffer |
| buffer_size | size of buffer |
| is_input | true if this is an input stream |
References buf_, grk::grk_aligned_malloc(), GROK_STREAM_STATUS_INPUT, GROK_STREAM_STATUS_OUTPUT, originalBufferLength_, and status_.
Referenced by bifurcate().
|
inlineoverride |
Destroys a BufferedStream.
References freeUserDataCallback_, memAdvisor_, and userData_.
|
inlineoverridevirtual |
Implements grk::IStream.
References buf_, bufferedBytes_, BufferedStream(), format_, isMemStream(), grk::memStreamSetup(), streamOffset_, and userData_.
|
inlineoverridevirtual |
Gets current pointer (used for zero copy).
Implements grk::IStream.
References buf_.
|
inlineoverridevirtual |
Flushes stream to disk.
Implements grk::IStream.
References buf_, bufferedBytes_, callbacks_, grk::grklog, GROK_STREAM_STATUS_ERROR, isMemStream(), status_, and userData_.
Referenced by write_non_template(), writeBytes(), and writeSeek().
|
inlineoverridevirtual |
|
inlineoverridevirtual |
Gets codec format (J2K/JP2/MJ2).
Implements grk::IStream.
References format_.
|
inlineoverridevirtual |
Checks if stream is seekable.
Implements grk::IStream.
References callbacks_.
|
inlineprivate |
References buf_, bufferedBytes_, GROK_STREAM_STATUS_INPUT, readBytesSeekable_, and status_.
Referenced by read(), readSeek(), and writeSeek().
|
inlineoverridevirtual |
Checks if stream is memory stream i.e.
from mapped file or buffer
Implements grk::IStream.
References buf_.
Referenced by bifurcate(), flush(), supportsZeroCopy(), write_non_template(), writeBytes(), writeIncrement(), and writeSeek().
|
inlineoverridevirtual |
Implements grk::IStream.
References memAdvisor_.
|
inlineoverridevirtual |
Gets the number of bytes left before end of stream.
Implements grk::IStream.
References streamOffset_, and userDataLength_.
|
inlineprivate |
Reads bytes from stream.
passing in nullptr for buffer will execute a zero-copy read
| buffer | pointer to the data buffer that will receive the data. |
| len | number of bytes to read. |
References buf_, bufferedBytes_, callbacks_, chunk_buf_, firstCache_, grk::grklog, GROK_STREAM_STATUS_END, GROK_STREAM_STATUS_ERROR, invalidateBuffer(), originalBufferLength_, readBytesSeekable_, readDirect(), status_, streamOffset_, supportsZeroCopy(), userData_, and userDataLength_.
|
inlineoverridevirtual |
Read bytes.
Do zero copy read if buffer is null
| buffer | buffer for non-zero-copy read |
| zero_copy_buffer | buffer for zero-copy read |
| len | number of bytes |
Implements grk::IStream.
References buf_, chunk_buf_, and read().
Referenced by read().
|
inlineprivate |
Reads directly from callback.
| buffer | buffer |
| len | number of bytes to read |
References callbacks_, grk::grklog, GROK_STREAM_STATUS_END, status_, streamOffset_, userData_, and userDataLength_.
Referenced by read().
|
inlineprivate |
Performs absolute seek in read stream.
| offset | absolute offset |
References buf_, bufferedBytes_, callbacks_, chunk_buf_, GROK_STREAM_STATUS_END, GROK_STREAM_STATUS_ERROR, invalidateBuffer(), readBytesSeekable_, status_, streamOffset_, userData_, and userDataLength_.
Referenced by readSkip(), and seek().
|
inlineprivate |
Skip bytes in read stream.
| len | the number of bytes to skip. |
References readSeek(), and streamOffset_.
Referenced by skip().
|
inlineoverridevirtual |
Seek bytes from the stream (absolute).
| offset | the number of bytes to skip. |
Implements grk::IStream.
References GROK_STREAM_STATUS_INPUT, readSeek(), status_, and writeSeek().
|
inlineoverridevirtual |
|
inlineoverridevirtual |
Implements grk::IStream.
References bufferedBytes_, chunk_buf_, readBytesSeekable_, and streamOffset_.
|
inline |
|
inlineoverridevirtual |
Stores codec format J2K/JP2/MJ2.
This is needed when deciding what type of code stream object to create based on stream
| format | GRK_CODEC_FORMAT |
Implements grk::IStream.
References format_.
|
inline |
References memAdvisor_.
|
inlineoverridevirtual |
Sets user data.
| data | user data |
| freeUserDataFun | grk_stream_free_user_data_fn used to free data when stream is closed |
| len | data length (for read stream) |
Implements grk::IStream.
References freeUserDataCallback_, userData_, and userDataLength_.
|
inlineoverridevirtual |
Skips bytes in stream.
| len | number of bytes to skip. |
Implements grk::IStream.
References GROK_STREAM_STATUS_INPUT, readSkip(), status_, and writeSkip().
|
inlineoverridevirtual |
Checks is stream supports zero copy.
Implements grk::IStream.
References GROK_STREAM_STATUS_INPUT, isMemStream(), and status_.
Referenced by read().
|
inlineoverridevirtual |
query byte offset of stream (similar to ftell).
Implements grk::IStream.
References streamOffset_.
|
inlineoverridevirtual |
Writes 3 bytes from uint32_t as big endian.
| value | uint32_t to write |
Implements grk::IStream.
References write_non_template().
|
inlineoverridevirtual |
Writes byte.
Endian is NOT taken into account
| value | byte to write |
Implements grk::t1_t2::IStreamWriter.
References writeBytes().
|
inlineoverrideprivatevirtual |
Implements grk::t1_t2::IStreamWriter.
References buf_, bufferedBytes_, callbacks_, flush(), grk::grk_write(), GROK_STREAM_STATUS_ERROR, isMemStream(), status_, streamOffset_, userData_, and writeIncrement().
Referenced by write24u().
|
inlineoverridevirtual |
Writes bytes to stream (no correction for endian!).
| buffer | pointer to the data buffer holds the data to be written. |
| len | number of bytes to write. |
Implements grk::IStream.
References buf_, bufferedBytes_, callbacks_, flush(), GROK_STREAM_STATUS_ERROR, isMemStream(), status_, streamOffset_, userData_, and writeIncrement().
Referenced by write8u().
|
inlineprivate |
References buf_, bufferedBytes_, isMemStream(), and streamOffset_.
Referenced by write_non_template(), and writeBytes().
|
inlineprivate |
Performs absolute seek in write stream.
| offset | absolute offset |
References buf_, callbacks_, flush(), GROK_STREAM_STATUS_ERROR, invalidateBuffer(), isMemStream(), status_, streamOffset_, and userData_.
Referenced by seek(), and writeSkip().
|
inlineprivate |
Skips bytes in write stream.
| len | number of bytes to skip. |
References streamOffset_, and writeSeek().
Referenced by skip().
|
private |
Backing buffer.
Referenced by bifurcate(), BufferedStream(), currPtr(), flush(), invalidateBuffer(), isMemStream(), read(), read(), readSeek(), write_non_template(), writeBytes(), writeIncrement(), and writeSeek().
|
private |
Referenced by bifurcate(), flush(), invalidateBuffer(), read(), readSeek(), setChunkBuffer(), write_non_template(), writeBytes(), and writeIncrement().
|
private |
Referenced by flush(), hasSeek(), read(), readDirect(), readSeek(), setCallbacks(), write_non_template(), writeBytes(), and writeSeek().
|
private |
Referenced by read(), read(), readSeek(), and setChunkBuffer().
|
private |
Referenced by getFetcher(), and setFetcher().
|
private |
Referenced by read().
|
private |
Referenced by bifurcate(), getFormat(), and setFormat().
|
private |
Pointer to function to free user_data_ (nullptr at initialization) when destroying the stream.
If pointer is nullptr the function is not called and the user_data_ is not freed (even if it isn't nullptr).
Referenced by setUserData(), and ~BufferedStream().
|
private |
Referenced by memAdvise(), setMemAdvisor(), and ~BufferedStream().
|
private |
Referenced by BufferedStream(), and read().
|
private |
Referenced by invalidateBuffer(), read(), readSeek(), and setChunkBuffer().
|
private |
Stream status flags.
Referenced by BufferedStream(), flush(), invalidateBuffer(), read(), readDirect(), readSeek(), seek(), skip(), supportsZeroCopy(), write_non_template(), writeBytes(), and writeSeek().
|
private |
Referenced by bifurcate(), numBytesLeft(), read(), readDirect(), readSeek(), readSkip(), setChunkBuffer(), tell(), write_non_template(), writeBytes(), writeIncrement(), writeSeek(), and writeSkip().
|
private |
user data
Referenced by bifurcate(), flush(), read(), readDirect(), readSeek(), setUserData(), write_non_template(), writeBytes(), writeSeek(), and ~BufferedStream().
|
private |
User data length.
Currently set to size of file for file read stream, and size of buffer for buffer read/write stream
Referenced by numBytesLeft(), read(), readDirect(), readSeek(), and setUserData().