diff --git a/include/engine/api/table_api.hpp b/include/engine/api/table_api.hpp index 33c2f0d40..7f89c695d 100644 --- a/include/engine/api/table_api.hpp +++ b/include/engine/api/table_api.hpp @@ -36,21 +36,31 @@ class TableAPI final : public BaseAPI const std::vector &phantoms, util::json::Object &response) const { + auto number_of_sources = parameters.sources.size(); + auto number_of_destinations = parameters.destinations.size();; + // symmetric case if (parameters.sources.empty()) { - BOOST_ASSERT(parameters.destinations.empty()); response.values["sources"] = MakeWaypoints(phantoms); - response.values["destinations"] = MakeWaypoints(phantoms); - response.values["durations"] = MakeTable(durations, phantoms.size(), phantoms.size()); + number_of_sources = phantoms.size(); } else { response.values["sources"] = MakeWaypoints(phantoms, parameters.sources); - response.values["destinations"] = MakeWaypoints(phantoms, parameters.destinations); - response.values["durations"] = - MakeTable(durations, parameters.sources.size(), parameters.destinations.size()); } + + if (parameters.destinations.empty()) + { + response.values["destinations"] = MakeWaypoints(phantoms); + number_of_destinations = phantoms.size(); + } + else + { + response.values["destinations"] = MakeWaypoints(phantoms, parameters.destinations); + } + + response.values["durations"] = MakeTable(durations, number_of_sources, number_of_destinations); response.values["code"] = "ok"; } @@ -94,7 +104,15 @@ class TableAPI final : public BaseAPI util::json::Array json_row; auto row_begin_iterator = values.begin() + (row * number_of_columns); auto row_end_iterator = values.begin() + ((row + 1) * number_of_columns); - json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator); + json_row.values.resize(number_of_columns); + std::transform(row_begin_iterator, row_end_iterator, json_row.values.begin(), [](const EdgeWeight duration) + { + if (duration == INVALID_EDGE_WEIGHT) + { + return util::json::Value(util::json::Null()); + } + return util::json::Value(util::json::Number(duration / 10.)); + }); json_table.values.push_back(std::move(json_row)); } return json_table;