diff --git a/include/engine/api/table_parameters.hpp b/include/engine/api/table_parameters.hpp index a34486738..0f3d0b4b1 100644 --- a/include/engine/api/table_parameters.hpp +++ b/include/engine/api/table_parameters.hpp @@ -3,6 +3,10 @@ #include "engine/api/base_parameters.hpp" +#include + +#include +#include #include namespace osrm @@ -14,14 +18,40 @@ namespace api struct TableParameters : public BaseParameters { - std::vector is_source; - std::vector is_destination; + std::vector sources; + std::vector destinations; - bool IsValid() const; + bool IsValid() const + { + if (!BaseParameters::IsValid()) + return false; + + // 1/ The user is able to specify duplicates in srcs and dsts, in that case it's her fault + + // 2/ len(srcs) and len(dsts) smaller or equal to len(locations) + if (sources.size() > coordinates.size()) + return false; + + if (destinations.size() > coordinates.size()) + return false; + + // 3/ 0 <= index < len(locations) + const auto is_not_in_range = [](const std::size_t x) + { + return x >= coordinates.size(); + }; + + if (std::any_of(begin(sources), end(sources), not_in_range)) + return false; + + if (std::any_of(begin(destinations), end(destinations), not_in_range)) + return false; + + return true; + } }; - } } } -#endif // ROUTE_PARAMETERS_HPP +#endif // ENGINE_API_TABLE_PARAMETERS_HPP