diff --git a/include/engine/engine.hpp b/include/engine/engine.hpp index 13032006f..3e418b722 100644 --- a/include/engine/engine.hpp +++ b/include/engine/engine.hpp @@ -29,16 +29,16 @@ namespace api struct RouteParameters; struct TableParameters; struct NearestParameters; -// struct TripParameters; -// struct MatchParameters; +struct TripParameters; +struct MatchParameters; } namespace plugins { class ViaRoutePlugin; class TablePlugin; class NearestPlugin; -// class TripPlugin; -// class MatchPlugin; +class TripPlugin; +class MatchPlugin; } // End fwd decls @@ -64,8 +64,8 @@ class Engine final Status Route(const api::RouteParameters ¶meters, util::json::Object &result); Status Table(const api::TableParameters ¶meters, util::json::Object &result); Status Nearest(const api::NearestParameters ¶meters, util::json::Object &result); - // Status Trip(const api::TripParameters ¶meters, util::json::Object &result); - // Status Match(const api::MatchParameters ¶meters, util::json::Object &result); + Status Trip(const api::TripParameters ¶meters, util::json::Object &result); + Status Match(const api::MatchParameters ¶meters, util::json::Object &result); private: std::unique_ptr lock; diff --git a/include/osrm/osrm.hpp b/include/osrm/osrm.hpp index 69ac8126b..b8fbe0362 100644 --- a/include/osrm/osrm.hpp +++ b/include/osrm/osrm.hpp @@ -47,27 +47,32 @@ struct Object; namespace engine { class Engine; + struct EngineConfig; namespace api { struct RouteParameters; struct TableParameters; struct NearestParameters; -// struct TripParameters; -// struct MatchParameters; +struct TripParameters; +struct MatchParameters; } } + // End fwd decls using engine::EngineConfig; using engine::api::RouteParameters; using engine::api::TableParameters; using engine::api::NearestParameters; -// using engine::api::TripParameters; -// using engine::api::MatchParameters; +using engine::api::TripParameters; +using engine::api::MatchParameters; + namespace json = util::json; -class OSRM +// OSRM API + +class OSRM final { public: explicit OSRM(EngineConfig &config); @@ -79,8 +84,8 @@ class OSRM Status Route(const RouteParameters ¶meters, json::Object &result); Status Table(const TableParameters ¶meters, json::Object &result); Status Nearest(const NearestParameters ¶meters, json::Object &result); - // Status Trip(const TripParameters ¶meters, json::Object &result); - // Status Match(const MatchParameters ¶meters, json::Object &result); + Status Trip(const TripParameters ¶meters, json::Object &result); + Status Match(const MatchParameters ¶meters, json::Object &result); private: std::unique_ptr engine_; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ef37a496e..ce5a264dd 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -113,6 +113,13 @@ osrm::engine::Status RunQuery(const std::unique_ptrDecreaseQueryCount(); return status; } + +template +std::unique_ptr create(Facade &facade, Args... args) +{ + return osrm::util::make_unique(facade, std::forward(args)...); +} + } // anon. ns namespace osrm @@ -133,10 +140,14 @@ Engine::Engine(EngineConfig &config) query_data_facade = util::make_unique(config.server_paths); } - route_plugin = util::make_unique(*query_data_facade, - config.max_locations_viaroute); - table_plugin = util::make_unique(*query_data_facade, - config.max_locations_distance_table); + // Register plugins + using namespace plugins; + + route_plugin = create(*query_data_facade, config.max_locations_viaroute); + table_plugin = create(*query_data_facade, config.max_locations_distance_table); + nearest_plugin = create(*query_data_facade); + // trip_plugin = ceate(*query_data_facade, config.max_locations_trip); + // match_plugin = create(*query_data_facade, config.max_locations_map_matching); } // make sure we deallocate the unique ptr at a position where we know the size of the plugins @@ -159,15 +170,17 @@ Status Engine::Nearest(const api::NearestParameters ¶ms, util::json::Object return RunQuery(lock, *query_data_facade, params, *nearest_plugin, result); } -//Status Engine::Trip(const api::TripParameters ¶ms, util::json::Object &result) -//{ -// return RunQuery(lock, *query_data_facade, params, *trip_plugin, result); -//} -// -//Status Engine::Match(const api::MatchParameters ¶ms, util::json::Object &result) -//{ -// return RunQuery(lock, *query_data_facade, params, *match_plugin, result); -//} +Status Engine::Trip(const api::TripParameters ¶ms, util::json::Object &result) +{ + // return RunQuery(lock, *query_data_facade, params, *trip_plugin, result); + return Status::Error; +} + +Status Engine::Match(const api::MatchParameters ¶ms, util::json::Object &result) +{ + // return RunQuery(lock, *query_data_facade, params, *match_plugin, result); + return Status::Error; +} } // engine ns } // osrm ns diff --git a/src/osrm/osrm.cpp b/src/osrm/osrm.cpp index 589a6cb3b..546821c74 100644 --- a/src/osrm/osrm.cpp +++ b/src/osrm/osrm.cpp @@ -2,8 +2,8 @@ #include "engine/api/route_parameters.hpp" #include "engine/api/table_parameters.hpp" #include "engine/api/nearest_parameters.hpp" -//#include "engine/api/trip_parameters.hpp" -//#include "engine/api/match_parameters.hpp" +#include "engine/api/trip_parameters.hpp" +#include "engine/api/match_parameters.hpp" #include "engine/engine.hpp" #include "engine/status.hpp" #include "engine/engine_config.hpp" @@ -36,14 +36,14 @@ engine::Status OSRM::Nearest(const engine::api::NearestParameters ¶ms, json: return engine_->Nearest(params, result); } -//engine::Status OSRM::Trip(const engine::api::TripParameters ¶ms, json::Object &result) -//{ -// return engine_->Trip(params, result); -//} -// -//engine::Status OSRM::Match(const engine::api::MatchParameters ¶ms, json::Object &result) -//{ -// return engine_->Match(params, result); -//} +engine::Status OSRM::Trip(const engine::api::TripParameters ¶ms, json::Object &result) +{ + return engine_->Trip(params, result); +} + +engine::Status OSRM::Match(const engine::api::MatchParameters ¶ms, json::Object &result) +{ + return engine_->Match(params, result); +} } // ns osrm