Grok 20.3.2
SparseBuffer.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 Grok Image Compression Inc.
3 *
4 * This source code is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License, version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This source code is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Affero General Public License for more details.
12 *
13 * You should have received a copy of the GNU Affero General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 */
17
18#pragma once
19
20#include <vector>
21#include <stdexcept>
22#include <mutex>
23
24#include "buffer.h"
25
26namespace grk
27{
28
29class SparseBufferIncompleteException : public std::runtime_error
30{
31public:
33};
34
41{
42public:
50 virtual ~SparseBuffer();
51
56 virtual void rewind(void);
57
63 size_t skip(size_t numBytes);
64
71 size_t read(void* buffer, size_t numBytes);
72
77 size_t length(void) const;
78
86 Buffer8* push(uint8_t* buf, size_t len, bool ownsData);
87
96 Buffer8* push(size_t index, uint8_t* buf, size_t len, bool ownsData);
97
105 virtual void chunkSkip(size_t offset);
106
111 size_t chunkLength(void);
112
117 uint8_t* chunkPtr(void);
118
119 bool empty(void) const
120 {
121 return chunks.empty();
122 }
123
124private:
125 enum class Mode
126 {
130 };
131
135 void tryIncrement(void);
136
141 size_t offset(void);
142
148 bool copyDataChunksToContiguous(uint8_t* buffer);
149
153 void cleanup(void);
154
159 size_t chunkOffset(void);
160
164 size_t dataLen;
165
170
174 std::vector<Buffer8*> chunks;
175
180
185
189 std::mutex mutex_;
190};
191
192} // namespace grk
Buffer8 * push(uint8_t *buf, size_t len, bool ownsData)
Pushes a new chunk (sequential mode).
Definition SparseBuffer.cpp:134
virtual void rewind(void)
Resets all chunk offsets to zero and sets current chunk pointing to first chunk.
Definition SparseBuffer.cpp:175
virtual void chunkSkip(size_t offset)
Increments offset of current chunk.
Definition SparseBuffer.cpp:186
std::vector< Buffer8 * > chunks
Collection of chunks.
Definition SparseBuffer.h:174
virtual ~SparseBuffer()
Destroys a SparseBuffer.
Definition SparseBuffer.cpp:44
Mode mode_
Mode.
Definition SparseBuffer.h:184
SparseBuffer()
Constructs a SparseBuffer.
Definition SparseBuffer.cpp:42
bool copyDataChunksToContiguous(uint8_t *buffer)
Copies all chunks, in sequence, into single buffer.
Definition SparseBuffer.cpp:202
std::mutex mutex_
Mutex for thread safety.
Definition SparseBuffer.h:189
size_t read(void *buffer, size_t numBytes)
Reads contiguous bytes.
Definition SparseBuffer.cpp:71
size_t dataLen
Total length of all chunks.
Definition SparseBuffer.h:164
size_t length(void) const
Gets contiguous length.
Definition SparseBuffer.cpp:67
void cleanup(void)
Cleans up resources.
Definition SparseBuffer.cpp:167
bool reachedEnd_
End of contiguous buffer has been reached.
Definition SparseBuffer.h:179
size_t chunkOffset(void)
Gets offset of current chunk.
Definition SparseBuffer.cpp:232
Mode
Definition SparseBuffer.h:126
@ Sequential
Definition SparseBuffer.h:128
@ Unset
Definition SparseBuffer.h:127
@ Indexed
Definition SparseBuffer.h:129
size_t currentChunkId
Current chunk ID.
Definition SparseBuffer.h:169
size_t chunkLength(void)
Gets current chunk length.
Definition SparseBuffer.cpp:225
void tryIncrement(void)
Increments to next chunk if appropriate.
Definition SparseBuffer.cpp:48
size_t offset(void)
Gets contiguous offset.
Definition SparseBuffer.cpp:239
uint8_t * chunkPtr(void)
Gets current chunk pointer.
Definition SparseBuffer.cpp:218
size_t skip(size_t numBytes)
Skips contiguous bytes.
Definition SparseBuffer.cpp:102
bool empty(void) const
Definition SparseBuffer.h:119
SparseBufferIncompleteException()
Definition SparseBuffer.cpp:38
ResWindow.
Definition CompressedChunkCache.h:36
Buffer< uint8_t, AllocatorVanilla > Buffer8
Definition buffer.h:257