39 Stage* stage =
nullptr;
42 case StageType::LORENZO_QUANT: {
49 s->deserializeHeader(config, config_size);
53 s->deserializeHeader(config, config_size);
56 throw std::runtime_error(
57 "Unsupported Lorenzo template instantiation: input_type="
58 + std::to_string(
static_cast<int>(lc.
input_type))
59 +
" code_type=" + std::to_string(
static_cast<int>(lc.
code_type)));
62 throw std::runtime_error(
"Lorenzo config too small: " + std::to_string(config_size));
67 case StageType::DIFFERENCE: {
70 if (config_size >= 2) {
74 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
76 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
78 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
80 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
91 throw std::runtime_error(
"Unsupported Difference data type: "
92 + std::to_string(
static_cast<int>(tin_dt)));
94 }
else if (config_size >= 1) {
106 throw std::runtime_error(
"Unsupported Difference data type: "
107 + std::to_string(
static_cast<int>(dt)));
115 case StageType::RLE: {
116 if (config_size >= 1) {
118 std::memcpy(&dt, config,
sizeof(
DataType));
125 throw std::runtime_error(
"Unsupported RLE data type: "
126 + std::to_string(
static_cast<int>(dt)));
136 case StageType::ZIGZAG: {
137 if (config_size >= 2) {
140 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
142 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
144 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
146 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
149 throw std::runtime_error(
150 "Unsupported ZigzagStage type pair: TIn="
151 + std::to_string(
static_cast<int>(tin_dt))
152 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
161 case StageType::NEGABINARY: {
162 if (config_size >= 2) {
165 if (tin_dt == DataType::INT8 && tout_dt == DataType::UINT8)
167 else if (tin_dt == DataType::INT16 && tout_dt == DataType::UINT16)
169 else if (tin_dt == DataType::INT32 && tout_dt == DataType::UINT32)
171 else if (tin_dt == DataType::INT64 && tout_dt == DataType::UINT64)
174 throw std::runtime_error(
175 "Unsupported NegabinaryStage type pair: TIn="
176 + std::to_string(
static_cast<int>(tin_dt))
177 +
" TOut=" + std::to_string(
static_cast<int>(tout_dt)));
185 case StageType::BITSHUFFLE: {
187 s->deserializeHeader(config, config_size);
192 case StageType::BITPACK: {
200 else throw std::runtime_error(
201 "Unsupported BitpackStage DataType: "
202 + std::to_string(
static_cast<int>(dt)));
207 case StageType::RZE: {
209 s->deserializeHeader(config, config_size);
214 case StageType::HUFFMAN: {
222 else throw std::runtime_error(
223 "Unsupported HuffmanStage DataType: "
224 + std::to_string(
static_cast<int>(dt)));
229 case StageType::LORENZO: {
237 else throw std::runtime_error(
238 "Unsupported LorenzoStage DataType: "
239 + std::to_string(
static_cast<int>(dt)));
245 auto* s =
new ANSStage();
246 s->deserializeHeader(config, config_size);
252 auto* s =
new ADMStage();
253 s->deserializeHeader(config, config_size);
259 throw std::runtime_error(
"Unknown stage type: "
260 + std::to_string(
static_cast<uint16_t
>(type)));
Stage * createStage(StageType type, const uint8_t *config, size_t config_size)
Definition stage_factory.h:38