Merge pull request #1292 from Project-OSRM/feature/json_lib_interface

Feature/json lib interface
This commit is contained in:
Dennis Luxen 2015-01-06 15:27:40 +01:00
commit e296264ea6
62 changed files with 1052 additions and 1196 deletions

View File

@ -71,7 +71,7 @@ file(GLOB ServerGlob Server/*.cpp)
file(GLOB DescriptorGlob descriptors/*.cpp) file(GLOB DescriptorGlob descriptors/*.cpp)
file(GLOB DatastructureGlob data_structures/search_engine_data.cpp data_structures/route_parameters.cpp Util/bearing.cpp) file(GLOB DatastructureGlob data_structures/search_engine_data.cpp data_structures/route_parameters.cpp Util/bearing.cpp)
list(REMOVE_ITEM DatastructureGlob data_structures/Coordinate.cpp) list(REMOVE_ITEM DatastructureGlob data_structures/Coordinate.cpp)
file(GLOB CoordinateGlob data_structures/Coordinate.cpp) file(GLOB CoordinateGlob data_structures/coordinate.cpp)
file(GLOB AlgorithmGlob algorithms/*.cpp) file(GLOB AlgorithmGlob algorithms/*.cpp)
file(GLOB HttpGlob Server/Http/*.cpp) file(GLOB HttpGlob Server/Http/*.cpp)
file(GLOB LibOSRMGlob Library/*.cpp) file(GLOB LibOSRMGlob Library/*.cpp)
@ -299,7 +299,7 @@ if(WITH_TOOLS OR BUILD_TOOLS)
else() else()
message(FATAL_ERROR "libgdal and/or development headers not found") message(FATAL_ERROR "libgdal and/or development headers not found")
endif() endif()
add_executable(osrm-cli tools/simpleclient.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:LOGGER>) add_executable(osrm-cli tools/simpleclient.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:COORDINATE>)
target_link_libraries(osrm-cli ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM) target_link_libraries(osrm-cli ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
target_link_libraries(osrm-cli ${TBB_LIBRARIES}) target_link_libraries(osrm-cli ${TBB_LIBRARIES})
add_executable(osrm-io-benchmark tools/io-benchmark.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER>) add_executable(osrm-io-benchmark tools/io-benchmark.cpp $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER>)
@ -321,7 +321,8 @@ if(WITH_TOOLS OR BUILD_TOOLS)
install(TARGETS osrm-springclean DESTINATION bin) install(TARGETS osrm-springclean DESTINATION bin)
endif() endif()
file(GLOB InstallGlob Include/osrm/*.h Library/OSRM.h) file(GLOB InstallGlob Include/osrm/*.hpp Library/OSRM.h)
file(GLOB VariantGlob Include/variant/*.hpp)
# Add RPATH info to executables so that when they are run after being installed # Add RPATH info to executables so that when they are run after being installed
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For # (i.e., from /usr/local/bin/) the linker can find library dependencies. For
@ -332,6 +333,7 @@ set_property(TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE) set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
install(FILES ${InstallGlob} DESTINATION include/osrm) install(FILES ${InstallGlob} DESTINATION include/osrm)
install(FILES ${VariantGlob} DESTINATION include/variant)
install(TARGETS osrm-extract DESTINATION bin) install(TARGETS osrm-extract DESTINATION bin)
install(TARGETS osrm-prepare DESTINATION bin) install(TARGETS osrm-prepare DESTINATION bin)
install(TARGETS osrm-datastore DESTINATION bin) install(TARGETS osrm-datastore DESTINATION bin)

View File

@ -25,8 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef FIXED_POINT_COORDINATE_H_ #ifndef COORDINATE_HPP_
#define FIXED_POINT_COORDINATE_H_ #define COORDINATE_HPP_
#include <iosfwd> //for std::ostream #include <iosfwd> //for std::ostream
#include <string> #include <string>
@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace namespace
{ {
constexpr float COORDINATE_PRECISION = 1000000.f; constexpr static const float COORDINATE_PRECISION = 1000000.f;
} }
struct FixedPointCoordinate struct FixedPointCoordinate
{ {
@ -110,4 +110,4 @@ inline std::ostream &operator<<(std::ostream &out_stream, FixedPointCoordinate c
return out_stream; return out_stream;
} }
#endif /* FIXED_POINT_COORDINATE_H_ */ #endif /* COORDINATE_HPP_ */

View File

@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ROUTE_PARAMETERS_H #ifndef ROUTE_PARAMETERS_H
#define ROUTE_PARAMETERS_H #define ROUTE_PARAMETERS_H
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp> #include <boost/fusion/container/vector/vector_fwd.hpp>

View File

@ -28,16 +28,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef OSRM_H #ifndef OSRM_H
#define OSRM_H #define OSRM_H
#include <osrm/ServerPaths.h> #include <osrm/server_paths.hpp>
#include <memory> #include <memory>
class OSRM_impl; class OSRM_impl;
struct RouteParameters; struct RouteParameters;
namespace http namespace JSON
{ {
class Reply; struct Object;
} }
class OSRM class OSRM
@ -48,7 +48,7 @@ class OSRM
public: public:
explicit OSRM(ServerPaths paths, const bool use_shared_memory = false); explicit OSRM(ServerPaths paths, const bool use_shared_memory = false);
~OSRM(); ~OSRM();
void RunQuery(RouteParameters &route_parameters, http::Reply &reply); int RunQuery(RouteParameters &route_parameters, JSON::Object &json_result);
}; };
#endif // OSRM_H #endif // OSRM_H

View File

@ -30,10 +30,6 @@ namespace boost { namespace interprocess { class named_mutex; } }
#include "OSRM_impl.h" #include "OSRM_impl.h"
#include "OSRM.h" #include "OSRM.h"
#include <osrm/Reply.h>
#include <osrm/RouteParameters.h>
#include <osrm/ServerPaths.h>
#include "../plugins/distance_table.hpp" #include "../plugins/distance_table.hpp"
#include "../plugins/hello_world.hpp" #include "../plugins/hello_world.hpp"
#include "../plugins/locate.hpp" #include "../plugins/locate.hpp"
@ -52,6 +48,9 @@ namespace boost { namespace interprocess { class named_mutex; } }
#include <boost/interprocess/sync/named_condition.hpp> #include <boost/interprocess/sync/named_condition.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp> #include <boost/interprocess/sync/scoped_lock.hpp>
#include <osrm/route_parameters.hpp>
#include <osrm/server_paths.hpp>
#include <algorithm> #include <algorithm>
#include <fstream> #include <fstream>
#include <utility> #include <utility>
@ -99,13 +98,12 @@ void OSRM_impl::RegisterPlugin(BasePlugin *plugin)
plugin_map.emplace(plugin->GetDescriptor(), plugin); plugin_map.emplace(plugin->GetDescriptor(), plugin);
} }
void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply) int OSRM_impl::RunQuery(RouteParameters &route_parameters, JSON::Object &json_result)
{ {
const PluginMap::const_iterator &iter = plugin_map.find(route_parameters.service); const PluginMap::const_iterator &iter = plugin_map.find(route_parameters.service);
if (plugin_map.end() != iter) if (plugin_map.end() != iter)
{ {
reply.status = http::Reply::ok;
if (barrier) if (barrier)
{ {
// lock update pending // lock update pending
@ -126,7 +124,7 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
->CheckAndReloadFacade(); ->CheckAndReloadFacade();
} }
iter->second->HandleRequest(route_parameters, reply); iter->second->HandleRequest(route_parameters, json_result);
if (barrier) if (barrier)
{ {
// lock query // lock query
@ -143,10 +141,11 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)
barrier->no_running_queries_condition.notify_all(); barrier->no_running_queries_condition.notify_all();
} }
} }
return 200;
} }
else else
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
} }
} }
@ -159,7 +158,7 @@ OSRM::OSRM(ServerPaths paths, const bool use_shared_memory)
OSRM::~OSRM() { OSRM_pimpl_.reset(); } OSRM::~OSRM() { OSRM_pimpl_.reset(); }
void OSRM::RunQuery(RouteParameters &route_parameters, http::Reply &reply) int OSRM::RunQuery(RouteParameters &route_parameters, JSON::Object &json_result)
{ {
OSRM_pimpl_->RunQuery(route_parameters, reply); return OSRM_pimpl_->RunQuery(route_parameters, json_result);
} }

View File

@ -32,7 +32,8 @@ class BasePlugin;
namespace http { class Reply; } namespace http { class Reply; }
struct RouteParameters; struct RouteParameters;
#include <osrm/ServerPaths.h> #include <osrm/json_container.hpp>
#include <osrm/server_paths.hpp>
#include "../data_structures/query_edge.hpp" #include "../data_structures/query_edge.hpp"
@ -52,7 +53,7 @@ class OSRM_impl
OSRM_impl(ServerPaths paths, const bool use_shared_memory); OSRM_impl(ServerPaths paths, const bool use_shared_memory);
OSRM_impl(const OSRM_impl &) = delete; OSRM_impl(const OSRM_impl &) = delete;
virtual ~OSRM_impl(); virtual ~OSRM_impl();
void RunQuery(RouteParameters &route_parameters, http::Reply &reply); int RunQuery(RouteParameters &route_parameters, JSON::Object &json_result);
private: private:
void RegisterPlugin(BasePlugin *plugin); void RegisterPlugin(BasePlugin *plugin);

View File

@ -30,10 +30,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// #include "RequestParser.h" // #include "RequestParser.h"
#include "Http/CompressionType.h" #include "Http/CompressionType.h"
#include "Http/Reply.h"
#include "Http/Request.h" #include "Http/Request.h"
#include <osrm/Reply.h>
#include <boost/array.hpp> #include <boost/array.hpp>
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/config.hpp> #include <boost/config.hpp>

View File

@ -39,7 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../../Util/string_util.hpp" #include "../../Util/string_util.hpp"
#include "../../typedefs.h" #include "../../typedefs.h"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <string> #include <string>

View File

@ -43,8 +43,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../../Util/graph_loader.hpp" #include "../../Util/graph_loader.hpp"
#include "../../Util/simple_logger.hpp" #include "../../Util/simple_logger.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <osrm/ServerPaths.h> #include <osrm/server_paths.hpp>
template <class EdgeDataT> class InternalDataFacade : public BaseDataFacade<EdgeDataT> template <class EdgeDataT> class InternalDataFacade : public BaseDataFacade<EdgeDataT>
{ {

View File

@ -25,7 +25,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <osrm/Reply.h> #include "Reply.h"
#include "../../Util/cast.hpp" #include "../../Util/cast.hpp"

View File

@ -28,17 +28,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "RequestHandler.h" #include "RequestHandler.h"
#include "APIGrammar.h" #include "APIGrammar.h"
#include "Http/Reply.h"
#include "Http/Request.h" #include "Http/Request.h"
#include "../data_structures/json_container.hpp"
#include "../Library/OSRM.h" #include "../Library/OSRM.h"
#include "../Util/json_renderer.hpp" #include "../Util/json_renderer.hpp"
#include "../Util/simple_logger.hpp" #include "../Util/simple_logger.hpp"
#include "../Util/string_util.hpp" #include "../Util/string_util.hpp"
#include "../Util/xml_renderer.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Reply.h> #include <osrm/route_parameters.hpp>
#include <osrm/RouteParameters.h> #include <osrm/json_container.hpp>
#include <ctime> #include <ctime>
@ -84,13 +85,14 @@ void RequestHandler::handle_request(const http::Request &req, http::Reply &reply
auto iter = request.begin(); auto iter = request.begin();
const bool result = boost::spirit::qi::parse(iter, request.end(), api_parser); const bool result = boost::spirit::qi::parse(iter, request.end(), api_parser);
JSON::Object json_result;
// check if the was an error with the request // check if the was an error with the request
if (!result || (iter != request.end())) if (!result || (iter != request.end()))
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); reply = http::Reply::StockReply(http::Reply::badRequest);
reply.content.clear(); reply.content.clear();
const auto position = std::distance(request.begin(), iter); const auto position = std::distance(request.begin(), iter);
JSON::Object json_result;
json_result.values["status"] = 400; json_result.values["status"] = 400;
std::string message = "Query string malformed close to position "; std::string message = "Query string malformed close to position ";
message += cast::integral_to_string(position); message += cast::integral_to_string(position);
@ -107,29 +109,41 @@ void RequestHandler::handle_request(const http::Request &req, http::Reply &reply
const std::string json_p = (route_parameters.jsonp_parameter + "("); const std::string json_p = (route_parameters.jsonp_parameter + "(");
reply.content.insert(reply.content.end(), json_p.begin(), json_p.end()); reply.content.insert(reply.content.end(), json_p.begin(), json_p.end());
} }
routing_machine->RunQuery(route_parameters, reply); const auto return_code = routing_machine->RunQuery(route_parameters, json_result);
if (!route_parameters.jsonp_parameter.empty()) if (200 != return_code)
{ // append brace to jsonp response {
reply.content.push_back(')'); reply = http::Reply::StockReply(http::Reply::badRequest);
reply.content.clear();
json_result.values["status"] = 400;
std::string message = "Bad Request";
json_result.values["status_message"] = message;
JSON::render(reply.content, json_result);
return;
} }
// set headers // set headers
reply.headers.emplace_back("Content-Length", cast::integral_to_string(reply.content.size())); reply.headers.emplace_back("Content-Length", cast::integral_to_string(reply.content.size()));
if ("gpx" == route_parameters.output_format) if ("gpx" == route_parameters.output_format)
{ // gpx file { // gpx file
JSON::gpx_render(reply.content, json_result.values["route"]);
reply.headers.emplace_back("Content-Type", "application/gpx+xml; charset=UTF-8"); reply.headers.emplace_back("Content-Type", "application/gpx+xml; charset=UTF-8");
reply.headers.emplace_back("Content-Disposition", "attachment; filename=\"route.gpx\""); reply.headers.emplace_back("Content-Disposition", "attachment; filename=\"route.gpx\"");
} }
else if (route_parameters.jsonp_parameter.empty()) else if (route_parameters.jsonp_parameter.empty())
{ // json file { // json file
JSON::render(reply.content, json_result);
reply.headers.emplace_back("Content-Type", "application/json; charset=UTF-8"); reply.headers.emplace_back("Content-Type", "application/json; charset=UTF-8");
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.json\""); reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.json\"");
} }
else else
{ // jsonp { // jsonp
JSON::render(reply.content, json_result);
reply.headers.emplace_back("Content-Type", "text/javascript; charset=UTF-8"); reply.headers.emplace_back("Content-Type", "text/javascript; charset=UTF-8");
reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.js\""); reply.headers.emplace_back("Content-Disposition", "inline; filename=\"response.js\"");
} }
if (!route_parameters.jsonp_parameter.empty())
{ // append brace to jsonp response
reply.content.push_back(')');
}
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {

View File

@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define REQUEST_PARSER_H #define REQUEST_PARSER_H
#include "Http/CompressionType.h" #include "Http/CompressionType.h"
#include <osrm/Header.h> #include "Http/Header.h"
#include <boost/logic/tribool.hpp> #include <boost/logic/tribool.hpp>
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>

View File

@ -27,12 +27,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../../algorithms/douglas_peucker.hpp" #include "../../algorithms/douglas_peucker.hpp"
#include "../../data_structures/segment_information.hpp" #include "../../data_structures/segment_information.hpp"
#include "../../Include/osrm/Coordinate.h"
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <boost/test/test_case_template.hpp> #include <boost/test/test_case_template.hpp>
#include <boost/mpl/list.hpp> #include <boost/mpl/list.hpp>
#include <osrm/coordinate.hpp>
#include <iostream> #include <iostream>
BOOST_AUTO_TEST_SUITE(douglas_peucker) BOOST_AUTO_TEST_SUITE(douglas_peucker)

View File

@ -31,12 +31,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../../Util/floating_point.hpp" #include "../../Util/floating_point.hpp"
#include "../../typedefs.h" #include "../../typedefs.h"
#include <osrm/Coordinate.h>
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <boost/test/test_case_template.hpp> #include <boost/test/test_case_template.hpp>
#include <boost/mpl/list.hpp> #include <boost/mpl/list.hpp>
#include <osrm/coordinate.hpp>
#include <random> #include <random>
#include <unordered_set> #include <unordered_set>

View File

@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "osrm_exception.hpp" #include "osrm_exception.hpp"
#include "simple_logger.hpp" #include "simple_logger.hpp"
#include <osrm/ServerPaths.h> #include <osrm/server_paths.hpp>
#include <boost/any.hpp> #include <boost/any.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>

View File

@ -33,11 +33,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "osrm_exception.hpp" #include "osrm_exception.hpp"
#include "simple_logger.hpp" #include "simple_logger.hpp"
#include <osrm/ServerPaths.h>
#include <boost/any.hpp> #include <boost/any.hpp>
#include <boost/program_options.hpp> #include <boost/program_options.hpp>
#include <osrm/server_paths.hpp>
#include <fstream> #include <fstream>
#include <string> #include <string>

View File

@ -29,7 +29,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "TrigonometryTables.h" #include "TrigonometryTables.h"
#include "../Util/MercatorUtil.h" #include "../Util/MercatorUtil.h"
#include <osrm/Coordinate.h>
#include <osrm/coordinate.hpp>
#include <cmath> #include <cmath>

View File

@ -31,9 +31,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef JSON_RENDERER_HPP #ifndef JSON_RENDERER_HPP
#define JSON_RENDERER_HPP #define JSON_RENDERER_HPP
#include "../data_structures/json_container.hpp"
#include "cast.hpp" #include "cast.hpp"
#include <osrm/json_container.hpp>
namespace JSON { namespace JSON {
struct Renderer : mapbox::util::static_visitor<> struct Renderer : mapbox::util::static_visitor<>

View File

@ -28,9 +28,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef XML_RENDERER_HPP #ifndef XML_RENDERER_HPP
#define XML_RENDERER_HPP #define XML_RENDERER_HPP
#include "../data_structures/json_container.hpp"
#include "cast.hpp" #include "cast.hpp"
#include <osrm/json_container.hpp>
namespace JSON { namespace JSON {
struct XMLToArrayRenderer : mapbox::util::static_visitor<> struct XMLToArrayRenderer : mapbox::util::static_visitor<>

View File

@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../data_structures/segment_information.hpp" #include "../data_structures/segment_information.hpp"
#include "../Util/integer_range.hpp" #include "../Util/integer_range.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <boost/assert.hpp> #include <boost/assert.hpp>

View File

@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "polyline_compressor.hpp" #include "polyline_compressor.hpp"
#include "../data_structures/segment_information.hpp" #include "../data_structures/segment_information.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
std::string PolylineCompressor::encode_vector(std::vector<int> &numbers) const std::string PolylineCompressor::encode_vector(std::vector<int> &numbers) const
{ {

View File

@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "polyline_compressor.hpp" #include "polyline_compressor.hpp"
#include "../data_structures/segment_information.hpp" #include "../data_structures/segment_information.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
JSON::String JSON::String
PolylineFormatter::printEncodedString(const std::vector<SegmentInformation> &polyline) const PolylineFormatter::printEncodedString(const std::vector<SegmentInformation> &polyline) const

View File

@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
struct SegmentInformation; struct SegmentInformation;
#include "../data_structures/json_container.hpp" #include <osrm/json_container.hpp>
#include <string> #include <string>
#include <vector> #include <vector>

View File

@ -42,7 +42,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/std_hash.hpp" #include "../Util/std_hash.hpp"
#include "../Util/timing_util.hpp" #include "../Util/timing_util.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <boost/assert.hpp> #include <boost/assert.hpp>

View File

@ -29,10 +29,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../data_structures/query_node.hpp" #include "../data_structures/query_node.hpp"
#include "../data_structures/shared_memory_vector_wrapper.hpp" #include "../data_structures/shared_memory_vector_wrapper.hpp"
#include "../data_structures/static_rtree.hpp" #include "../data_structures/static_rtree.hpp"
#include "../data_structures/edge_based_node.hpp"
#include "../Util/BoostFileSystemFix.h" #include "../Util/BoostFileSystemFix.h"
#include "../data_structures/edge_based_node.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <random> #include <random>

View File

@ -1,123 +0,0 @@
/*
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef INPUT_READER_FACTORY_H
#define INPUT_READER_FACTORY_H
#include <boost/assert.hpp>
#include <bzlib.h>
#include <libxml/xmlreader.h>
struct BZ2Context
{
FILE *file;
BZFILE *bz2;
int error;
int nUnused;
char unused[BZ_MAX_UNUSED];
};
int readFromBz2Stream(void *pointer, char *buffer, int len)
{
void *unusedTmpVoid = nullptr;
char *unusedTmp = nullptr;
BZ2Context *context = (BZ2Context *)pointer;
int read = 0;
while (0 == read &&
!(BZ_STREAM_END == context->error && 0 == context->nUnused && feof(context->file)))
{
read = BZ2_bzRead(&context->error, context->bz2, buffer, len);
if (BZ_OK == context->error)
{
return read;
}
else if (BZ_STREAM_END == context->error)
{
BZ2_bzReadGetUnused(&context->error, context->bz2, &unusedTmpVoid, &context->nUnused);
BOOST_ASSERT_MSG(BZ_OK == context->error, "Could not BZ2_bzReadGetUnused");
unusedTmp = (char *)unusedTmpVoid;
for (int i = 0; i < context->nUnused; i++)
{
context->unused[i] = unusedTmp[i];
}
BZ2_bzReadClose(&context->error, context->bz2);
BOOST_ASSERT_MSG(BZ_OK == context->error, "Could not BZ2_bzReadClose");
context->error = BZ_STREAM_END; // set to the stream end for next call to this function
if (0 == context->nUnused && feof(context->file))
{
return read;
}
else
{
context->bz2 = BZ2_bzReadOpen(
&context->error, context->file, 0, 0, context->unused, context->nUnused);
BOOST_ASSERT_MSG(nullptr != context->bz2, "Could not open file");
}
}
else
{
BOOST_ASSERT_MSG(false, "Could not read bz2 file");
}
}
return read;
}
int closeBz2Stream(void *pointer)
{
BZ2Context *context = (BZ2Context *)pointer;
fclose(context->file);
delete context;
return 0;
}
xmlTextReaderPtr inputReaderFactory(const char *name)
{
std::string inputName(name);
if (inputName.find(".osm.bz2") != std::string::npos)
{
BZ2Context *context = new BZ2Context();
context->error = false;
context->file = fopen(name, "r");
int error;
context->bz2 =
BZ2_bzReadOpen(&error, context->file, 0, 0, context->unused, context->nUnused);
if (context->bz2 == nullptr || context->file == nullptr)
{
delete context;
return nullptr;
}
return xmlReaderForIO(readFromBz2Stream, closeBz2Stream, (void *)context, nullptr, nullptr, 0);
}
else
{
return xmlNewTextReaderFilename(name);
}
}
#endif // INPUT_READER_FACTORY_H

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2013, Project OSRM, Dennis Luxen, others Copyright (c) 2015, Project OSRM, Dennis Luxen, others
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
@ -25,7 +25,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <osrm/Coordinate.h>
#include "../Util/MercatorUtil.h" #include "../Util/MercatorUtil.h"
#ifndef NDEBUG #ifndef NDEBUG
#include "../Util/simple_logger.hpp" #include "../Util/simple_logger.hpp"
@ -34,6 +33,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <osrm/coordinate.hpp>
#ifndef NDEBUG #ifndef NDEBUG
#include <bitset> #include <bitset>
#endif #endif

View File

@ -31,10 +31,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../data_structures/travel_mode.hpp" #include "../data_structures/travel_mode.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Coordinate.h>
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <osrm/coordinate.hpp>
#include <limits> #include <limits>
struct EdgeBasedNode struct EdgeBasedNode

View File

@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "hilbert_value.hpp" #include "hilbert_value.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
uint64_t HilbertCode::operator()(const FixedPointCoordinate &current_coordinate) const uint64_t HilbertCode::operator()(const FixedPointCoordinate &current_coordinate) const
{ {

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2014, Project OSRM, Dennis Luxen, others Copyright (c) 2013, Project OSRM, Dennis Luxen, others
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
@ -25,15 +25,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef RAW_ROUTE_DATA_HPP #ifndef RAW_ROUTE_DATA_H
#define RAW_ROUTE_DATA_HPP #define RAW_ROUTE_DATA_H
#include "../data_structures/phantom_node.hpp" #include "../data_structures/phantom_node.hpp"
#include "../data_structures/travel_mode.hpp" #include "../data_structures/travel_mode.hpp"
#include "../data_structures/turn_instructions.hpp" #include "../data_structures/turn_instructions.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <vector> #include <vector>
@ -63,7 +63,7 @@ struct PathData
TravelMode travel_mode : 4; TravelMode travel_mode : 4;
}; };
struct RawRouteData struct InternalRouteResult
{ {
std::vector<std::vector<PathData>> unpacked_path_segments; std::vector<std::vector<PathData>> unpacked_path_segments;
std::vector<PathData> unpacked_alternative; std::vector<PathData> unpacked_alternative;
@ -80,11 +80,11 @@ struct RawRouteData
return (leg != unpacked_path_segments.size() - 1); return (leg != unpacked_path_segments.size() - 1);
} }
RawRouteData() : InternalRouteResult() :
shortest_path_length(INVALID_EDGE_WEIGHT), shortest_path_length(INVALID_EDGE_WEIGHT),
alternative_path_length(INVALID_EDGE_WEIGHT) alternative_path_length(INVALID_EDGE_WEIGHT)
{ {
} }
}; };
#endif // RAW_ROUTE_DATA_HPP #endif // RAW_ROUTE_DATA_H

View File

@ -28,10 +28,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef PHANTOM_NODES_H #ifndef PHANTOM_NODES_H
#define PHANTOM_NODES_H #define PHANTOM_NODES_H
#include <osrm/Coordinate.h> #include "travel_mode.hpp"
#include "../data_structures/travel_mode.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/coordinate.hpp>
#include <iostream> #include <iostream>
#include <vector> #include <vector>

View File

@ -30,10 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Coordinate.h>
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <osrm/coordinate.hpp>
#include <limits> #include <limits>
struct QueryNode struct QueryNode

View File

@ -25,12 +25,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <osrm/RouteParameters.h>
#include <boost/fusion/container/vector.hpp> #include <boost/fusion/container/vector.hpp>
#include <boost/fusion/sequence/intrinsic.hpp> #include <boost/fusion/sequence/intrinsic.hpp>
#include <boost/fusion/include/at_c.hpp> #include <boost/fusion/include/at_c.hpp>
#include <osrm/route_parameters.hpp>
RouteParameters::RouteParameters() RouteParameters::RouteParameters()
: zoom_level(18), print_instructions(false), alternate_route(true), geometry(true), : zoom_level(18), print_instructions(false), alternate_route(true), geometry(true),
compression(true), deprecatedAPI(false), uturn_default(false), check_sum(-1), num_results(1) compression(true), deprecatedAPI(false), uturn_default(false), check_sum(-1), num_results(1)

View File

@ -33,7 +33,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../data_structures/travel_mode.hpp" #include "../data_structures/travel_mode.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
// Struct fits everything in one cache line // Struct fits everything in one cache line
struct SegmentInformation struct SegmentInformation

View File

@ -44,7 +44,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/timing_util.hpp" #include "../Util/timing_util.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>

View File

@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "Util/FingerPrint.h" #include "Util/FingerPrint.h"
#include "typedefs.h" #include "typedefs.h"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
using RTreeLeaf = BaseDataFacade<QueryEdge::EdgeData>::RTreeLeaf; using RTreeLeaf = BaseDataFacade<QueryEdge::EdgeData>::RTreeLeaf;
using RTreeNode = StaticRTree<RTreeLeaf, ShM<FixedPointCoordinate, true>::vector, true>::TreeNode; using RTreeNode = StaticRTree<RTreeLeaf, ShM<FixedPointCoordinate, true>::vector, true>::TreeNode;

View File

@ -27,11 +27,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "description_factory.hpp" #include "description_factory.hpp"
#include <osrm/Coordinate.h>
#include "../typedefs.h" #include "../typedefs.h"
#include "../algorithms/polyline_formatter.hpp" #include "../algorithms/polyline_formatter.hpp"
#include "../data_structures/raw_route_data.hpp" #include "../data_structures/internal_route_result.hpp"
#include "../data_structures/turn_instructions.hpp" #include "../data_structures/turn_instructions.hpp"
DescriptionFactory::DescriptionFactory() : entire_length(0) { via_indices.push_back(0); } DescriptionFactory::DescriptionFactory() : entire_length(0) { via_indices.push_back(0); }

View File

@ -30,14 +30,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../algorithms/douglas_peucker.hpp" #include "../algorithms/douglas_peucker.hpp"
#include "../data_structures/phantom_node.hpp" #include "../data_structures/phantom_node.hpp"
#include "../data_structures/json_container.hpp"
#include "../data_structures/segment_information.hpp" #include "../data_structures/segment_information.hpp"
#include "../data_structures/turn_instructions.hpp" #include "../data_structures/turn_instructions.hpp"
#include "../typedefs.h"
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <osrm/json_container.hpp>
#include <cmath> #include <cmath>

View File

@ -28,17 +28,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef DESCRIPTOR_BASE_HPP #ifndef DESCRIPTOR_BASE_HPP
#define DESCRIPTOR_BASE_HPP #define DESCRIPTOR_BASE_HPP
#include "../data_structures/internal_route_result.hpp"
#include "../data_structures/phantom_node.hpp" #include "../data_structures/phantom_node.hpp"
#include "../data_structures/raw_route_data.hpp"
#include "../typedefs.h" #include "../typedefs.h"
#include <osrm/Reply.h> #include <osrm/json_container.hpp>
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
struct DescriptorTable : public std::unordered_map<std::string, unsigned> struct DescriptorTable : public std::unordered_map<std::string, unsigned>
{ {
unsigned get_id(const std::string &key) unsigned get_id(const std::string &key)
@ -80,8 +79,8 @@ template <class DataFacadeT> class BaseDescriptor
BaseDescriptor() {} BaseDescriptor() {}
// Maybe someone can explain the pure virtual destructor thing to me (dennis) // Maybe someone can explain the pure virtual destructor thing to me (dennis)
virtual ~BaseDescriptor() {} virtual ~BaseDescriptor() {}
virtual void Run(const RawRouteData &raw_route, http::Reply &reply) = 0; virtual void Run(const InternalRouteResult &, JSON::Object &) = 0;
virtual void SetConfig(const DescriptorConfig &config) = 0; virtual void SetConfig(const DescriptorConfig &) = 0;
}; };
#endif // DESCRIPTOR_BASE_HPP #endif // DESCRIPTOR_BASE_HPP

View File

@ -29,9 +29,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define GPX_DESCRIPTOR_HPP #define GPX_DESCRIPTOR_HPP
#include "descriptor_base.hpp" #include "descriptor_base.hpp"
#include "../data_structures/json_container.hpp"
#include "../Util/xml_renderer.hpp" #include "../Util/xml_renderer.hpp"
#include <osrm/json_container.hpp>
#include <iostream> #include <iostream>
template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<DataFacadeT> template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<DataFacadeT>
@ -40,7 +41,7 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
DescriptorConfig config; DescriptorConfig config;
DataFacadeT *facade; DataFacadeT *facade;
void AddRoutePoint(const FixedPointCoordinate &coordinate, JSON::Array &json_result) void AddRoutePoint(const FixedPointCoordinate &coordinate, JSON::Array &json_route)
{ {
JSON::Object json_lat; JSON::Object json_lat;
JSON::Object json_lon; JSON::Object json_lon;
@ -58,7 +59,7 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
json_row.values.push_back(json_lon); json_row.values.push_back(json_lon);
JSON::Object entry; JSON::Object entry;
entry.values["rtept"] = json_row; entry.values["rtept"] = json_row;
json_result.values.push_back(entry); json_route.values.push_back(entry);
} }
public: public:
@ -66,13 +67,13 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
void SetConfig(const DescriptorConfig &c) final { config = c; } void SetConfig(const DescriptorConfig &c) final { config = c; }
void Run(const RawRouteData &raw_route, http::Reply &reply) final void Run(const InternalRouteResult &raw_route, JSON::Object &json_result) final
{ {
JSON::Array json_result; JSON::Array json_route;
if (raw_route.shortest_path_length != INVALID_EDGE_WEIGHT) if (raw_route.shortest_path_length != INVALID_EDGE_WEIGHT)
{ {
AddRoutePoint(raw_route.segment_end_coordinates.front().source_phantom.location, AddRoutePoint(raw_route.segment_end_coordinates.front().source_phantom.location,
json_result); json_route);
for (const std::vector<PathData> &path_data_vector : raw_route.unpacked_path_segments) for (const std::vector<PathData> &path_data_vector : raw_route.unpacked_path_segments)
{ {
@ -80,13 +81,14 @@ template <class DataFacadeT> class GPXDescriptor final : public BaseDescriptor<D
{ {
const FixedPointCoordinate current_coordinate = const FixedPointCoordinate current_coordinate =
facade->GetCoordinateOfNode(path_data.node); facade->GetCoordinateOfNode(path_data.node);
AddRoutePoint(current_coordinate, json_result); AddRoutePoint(current_coordinate, json_route);
} }
} }
AddRoutePoint(raw_route.segment_end_coordinates.back().target_phantom.location, AddRoutePoint(raw_route.segment_end_coordinates.back().target_phantom.location,
json_result); json_route);
} }
JSON::gpx_render(reply.content, json_result); // JSON::gpx_render(reply.content, json_route);
json_result.values["route"] = json_route;
} }
}; };
#endif // GPX_DESCRIPTOR_HPP #endif // GPX_DESCRIPTOR_HPP

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2014, Project OSRM, Dennis Luxen, others Copyright (c) 2013, Project OSRM, Dennis Luxen, others
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
@ -32,7 +32,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "description_factory.hpp" #include "description_factory.hpp"
#include "../algorithms/object_encoder.hpp" #include "../algorithms/object_encoder.hpp"
#include "../algorithms/route_name_extraction.hpp" #include "../algorithms/route_name_extraction.hpp"
#include "../data_structures/json_container.hpp"
#include "../data_structures/segment_information.hpp" #include "../data_structures/segment_information.hpp"
#include "../data_structures/turn_instructions.hpp" #include "../data_structures/turn_instructions.hpp"
#include "../Util/bearing.hpp" #include "../Util/bearing.hpp"
@ -42,6 +41,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/string_util.hpp" #include "../Util/string_util.hpp"
#include "../Util/timing_util.hpp" #include "../Util/timing_util.hpp"
#include <osrm/json_container.hpp>
#include <algorithm> #include <algorithm>
template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<DataFacadeT> template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<DataFacadeT>
@ -97,15 +98,14 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
return added_element_count; return added_element_count;
} }
void Run(const RawRouteData &raw_route, http::Reply &reply) final void Run(const InternalRouteResult &raw_route, JSON::Object &json_result) final
{ {
JSON::Object json_result;
if (INVALID_EDGE_WEIGHT == raw_route.shortest_path_length) if (INVALID_EDGE_WEIGHT == raw_route.shortest_path_length)
{ {
// We do not need to do much, if there is no route ;-) // We do not need to do much, if there is no route ;-)
json_result.values["status"] = 207; json_result.values["status"] = 207;
json_result.values["status_message"] = "Cannot find route between points"; json_result.values["status_message"] = "Cannot find route between points";
JSON::render(reply.content, json_result); // JSON::render(reply.content, json_result);
return; return;
} }
@ -294,10 +294,10 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
json_result.values["hint_data"] = json_hint_object; json_result.values["hint_data"] = json_hint_object;
// render the content to the output array // render the content to the output array
TIMER_START(route_render); // TIMER_START(route_render);
JSON::render(reply.content, json_result); // JSON::render(reply.content, json_result);
TIMER_STOP(route_render); // TIMER_STOP(route_render);
SimpleLogger().Write(logDEBUG) << "rendering took: " << TIMER_MSEC(route_render); // SimpleLogger().Write(logDEBUG) << "rendering took: " << TIMER_MSEC(route_render);
} }
// TODO: reorder parameters // TODO: reorder parameters
@ -390,4 +390,4 @@ template <class DataFacadeT> class JSONDescriptor final : public BaseDescriptor<
} }
}; };
#endif /* JSON_DESCRIPTOR_HPP */ #endif /* JSON_DESCRIPTOR_H_ */

View File

@ -35,7 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/container.hpp" #include "../Util/container.hpp"
#include "../Util/simple_logger.hpp" #include "../Util/simple_logger.hpp"
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <limits> #include <limits>
#include <string> #include <string>

View File

@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../typedefs.h" #include "../typedefs.h"
#include "../data_structures/travel_mode.hpp" #include "../data_structures/travel_mode.hpp"
#include <osrm/Coordinate.h>
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <osrm/coordinate.hpp>
struct InternalExtractorEdge struct InternalExtractorEdge
{ {
InternalExtractorEdge() InternalExtractorEdge()

View File

@ -31,7 +31,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "plugin_base.hpp" #include "plugin_base.hpp"
#include "../algorithms/object_encoder.hpp" #include "../algorithms/object_encoder.hpp"
#include "../data_structures/json_container.hpp"
#include "../data_structures/query_edge.hpp" #include "../data_structures/query_edge.hpp"
#include "../data_structures/search_engine.hpp" #include "../data_structures/search_engine.hpp"
#include "../descriptors/descriptor_base.hpp" #include "../descriptors/descriptor_base.hpp"
@ -40,6 +39,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/string_util.hpp" #include "../Util/string_util.hpp"
#include "../Util/timing_util.hpp" #include "../Util/timing_util.hpp"
#include <osrm/json_container.hpp>
#include <cstdlib> #include <cstdlib>
#include <algorithm> #include <algorithm>
@ -63,12 +64,11 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{ {
if (!check_all_coordinates(route_parameters.coordinates)) if (!check_all_coordinates(route_parameters.coordinates))
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
return;
} }
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum()); const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
@ -102,11 +102,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
if (!result_table) if (!result_table)
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
return;
} }
JSON::Object json_object;
JSON::Array json_array; JSON::Array json_array;
const auto number_of_locations = phantom_node_vector.size(); const auto number_of_locations = phantom_node_vector.size();
for (const auto row : osrm::irange<std::size_t>(0, number_of_locations)) for (const auto row : osrm::irange<std::size_t>(0, number_of_locations))
@ -117,8 +115,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator); json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator);
json_array.values.push_back(json_row); json_array.values.push_back(json_row);
} }
json_object.values["distance_table"] = json_array; json_result.values["distance_table"] = json_array;
JSON::render(reply.content, json_object); // JSON::render(reply.content, json_object);
return 200;
} }
private: private:

View File

@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "plugin_base.hpp" #include "plugin_base.hpp"
#include "../data_structures/json_container.hpp"
#include "../Util/cast.hpp" #include "../Util/cast.hpp"
#include "../Util/json_renderer.hpp" #include "../Util/json_renderer.hpp"
#include <osrm/json_container.hpp>
#include <string> #include <string>
class HelloWorldPlugin final : public BasePlugin class HelloWorldPlugin final : public BasePlugin
@ -46,11 +47,8 @@ class HelloWorldPlugin final : public BasePlugin
virtual ~HelloWorldPlugin() {} virtual ~HelloWorldPlugin() {}
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) final int HandleRequest(const RouteParameters &routeParameters, JSON::Object &json_result) final
{ {
reply.status = http::Reply::ok;
JSON::Object json_result;
std::string temp_string; std::string temp_string;
json_result.values["title"] = "Hello World"; json_result.values["title"] = "Hello World";
@ -96,8 +94,7 @@ class HelloWorldPlugin final : public BasePlugin
++counter; ++counter;
} }
json_result.values["hints"] = json_hints; json_result.values["hints"] = json_hints;
return 200;
JSON::render(reply.content, json_result);
} }
private: private:

View File

@ -30,10 +30,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "plugin_base.hpp" #include "plugin_base.hpp"
#include "../data_structures/json_container.hpp"
#include "../Util/json_renderer.hpp" #include "../Util/json_renderer.hpp"
#include "../Util/string_util.hpp" #include "../Util/string_util.hpp"
#include <osrm/json_container.hpp>
#include <string> #include <string>
// locates the nearest node in the road network for a given coordinate. // locates the nearest node in the road network for a given coordinate.
@ -43,16 +44,14 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
explicit LocatePlugin(DataFacadeT *facade) : descriptor_string("locate"), facade(facade) {} explicit LocatePlugin(DataFacadeT *facade) : descriptor_string("locate"), facade(facade) {}
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{ {
// check number of parameters // check number of parameters
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid()) if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
return;
} }
JSON::Object json_result;
FixedPointCoordinate result; FixedPointCoordinate result;
if (!facade->LocateClosestEndPointForCoordinate(route_parameters.coordinates.front(), if (!facade->LocateClosestEndPointForCoordinate(route_parameters.coordinates.front(),
result)) result))
@ -61,15 +60,13 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
} }
else else
{ {
reply.status = http::Reply::ok;
json_result.values["status"] = 0; json_result.values["status"] = 0;
JSON::Array json_coordinate; JSON::Array json_coordinate;
json_coordinate.values.push_back(result.lat / COORDINATE_PRECISION); json_coordinate.values.push_back(result.lat / COORDINATE_PRECISION);
json_coordinate.values.push_back(result.lon / COORDINATE_PRECISION); json_coordinate.values.push_back(result.lon / COORDINATE_PRECISION);
json_result.values["mapped_coordinate"] = json_coordinate; json_result.values["mapped_coordinate"] = json_coordinate;
} }
return 200;
JSON::render(reply.content, json_result);
} }
private: private:

View File

@ -30,11 +30,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "plugin_base.hpp" #include "plugin_base.hpp"
#include "../data_structures/json_container.hpp"
#include "../data_structures/phantom_node.hpp" #include "../data_structures/phantom_node.hpp"
#include "../Util/integer_range.hpp" #include "../Util/integer_range.hpp"
#include "../Util/json_renderer.hpp" #include "../Util/json_renderer.hpp"
#include <osrm/json_container.hpp>
#include <string> #include <string>
/* /*
@ -48,13 +49,12 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{ {
// check number of parameters // check number of parameters
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid()) if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
return;
} }
auto number_of_results = static_cast<std::size_t>(route_parameters.num_results); auto number_of_results = static_cast<std::size_t>(route_parameters.num_results);
std::vector<PhantomNode> phantom_node_vector; std::vector<PhantomNode> phantom_node_vector;
@ -62,14 +62,13 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
phantom_node_vector, phantom_node_vector,
static_cast<int>(number_of_results)); static_cast<int>(number_of_results));
JSON::Object json_result;
if (phantom_node_vector.empty() || !phantom_node_vector.front().is_valid()) if (phantom_node_vector.empty() || !phantom_node_vector.front().is_valid())
{ {
json_result.values["status"] = 207; json_result.values["status"] = 207;
} }
else else
{ {
reply.status = http::Reply::ok; // reply.status = http::Reply::ok;
json_result.values["status"] = 0; json_result.values["status"] = 0;
if (number_of_results > 1) if (number_of_results > 1)
@ -106,7 +105,7 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
json_result.values["name"] = temp_string; json_result.values["name"] = temp_string;
} }
} }
JSON::render(reply.content, json_result); return 200;
} }
private: private:

View File

@ -28,9 +28,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef BASEPLUGIN_H_ #ifndef BASEPLUGIN_H_
#define BASEPLUGIN_H_ #define BASEPLUGIN_H_
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <osrm/Reply.h> #include <osrm/json_container.hpp>
#include <osrm/RouteParameters.h> #include <osrm/route_parameters.hpp>
#include <string> #include <string>
#include <vector> #include <vector>
@ -42,8 +42,8 @@ class BasePlugin
// Maybe someone can explain the pure virtual destructor thing to me (dennis) // Maybe someone can explain the pure virtual destructor thing to me (dennis)
virtual ~BasePlugin() {} virtual ~BasePlugin() {}
virtual const std::string GetDescriptor() const = 0; virtual const std::string GetDescriptor() const = 0;
virtual void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) = 0; virtual int HandleRequest(const RouteParameters &, JSON::Object &) = 0;
virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> coordinates) const final virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> &coordinates) const final
{ {
if (2 > coordinates.size() || if (2 > coordinates.size() ||
std::any_of(std::begin(coordinates), std::any_of(std::begin(coordinates),

View File

@ -30,9 +30,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "plugin_base.hpp" #include "plugin_base.hpp"
#include "../data_structures/json_container.hpp"
#include "../Util/json_renderer.hpp" #include "../Util/json_renderer.hpp"
#include <osrm/json_container.hpp>
#include <string> #include <string>
template <class DataFacadeT> class TimestampPlugin final : public BasePlugin template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
@ -43,14 +44,12 @@ template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
{ {
} }
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{ {
reply.status = http::Reply::ok;
JSON::Object json_result;
json_result.values["status"] = 0; json_result.values["status"] = 0;
const std::string timestamp = facade->GetTimestamp(); const std::string timestamp = facade->GetTimestamp();
json_result.values["timestamp"] = timestamp; json_result.values["timestamp"] = timestamp;
JSON::render(reply.content, json_result); return 200;
} }
private: private:

View File

@ -40,6 +40,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Util/make_unique.hpp" #include "../Util/make_unique.hpp"
#include "../Util/simple_logger.hpp" #include "../Util/simple_logger.hpp"
#include <osrm/json_container.hpp>
#include <cstdlib> #include <cstdlib>
#include <algorithm> #include <algorithm>
@ -69,14 +71,12 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; } const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{ {
if (!check_all_coordinates(route_parameters.coordinates)) if (!check_all_coordinates(route_parameters.coordinates))
{ {
reply = http::Reply::StockReply(http::Reply::badRequest); return 400;
return;
} }
reply.status = http::Reply::ok;
std::vector<phantom_node_pair> phantom_node_pair_list(route_parameters.coordinates.size()); std::vector<phantom_node_pair> phantom_node_pair_list(route_parameters.coordinates.size());
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum()); const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
@ -143,7 +143,7 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
swap_phantom_from_big_cc_into_front); swap_phantom_from_big_cc_into_front);
} }
RawRouteData raw_route; InternalRouteResult raw_route;
auto build_phantom_pairs = auto build_phantom_pairs =
[&raw_route](const phantom_node_pair &first_pair, const phantom_node_pair &second_pair) [&raw_route](const phantom_node_pair &first_pair, const phantom_node_pair &second_pair)
{ {
@ -183,7 +183,8 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
} }
descriptor->SetConfig(route_parameters); descriptor->SetConfig(route_parameters);
descriptor->Run(raw_route, reply); descriptor->Run(raw_route, json_result);
return 200;
} }
}; };

View File

@ -78,7 +78,7 @@ template <class DataFacadeT> class AlternativeRouting final : private BasicRouti
virtual ~AlternativeRouting() {} virtual ~AlternativeRouting() {}
void operator()(const PhantomNodes &phantom_node_pair, RawRouteData &raw_route_data) void operator()(const PhantomNodes &phantom_node_pair, InternalRouteResult &raw_route_data)
{ {
std::vector<NodeID> alternative_path; std::vector<NodeID> alternative_path;
std::vector<NodeID> via_node_candidate_list; std::vector<NodeID> via_node_candidate_list;

View File

@ -28,10 +28,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ROUTING_BASE_HPP #ifndef ROUTING_BASE_HPP
#define ROUTING_BASE_HPP #define ROUTING_BASE_HPP
#include "../data_structures/raw_route_data.hpp" #include "../data_structures/internal_route_result.hpp"
#include "../data_structures/search_engine_data.hpp" #include "../data_structures/search_engine_data.hpp"
#include "../data_structures/turn_instructions.hpp" #include "../data_structures/turn_instructions.hpp"
// #include "../Util/simple_logger.hpp.h" // #include "../Util/simple_logger.hpp"
#include <boost/assert.hpp> #include <boost/assert.hpp>

View File

@ -51,7 +51,7 @@ template <class DataFacadeT> class ShortestPathRouting final : public BasicRouti
void operator()(const std::vector<PhantomNodes> &phantom_nodes_vector, void operator()(const std::vector<PhantomNodes> &phantom_nodes_vector,
const std::vector<bool> &uturn_indicators, const std::vector<bool> &uturn_indicators,
RawRouteData &raw_route_data) const InternalRouteResult &raw_route_data) const
{ {
int distance1 = 0; int distance1 = 0;
int distance2 = 0; int distance2 = 0;

View File

@ -44,7 +44,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <gdal/ogrsf_frmts.h> #include <gdal/ogrsf_frmts.h>
#endif #endif
#include <osrm/Coordinate.h> #include <osrm/coordinate.hpp>
#include <fstream> #include <fstream>
#include <memory> #include <memory>

View File

@ -27,37 +27,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Library/OSRM.h" #include "../Library/OSRM.h"
#include "../Util/git_sha.hpp" #include "../Util/git_sha.hpp"
#include "../Util/json_renderer.hpp"
#include "../Util/ProgramOptions.h" #include "../Util/ProgramOptions.h"
#include "../Util/simple_logger.hpp" #include "../Util/simple_logger.hpp"
#include <osrm/Reply.h> #include <osrm/json_container.hpp>
#include <osrm/RouteParameters.h> #include <osrm/route_parameters.hpp>
#include <osrm/ServerPaths.h> #include <osrm/server_paths.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
#include <stack>
#include <string> #include <string>
#include <sstream>
// Dude, real recursions on the OS stack? You must be brave...
void print_tree(boost::property_tree::ptree const &property_tree, const unsigned recursion_depth)
{
auto end = property_tree.end();
for (auto tree_iterator = property_tree.begin(); tree_iterator != end; ++tree_iterator)
{
for (unsigned current_recursion = 0; current_recursion < recursion_depth;
++current_recursion)
{
std::cout << " " << std::flush;
}
std::cout << tree_iterator->first << ": " << tree_iterator->second.get_value<std::string>()
<< std::endl;
print_tree(tree_iterator->second, recursion_depth + 1);
}
}
int main(int argc, const char *argv[]) int main(int argc, const char *argv[])
{ {
@ -68,7 +46,6 @@ int main(int argc, const char *argv[])
int ip_port, requested_thread_num; int ip_port, requested_thread_num;
bool use_shared_memory = false, trial_run = false; bool use_shared_memory = false, trial_run = false;
ServerPaths server_paths; ServerPaths server_paths;
const unsigned init_result = GenerateServerProgramOptions(argc, const unsigned init_result = GenerateServerProgramOptions(argc,
argv, argv,
server_paths, server_paths,
@ -78,11 +55,14 @@ int main(int argc, const char *argv[])
use_shared_memory, use_shared_memory,
trial_run); trial_run);
if (init_result == INIT_FAILED) if (init_result == INIT_OK_DO_NOT_START_ENGINE)
{ {
return 0; return 0;
} }
if (init_result == INIT_FAILED)
{
return 1;
}
SimpleLogger().Write() << "starting up engines, " << g_GIT_DESCRIPTION; SimpleLogger().Write() << "starting up engines, " << g_GIT_DESCRIPTION;
OSRM routing_machine(server_paths, use_shared_memory); OSRM routing_machine(server_paths, use_shared_memory);
@ -93,7 +73,7 @@ int main(int argc, const char *argv[])
route_parameters.alternate_route = true; // get an alternate route, too route_parameters.alternate_route = true; // get an alternate route, too
route_parameters.geometry = true; // retrieve geometry of route route_parameters.geometry = true; // retrieve geometry of route
route_parameters.compression = true; // polyline encoding route_parameters.compression = true; // polyline encoding
route_parameters.check_sum = UINT_MAX; // see wiki route_parameters.check_sum = -1; // see wiki
route_parameters.service = "viaroute"; // that's routing route_parameters.service = "viaroute"; // that's routing
route_parameters.output_format = "json"; route_parameters.output_format = "json";
route_parameters.jsonp_parameter = ""; // set for jsonp wrapping route_parameters.jsonp_parameter = ""; // set for jsonp wrapping
@ -106,23 +86,10 @@ int main(int argc, const char *argv[])
// target_coordinate // target_coordinate
route_parameters.coordinates.emplace_back(52.513191 * COORDINATE_PRECISION, route_parameters.coordinates.emplace_back(52.513191 * COORDINATE_PRECISION,
13.415852 * COORDINATE_PRECISION); 13.415852 * COORDINATE_PRECISION);
http::Reply osrm_reply; JSON::Object json_result;
routing_machine.RunQuery(route_parameters, osrm_reply); const int result_code = routing_machine.RunQuery(route_parameters, json_result);
SimpleLogger().Write() << "http code: " << result_code;
// attention: super-inefficient hack below: JSON::render(SimpleLogger().Write(), json_result);
std::stringstream my_stream;
for (const auto &element : osrm_reply.content)
{
std::cout << element;
my_stream << element;
}
std::cout << std::endl;
boost::property_tree::ptree property_tree;
boost::property_tree::read_json(my_stream, property_tree);
print_tree(property_tree, 0);
} }
catch (std::exception &current_exception) catch (std::exception &current_exception)
{ {