Skip to content

Commit 93c286c

Browse files
committed
guard SparseVector branch in Row::get<T> to fix non-vector T instantiation
1 parent bc70ada commit 93c286c

1 file changed

Lines changed: 27 additions & 22 deletions

File tree

src/types.h

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -278,36 +278,41 @@ struct Row
278278
else if constexpr (std::is_same_v<T, SparseVector> &&
279279
std::is_same_v<ArgType, std::shared_ptr<Row>>)
280280
{
281-
SparseVector sparse_vector;
281+
if constexpr (std::is_same_v<T, SparseVector>)
282+
{
283+
SparseVector sparse_vector;
282284

283-
auto type_field = std::find_if(arg->column_names.begin(), arg->column_names.end(), [](const std::string& col_name) {
284-
return col_name == "type";
285-
});
285+
auto type_field = std::find_if(arg->column_names.begin(), arg->column_names.end(), [](const std::string& col_name) {
286+
return col_name == "type";
287+
});
286288

287-
if (type_field == arg->column_names.end() || std::get<int8_t>(arg->values.at(arg->col_index("type"))) != 0)
288-
return sparse_vector;
289+
if (type_field == arg->column_names.end() || std::get<int8_t>(arg->values.at(arg->col_index("type"))) != 0)
290+
return sparse_vector;
289291

290-
auto size = std::get<int32_t>(arg->values.at(arg->col_index("size")));
291-
auto indice_array_data = std::get<std::shared_ptr<ArrayData>>(arg->values.at(arg->col_index("indices")));
292-
auto values_array_data = std::get<std::shared_ptr<ArrayData>>(arg->values.at(arg->col_index("values")));
292+
auto size = std::get<int32_t>(arg->values.at(arg->col_index("size")));
293+
auto indice_array_data = std::get<std::shared_ptr<ArrayData>>(arg->values.at(arg->col_index("indices")));
294+
auto values_array_data = std::get<std::shared_ptr<ArrayData>>(arg->values.at(arg->col_index("values")));
293295

294-
std::vector<int> indices;
295-
std::vector<double> values;
296+
std::vector<int> indices;
297+
std::vector<double> values;
296298

297-
indices.reserve(indice_array_data->elements.size());
298-
values.reserve(values_array_data->elements.size());
299+
indices.reserve(indice_array_data->elements.size());
300+
values.reserve(values_array_data->elements.size());
299301

300-
for (int i = 0; i < indice_array_data->elements.size(); i++)
301-
{
302-
indices.push_back(std::get<int32_t>(indice_array_data->elements[i]));
303-
}
302+
for (int i = 0; i < indice_array_data->elements.size(); i++)
303+
{
304+
indices.push_back(std::get<int32_t>(indice_array_data->elements[i]));
305+
}
304306

305-
for (int i = 0; i < values_array_data->elements.size(); i++)
306-
{
307-
values.push_back(std::get<double>(values_array_data->elements[i]));
308-
}
307+
for (int i = 0; i < values_array_data->elements.size(); i++)
308+
{
309+
values.push_back(std::get<double>(values_array_data->elements[i]));
310+
}
309311

310-
return SparseVector{size, indices, values};
312+
return SparseVector{size, indices, values};
313+
}
314+
else
315+
throw std::runtime_error("unreachable");
311316
}
312317
else
313318
{

0 commit comments

Comments
 (0)