Go to the documentation of this file.
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
95 size_t read(uint8_t *p_buffer,
size_t p_size);
196 template<
typename TYPE>
bool write(TYPE value, uint8_t numBytes);
217 template<
typename TYPE>
void grk_write(uint8_t *p_buffer, TYPE value,
221 assert(nb_bytes <=
sizeof(TYPE));
222 #if defined(GROK_BIG_ENDIAN)
223 const uint8_t * l_data_ptr = ((
const uint8_t *)&value) +
sizeof(TYPE) - nb_bytes;
224 memcpy(p_buffer, l_data_ptr, nb_bytes);
226 const uint8_t *l_data_ptr = ((
const uint8_t*) &value)
227 + (size_t)(nb_bytes - 1);
228 for (uint32_t i = 0; i < nb_bytes; ++i) {
229 *(p_buffer++) = *(l_data_ptr--);
234 template<
typename TYPE>
void grk_write(uint8_t *p_buffer, TYPE value) {
235 grk_write<TYPE>(p_buffer, value,
sizeof(TYPE));
238 template<
typename TYPE>
void grk_read(
const uint8_t *p_buffer, TYPE *value,
240 assert(nb_bytes > 0 && nb_bytes <=
sizeof(TYPE));
241 #if defined(GROK_BIG_ENDIAN)
242 auto l_data_ptr = ((uint8_t *)value);
244 memcpy(l_data_ptr +
sizeof(TYPE) - nb_bytes, p_buffer, nb_bytes);
246 auto l_data_ptr = ((uint8_t*) value) + nb_bytes - 1;
248 for (uint32_t i = 0; i < nb_bytes; ++i)
249 *(l_data_ptr--) = *(p_buffer++);
253 template<
typename TYPE>
void grk_read(
const uint8_t *p_buffer, TYPE *value){
254 grk_read<TYPE>(p_buffer, value,
sizeof(TYPE));
bool write_seek(uint64_t offset)
Absolute seek in write stream.
void write_increment(size_t p_size)
bool write_byte(uint8_t value)
bool write_int(uint32_t value)
uint64_t m_user_data_length
User data length.
Definition: BufferedStream.h:60
void grk_read(const uint8_t *p_buffer, TYPE *value, uint32_t nb_bytes)
Definition: BufferedStream.h:238
void * m_user_data
user data
Definition: BufferedStream.h:46
BufferedStream(uint8_t *buffer, size_t buffer_size, bool l_is_input)
Byte input-output stream.
Definition: BufferedStream.h:38
void grk_write(uint8_t *p_buffer, TYPE value, uint32_t nb_bytes)
Definition: BufferedStream.h:217
bool write_short(uint16_t value)
bool flush()
Flush stream to disk.
bool read_skip(int64_t p_size)
Skip bytes in read stream.
size_t m_buffered_bytes
Definition: BufferedStream.h:204
bool write_24(uint32_t value)
uint8_t * getCurrentPtr()
grk_stream_write_fn m_write_fn
Pointer to actual write function (nullptr at initialization).
Definition: BufferedStream.h:75
uint32_t m_status
Stream status flags.
Definition: BufferedStream.h:85
grk_stream_read_fn m_read_fn
Pointer to actual read function (nullptr at initialization).
Definition: BufferedStream.h:65
size_t read_data_zero_copy(uint8_t **p_buffer, size_t p_size)
size_t(* grk_stream_read_fn)(void *p_buffer, size_t nb_bytes, void *user_data)
Definition: grok.h:791
uint64_t get_number_byte_left(void)
Get the number of bytes left before end of stream.
uint64_t tell(void)
Tells byte offset of stream (similar to ftell).
bool skip(int64_t p_size)
Skip bytes in stream.
bool read_seek(uint64_t offset)
Absolute seek in read stream.
bool write_64(uint64_t value)
grk_stream_zero_copy_read_fn m_zero_copy_read_fn
Pointer to actual zero copy read function (nullptr at initialization).
Definition: BufferedStream.h:70
uint64_t m_stream_offset
Definition: BufferedStream.h:213
Copyright (C) 2016-2020 Grok Image Compression Inc.
Definition: BitIO.h:27
size_t(* grk_stream_zero_copy_read_fn)(void **p_buffer, size_t nb_bytes, void *user_data)
Definition: grok.h:797
void(* grk_stream_free_user_data_fn)(void *user_data)
Definition: grok.h:814
grk_stream_seek_fn m_seek_fn
Pointer to actual seek function (if available).
Definition: BufferedStream.h:80
size_t read(uint8_t *p_buffer, size_t p_size)
Reads some bytes from the stream.
bool has_seek()
Check if stream is seekable.
bool(* grk_stream_seek_fn)(uint64_t nb_bytes, void *user_data)
Definition: grok.h:809
Definition: IBufferedStream.h:21
bool seek(uint64_t offset)
Seek bytes from the stream (absolute)
size_t m_read_bytes_seekable
Definition: BufferedStream.h:210
size_t write_bytes(const uint8_t *p_buffer, size_t p_size)
Write bytes to stream (no correction for endian!).
size_t(* grk_stream_write_fn)(void *p_buffer, size_t nb_bytes, void *user_data)
Definition: grok.h:803
grk_buf * m_buf
Definition: BufferedStream.h:201
bool write(TYPE value, uint8_t numBytes)
bool write_skip(int64_t p_size)
Skip bytes in write stream.
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:53