#ifndef JSON_UTIL_HPP #define JSON_UTIL_HPP #include "osrm/json_container.hpp" #include "util/container.hpp" #include #include namespace osrm { namespace util { namespace json { // Make sure we don't have inf and NaN values template T clamp_float(T d) { if (std::isnan(d) || std::numeric_limits::infinity() == d) { return std::numeric_limits::max(); } if (-std::numeric_limits::infinity() == d) { return std::numeric_limits::lowest(); } return d; } template Array make_array(Args... args) { Array a; // TODO: check why a.values.emplace_back(args...); is not an option here append_to_container(a.values, args...); return a; } // Easy acces to object hierachies inline Value &get(Value &value) { return value; } template Value &get(Value &value, const char *key, Keys... keys) { using recursive_object_t = mapbox::util::recursive_wrapper; return get(value.get().get().values[key], keys...); } template Value &get(Value &value, unsigned key, Keys... keys) { using recursive_array_t = mapbox::util::recursive_wrapper; return get(value.get().get().values[key], keys...); } } // namespace json } // namespace util } // namespace osrm #endif // JSON_UTIL_HPP