46 Stage* stage =
nullptr;
49 case StageType::LORENZO_QUANT: {
56 s->deserializeHeader(config, config_size);
60 s->deserializeHeader(config, config_size);
63 throw std::runtime_error(
64 "Unsupported Lorenzo template instantiation: input_type="
65 + std::to_string(
static_cast<int>(lc.
input_type))
66 +
" code_type=" + std::to_string(
static_cast<int>(lc.
code_type)));
69 throw std::runtime_error(
"Lorenzo config too small: " + std::to_string(config_size));
74 case StageType::DIFFERENCE: {
78 if (config_size >= 2) {
82 if (config_size >= 7) mode =
static_cast<FusionMode>(config[6]);
84 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8) {
88 }
else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16) {
92 }
else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32) {
96 }
else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64) {
110 throw std::runtime_error(
"Unsupported Difference data type: "
111 + std::to_string(
static_cast<int>(tin_dt)));
113 }
else if (config_size >= 1) {
125 throw std::runtime_error(
"Unsupported Difference data type: "
126 + std::to_string(
static_cast<int>(dt)));
134 case StageType::QUANTIZER: {
136 throw std::runtime_error(
137 "QuantizerConfig too small: " + std::to_string(config_size));
143 s->deserializeHeader(config, config_size);
147 s->deserializeHeader(config, config_size);
151 s->deserializeHeader(config, config_size);
155 s->deserializeHeader(config, config_size);
158 throw std::runtime_error(
159 "Unsupported QuantizerStage types: input_type="
160 + std::to_string(
static_cast<int>(qc.
input_type))
161 +
" code_type=" + std::to_string(
static_cast<int>(qc.
code_type)));
166 case StageType::RLE: {
167 if (config_size >= 1) {
169 std::memcpy(&dt, config,
sizeof(
DataType));
180 throw std::runtime_error(
"Unsupported RLE data type: "
181 + std::to_string(
static_cast<int>(dt)));
191 case StageType::ZIGZAG: {
192 if (config_size >= 2) {
195 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
197 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
199 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
201 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
204 throw std::runtime_error(
205 "Unsupported ZigzagStage type pair: TIn="
206 + std::to_string(
static_cast<int>(tin_dt))
207 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
216 case StageType::NEGABINARY: {
217 if (config_size >= 2) {
220 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
222 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
224 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
226 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
229 throw std::runtime_error(
230 "Unsupported NegabinaryStage type pair: TIn="
231 + std::to_string(
static_cast<int>(tin_dt))
232 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
240 case StageType::BITSHUFFLE: {
242 s->deserializeHeader(config, config_size);
247 case StageType::BITPACK: {
255 else throw std::runtime_error(
256 "Unsupported BitpackStage DataType: "
257 + std::to_string(
static_cast<int>(dt)));
262 case StageType::RZE: {
264 s->deserializeHeader(config, config_size);
271 s->deserializeHeader(config, config_size);
276 case StageType::MERGE: {
278 s->deserializeHeader(config, config_size);
283 case StageType::HUFFMAN: {
291 else throw std::runtime_error(
292 "Unsupported HuffmanStage DataType: "
293 + std::to_string(
static_cast<int>(dt)));
298 case StageType::LORENZO: {
306 else throw std::runtime_error(
307 "Unsupported LorenzoStage DataType: "
308 + std::to_string(
static_cast<int>(dt)));
314 auto* s =
new ANSStage();
315 s->deserializeHeader(config, config_size);
321 auto* s =
new ADMStage();
322 s->deserializeHeader(config, config_size);
330 throw std::runtime_error(
331 "GInterp config too small: " + std::to_string(config_size));
335 auto make_ginterp = [&](
auto input_tag) {
336 using TInput =
decltype(input_tag);
339 s->deserializeHeader(config, config_size);
341 }
else if (gc.
code_type == DataType::UINT16) {
343 s->deserializeHeader(config, config_size);
345 }
else if (gc.
code_type == DataType::UINT32) {
347 s->deserializeHeader(config, config_size);
350 throw std::runtime_error(
351 "Unsupported GInterp code_type: "
352 + std::to_string(
static_cast<int>(gc.
code_type)));
356 make_ginterp(
float{});
357 }
else if (gc.
input_type == DataType::FLOAT64) {
358 make_ginterp(
double{});
360 throw std::runtime_error(
361 "Unsupported GInterp input_type: "
362 + std::to_string(
static_cast<int>(gc.
input_type)));
369 s->deserializeHeader(config, config_size);
381 else throw std::runtime_error(
382 "Unsupported AdaptiveBitpackStage DataType: "
383 + std::to_string(
static_cast<int>(dt)));
395 else throw std::runtime_error(
396 "Unsupported TiledLorenzoStage DataType: "
397 + std::to_string(
static_cast<int>(dt)));
403 throw std::runtime_error(
"Unknown stage type: "
404 + std::to_string(
static_cast<uint16_t
>(type)));