Grok 20.3.2
grk::SparseBuffer Class Reference

Manages a list of buffers (named chunks) which can be treated as one single contiguous buffer. More...

#include <SparseBuffer.h>

Inheritance diagram for grk::SparseBuffer:
grk::PacketCache

Public Member Functions

 SparseBuffer ()
 Constructs a SparseBuffer.
virtual ~SparseBuffer ()
 Destroys a SparseBuffer.
virtual void rewind (void)
 Resets all chunk offsets to zero and sets current chunk pointing to first chunk.
size_t skip (size_t numBytes)
 Skips contiguous bytes.
size_t read (void *buffer, size_t numBytes)
 Reads contiguous bytes.
size_t length (void) const
 Gets contiguous length.
Buffer8push (uint8_t *buf, size_t len, bool ownsData)
 Pushes a new chunk (sequential mode).
Buffer8push (size_t index, uint8_t *buf, size_t len, bool ownsData)
 Pushes a new chunk (indexed mode).
virtual void chunkSkip (size_t offset)
 Increments offset of current chunk.
size_t chunkLength (void)
 Gets current chunk length.
uint8_t * chunkPtr (void)
 Gets current chunk pointer.
bool empty (void) const

Private Types

enum class  Mode { Unset , Sequential , Indexed }

Private Member Functions

void tryIncrement (void)
 Increments to next chunk if appropriate.
size_t offset (void)
 Gets contiguous offset.
bool copyDataChunksToContiguous (uint8_t *buffer)
 Copies all chunks, in sequence, into single buffer.
void cleanup (void)
 Cleans up resources.
size_t chunkOffset (void)
 Gets offset of current chunk.

Private Attributes

size_t dataLen
 Total length of all chunks.
size_t currentChunkId
 Current chunk ID.
std::vector< Buffer8 * > chunks
 Collection of chunks.
bool reachedEnd_
 End of contiguous buffer has been reached.
Mode mode_
 Mode.
std::mutex mutex_
 Mutex for thread safety.

Detailed Description

Manages a list of buffers (named chunks) which can be treated as one single contiguous buffer.

Member Enumeration Documentation

◆ Mode

enum class grk::SparseBuffer::Mode
strongprivate
Enumerator
Unset 
Sequential 
Indexed 

Constructor & Destructor Documentation

◆ SparseBuffer()

grk::SparseBuffer::SparseBuffer ( )

Constructs a SparseBuffer.

References currentChunkId, dataLen, mode_, and reachedEnd_.

◆ ~SparseBuffer()

grk::SparseBuffer::~SparseBuffer ( )
virtual

Destroys a SparseBuffer.

References cleanup().

Member Function Documentation

◆ chunkLength()

size_t grk::SparseBuffer::chunkLength ( void )

Gets current chunk length.

Returns
current chunk length

References chunks, and currentChunkId.

◆ chunkOffset()

size_t grk::SparseBuffer::chunkOffset ( void )
private

Gets offset of current chunk.

Returns
current chunk offset

References chunks, and currentChunkId.

Referenced by offset().

◆ chunkPtr()

uint8_t * grk::SparseBuffer::chunkPtr ( void )

Gets current chunk pointer.

Returns
current chunk pointer

References chunks, and currentChunkId.

◆ chunkSkip()

void grk::SparseBuffer::chunkSkip ( size_t offset)
virtual

Increments offset of current chunk.

An exception will be thrown if offset overruns current chunk

Parameters
offsetoffset

References chunks, currentChunkId, reachedEnd_, and tryIncrement().

Referenced by grk::PacketCache::next(), read(), and skip().

◆ cleanup()

void grk::SparseBuffer::cleanup ( void )
private

Cleans up resources.

References chunks, dataLen, and mutex_.

Referenced by ~SparseBuffer().

◆ copyDataChunksToContiguous()

bool grk::SparseBuffer::copyDataChunksToContiguous ( uint8_t * buffer)
private

Copies all chunks, in sequence, into single buffer.

Parameters
bufferbuffer
Returns
true if successful

References chunks.

◆ empty()

bool grk::SparseBuffer::empty ( void ) const
inline

References chunks.

◆ length()

size_t grk::SparseBuffer::length ( void ) const

Gets contiguous length.

Returns
contiguous length

References dataLen.

◆ offset()

size_t grk::SparseBuffer::offset ( void )
private

Gets contiguous offset.

Returns
offset

References chunkOffset(), chunks, and currentChunkId.

Referenced by grk::PacketCache::next(), read(), and skip().

◆ push() [1/2]

Buffer8 * grk::SparseBuffer::push ( size_t index,
uint8_t * buf,
size_t len,
bool ownsData )

Pushes a new chunk (indexed mode).

Parameters
indexindex
bufbuffer
lenbuffer length
ownsDatatrue if chunk should be owned by SparseBuffer
Returns
resulting Buffer8 pushed

References chunks, dataLen, Indexed, mode_, mutex_, and Sequential.

◆ push() [2/2]

Buffer8 * grk::SparseBuffer::push ( uint8_t * buf,
size_t len,
bool ownsData )

Pushes a new chunk (sequential mode).

Parameters
bufbuffer
lenbuffer length
ownsDatatrue if chunk should be owned by SparseBuffer
Returns
resulting Buffer8 pushed

References chunks, currentChunkId, dataLen, Indexed, mode_, and Sequential.

◆ read()

size_t grk::SparseBuffer::read ( void * buffer,
size_t numBytes )

Reads contiguous bytes.

Parameters
bufferbuffer to receive the read bytes
numBytesnumber of bytes to read
Returns
number of bytes read

References chunks, chunkSkip(), currentChunkId, dataLen, grk::grklog, and offset().

◆ rewind()

void grk::SparseBuffer::rewind ( void )
virtual

Resets all chunk offsets to zero and sets current chunk pointing to first chunk.

Reimplemented in grk::PacketCache.

References chunks, currentChunkId, and reachedEnd_.

Referenced by grk::PacketCache::rewind().

◆ skip()

size_t grk::SparseBuffer::skip ( size_t numBytes)

Skips contiguous bytes.

Parameters
numBytesnumber of bytes to skip
Returns
number of bytes skipped

References chunks, chunkSkip(), currentChunkId, dataLen, grk::grklog, and offset().

Referenced by grk::PacketIter::skipPackets().

◆ tryIncrement()

void grk::SparseBuffer::tryIncrement ( void )
private

Increments to next chunk if appropriate.

References chunks, currentChunkId, and reachedEnd_.

Referenced by chunkSkip().

Member Data Documentation

◆ chunks

std::vector<Buffer8*> grk::SparseBuffer::chunks
private

◆ currentChunkId

size_t grk::SparseBuffer::currentChunkId
private

◆ dataLen

size_t grk::SparseBuffer::dataLen
private

Total length of all chunks.

Referenced by cleanup(), length(), push(), push(), read(), skip(), and SparseBuffer().

◆ mode_

Mode grk::SparseBuffer::mode_
private

Mode.

Referenced by push(), push(), and SparseBuffer().

◆ mutex_

std::mutex grk::SparseBuffer::mutex_
private

Mutex for thread safety.

Referenced by cleanup(), and push().

◆ reachedEnd_

bool grk::SparseBuffer::reachedEnd_
private

End of contiguous buffer has been reached.

Referenced by chunkSkip(), rewind(), SparseBuffer(), and tryIncrement().


The documentation for this class was generated from the following files: