|
Grok 20.3.2
|
Manages a list of buffers (named chunks) which can be treated as one single contiguous buffer. More...
#include <SparseBuffer.h>
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. | |
| Buffer8 * | push (uint8_t *buf, size_t len, bool ownsData) |
| Pushes a new chunk (sequential mode). | |
| Buffer8 * | push (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. | |
Manages a list of buffers (named chunks) which can be treated as one single contiguous buffer.
|
strongprivate |
| grk::SparseBuffer::SparseBuffer | ( | ) |
Constructs a SparseBuffer.
References currentChunkId, dataLen, mode_, and reachedEnd_.
|
virtual |
Destroys a SparseBuffer.
References cleanup().
| size_t grk::SparseBuffer::chunkLength | ( | void | ) |
|
private |
Gets offset of current chunk.
References chunks, and currentChunkId.
Referenced by offset().
| uint8_t * grk::SparseBuffer::chunkPtr | ( | void | ) |
|
virtual |
Increments offset of current chunk.
An exception will be thrown if offset overruns current chunk
| offset | offset |
References chunks, currentChunkId, reachedEnd_, and tryIncrement().
Referenced by grk::PacketCache::next(), read(), and skip().
|
private |
|
private |
Copies all chunks, in sequence, into single buffer.
| buffer | buffer |
References chunks.
|
inline |
References chunks.
| size_t grk::SparseBuffer::length | ( | void | ) | const |
|
private |
Gets contiguous offset.
References chunkOffset(), chunks, and currentChunkId.
Referenced by grk::PacketCache::next(), read(), and skip().
| Buffer8 * grk::SparseBuffer::push | ( | size_t | index, |
| uint8_t * | buf, | ||
| size_t | len, | ||
| bool | ownsData ) |
Pushes a new chunk (indexed mode).
| index | index |
| buf | buffer |
| len | buffer length |
| ownsData | true if chunk should be owned by SparseBuffer |
References chunks, dataLen, Indexed, mode_, mutex_, and Sequential.
| Buffer8 * grk::SparseBuffer::push | ( | uint8_t * | buf, |
| size_t | len, | ||
| bool | ownsData ) |
Pushes a new chunk (sequential mode).
| buf | buffer |
| len | buffer length |
| ownsData | true if chunk should be owned by SparseBuffer |
References chunks, currentChunkId, dataLen, Indexed, mode_, and Sequential.
| size_t grk::SparseBuffer::read | ( | void * | buffer, |
| size_t | numBytes ) |
Reads contiguous bytes.
| buffer | buffer to receive the read bytes |
| numBytes | number of bytes to read |
References chunks, chunkSkip(), currentChunkId, dataLen, grk::grklog, and offset().
|
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().
| size_t grk::SparseBuffer::skip | ( | size_t | numBytes | ) |
Skips contiguous bytes.
| numBytes | number of bytes to skip |
References chunks, chunkSkip(), currentChunkId, dataLen, grk::grklog, and offset().
Referenced by grk::PacketIter::skipPackets().
|
private |
Increments to next chunk if appropriate.
References chunks, currentChunkId, and reachedEnd_.
Referenced by chunkSkip().
|
private |
Collection of chunks.
Referenced by chunkLength(), chunkOffset(), chunkPtr(), chunkSkip(), cleanup(), copyDataChunksToContiguous(), empty(), offset(), push(), push(), read(), rewind(), skip(), and tryIncrement().
|
private |
Current chunk ID.
Referenced by chunkLength(), chunkOffset(), chunkPtr(), chunkSkip(), offset(), push(), read(), rewind(), skip(), SparseBuffer(), and tryIncrement().
|
private |
|
private |
Mode.
Referenced by push(), push(), and SparseBuffer().
|
private |
|
private |
End of contiguous buffer has been reached.
Referenced by chunkSkip(), rewind(), SparseBuffer(), and tryIncrement().