25 #include "grk_config_private.h"
30 #define GROK_STREAM_STATUS_OUTPUT 0x1U
31 #define GROK_STREAM_STATUS_INPUT 0x2U
32 #define GROK_STREAM_STATUS_END 0x4U
33 #define GROK_STREAM_STATUS_ERROR 0x8U
38 BufferedStream(uint8_t* buffer,
size_t buffer_size,
bool l_is_input);
59 size_t read(uint8_t* buffer,
size_t p_size);
77 size_t writeBytes(
const uint8_t* buffer,
size_t p_size);
91 bool skip(int64_t p_size);
110 bool seek(uint64_t offset);
152 template<
typename TYPE>
153 bool write(TYPE value, uint8_t numBytes);
212 template<
typename TYPE>
213 void grk_write(uint8_t* buffer, TYPE value, uint32_t numBytes)
217 assert(numBytes <=
sizeof(TYPE));
218 #if defined(GROK_BIG_ENDIAN)
219 const uint8_t* dataPtr = ((
const uint8_t*)&value) +
sizeof(TYPE) - numBytes;
220 memcpy(buffer, dataPtr, numBytes);
222 const uint8_t* dataPtr = ((
const uint8_t*)&value) + (size_t)(numBytes - 1);
223 for(uint32_t i = 0; i < numBytes; ++i)
224 *(buffer++) = *(dataPtr--);
228 template<
typename TYPE>
231 grk_write<TYPE>(buffer, value,
sizeof(TYPE));
234 template<
typename TYPE>
235 void grk_read(
const uint8_t* buffer, TYPE* value, uint32_t numBytes)
237 assert(numBytes > 0 && numBytes <=
sizeof(TYPE));
238 #if defined(GROK_BIG_ENDIAN)
239 auto dataPtr = ((uint8_t*)value);
241 memcpy(dataPtr +
sizeof(TYPE) - numBytes, buffer, numBytes);
243 auto dataPtr = ((uint8_t*)value) + numBytes - 1;
245 for(uint32_t i = 0; i < numBytes; ++i)
246 *(dataPtr--) = *(buffer++);
250 template<
typename TYPE>
253 grk_read<TYPE>(buffer, value,
sizeof(TYPE));
Definition: GrkObjectWrapper.h:23
bool(* grk_stream_seek_fn)(uint64_t numBytes, void *user_data)
Definition: grok.h:876
size_t(* grk_stream_write_fn)(void *buffer, size_t numBytes, void *user_data)
Definition: grok.h:872
void(* grk_stream_free_user_data_fn)(void *user_data)
Definition: grok.h:880
size_t(* grk_stream_read_fn)(void *buffer, size_t numBytes, void *user_data)
Definition: grok.h:867
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
void grk_read(const uint8_t *buffer, TYPE *value, uint32_t numBytes)
Definition: BufferedStream.h:235
size_t(* grk_stream_zero_copy_read_fn)(void **buffer, size_t numBytes, void *user_data)
Definition: MemStream.h:30
void grk_write(uint8_t *buffer, TYPE value, uint32_t numBytes)
Definition: BufferedStream.h:213
Base Grok ref-counted object.
Definition: grok.h:408
Definition: BufferedStream.h:36
uint8_t * getZeroCopyPtr()
Definition: BufferedStream.cpp:351
void setUserData(void *data, grk_stream_free_user_data_fn freeUserDataFun)
Definition: BufferedStream.cpp:47
void setReadFunction(grk_stream_read_fn fn)
Definition: BufferedStream.cpp:64
bool write24(uint32_t value)
Definition: BufferedStream.cpp:213
uint32_t getStatus(void)
Definition: BufferedStream.cpp:60
void * getUserData(void)
Definition: BufferedStream.cpp:52
grk_object obj
Definition: BufferedStream.h:158
grk_stream_zero_copy_read_fn m_zero_copy_read_fn
Pointer to actual zero copy read function (nullptr at initialization).
Definition: BufferedStream.h:183
bool write_skip(int64_t p_size)
Skip bytes in write stream.
Definition: BufferedStream.cpp:366
grk_stream_read_fn m_read_fn
Pointer to actual read function (nullptr at initialization).
Definition: BufferedStream.h:179
bool flush()
Flush stream to disk.
Definition: BufferedStream.cpp:313
grk_stream * getWrapper(void)
Definition: BufferedStream.cpp:482
bool writeShort(uint16_t value)
Definition: BufferedStream.cpp:209
bool write64(uint64_t value)
Definition: BufferedStream.cpp:221
bool writeInt(uint32_t value)
Definition: BufferedStream.cpp:217
bool skip(int64_t p_size)
Skip bytes in stream.
Definition: BufferedStream.cpp:382
void invalidate_buffer()
Definition: BufferedStream.cpp:340
bool seek(uint64_t offset)
Seek bytes from the stream (absolute)
Definition: BufferedStream.cpp:460
bool writeByte(uint8_t value)
Definition: BufferedStream.cpp:205
bool isMemStream()
Definition: BufferedStream.cpp:472
~BufferedStream()
Definition: BufferedStream.cpp:41
bool read_seek(uint64_t offset)
Absolute seek in read stream.
Definition: BufferedStream.cpp:390
bool read_skip(int64_t p_size)
Skip bytes in read stream.
Definition: BufferedStream.cpp:356
void writeIncrement(size_t p_size)
Definition: BufferedStream.cpp:302
void setWriteFunction(grk_stream_write_fn fn)
Definition: BufferedStream.cpp:72
void setUserDataLength(uint64_t len)
Definition: BufferedStream.cpp:56
bool supportsZeroCopy()
Definition: BufferedStream.cpp:347
grkBufferU8 * m_buf
Definition: BufferedStream.h:197
bool write_seek(uint64_t offset)
Absolute seek in write stream.
Definition: BufferedStream.cpp:436
void setSeekFunction(grk_stream_seek_fn fn)
Definition: BufferedStream.cpp:76
grk_stream_seek_fn m_seek_fn
Pointer to actual seek function (if available).
Definition: BufferedStream.h:191
uint64_t m_stream_offset
Definition: BufferedStream.h:209
uint32_t m_status
Stream status flags.
Definition: BufferedStream.h:195
grk_stream_free_user_data_fn m_free_user_data_fn
Pointer to function to free m_user_data (nullptr at initialization) when destroying the stream.
Definition: BufferedStream.h:169
size_t m_read_bytes_seekable
Definition: BufferedStream.h:206
bool hasSeek()
Check if stream is seekable.
Definition: BufferedStream.cpp:467
void * m_user_data
user data
Definition: BufferedStream.h:163
size_t writeBytes(const uint8_t *buffer, size_t p_size)
Write bytes to stream (no correction for endian!).
Definition: BufferedStream.cpp:253
void setZeroCopyReadFunction(grk_stream_zero_copy_read_fn fn)
Definition: BufferedStream.cpp:68
size_t read(uint8_t *buffer, size_t p_size)
Reads some bytes from the stream.
Definition: BufferedStream.cpp:81
bool write(TYPE value, uint8_t numBytes)
Definition: BufferedStream.cpp:226
uint64_t numBytesLeft(void)
Get the number of bytes left before end of stream.
Definition: BufferedStream.cpp:377
grk_stream_write_fn m_write_fn
Pointer to actual write function (nullptr at initialization).
Definition: BufferedStream.h:187
BufferedStream(uint8_t *buffer, size_t buffer_size, bool l_is_input)
Definition: BufferedStream.cpp:30
uint64_t m_user_data_length
User data length.
Definition: BufferedStream.h:175
uint64_t tell(void)
Tells byte offset of stream (similar to ftell).
Definition: BufferedStream.cpp:373
size_t m_buffered_bytes
Definition: BufferedStream.h:200
static BufferedStream * getImpl(grk_stream *stream)
Definition: BufferedStream.cpp:477
Definition: IBufferedStream.h:20