Makes the OSRM interface threadsafe.
Technically speaking we're changing the `libosrm` API. But since we're only lifting restrictions by marking the API threadsafe, we should be fine here.
This commit is contained in:
parent
d86bba3e24
commit
d17eacc52b
@ -34,7 +34,7 @@ int main(int argc, const char *argv[])
|
||||
config.use_shared_memory = false;
|
||||
|
||||
// Routing machine with several services (such as Route, Table, Nearest, Trip, Match)
|
||||
OSRM osrm{config};
|
||||
const OSRM osrm{config};
|
||||
|
||||
// The following shows how to use the Route service; configure this service
|
||||
RouteParameters params;
|
||||
|
@ -55,7 +55,7 @@ class Engine final
|
||||
// Needs to be public
|
||||
struct EngineLock;
|
||||
|
||||
explicit Engine(EngineConfig &config);
|
||||
explicit Engine(const EngineConfig &config);
|
||||
|
||||
Engine(Engine &&) noexcept;
|
||||
Engine &operator=(Engine &&) noexcept;
|
||||
@ -63,12 +63,12 @@ class Engine final
|
||||
// Impl. in cpp since for unique_ptr of incomplete types
|
||||
~Engine();
|
||||
|
||||
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 Tile(const api::TileParameters ¶meters, std::string &result);
|
||||
Status Route(const api::RouteParameters ¶meters, util::json::Object &result) const;
|
||||
Status Table(const api::TableParameters ¶meters, util::json::Object &result) const;
|
||||
Status Nearest(const api::NearestParameters ¶meters, util::json::Object &result) const;
|
||||
Status Trip(const api::TripParameters ¶meters, util::json::Object &result) const;
|
||||
Status Match(const api::MatchParameters ¶meters, util::json::Object &result) const;
|
||||
Status Tile(const api::TileParameters ¶meters, std::string &result) const;
|
||||
|
||||
private:
|
||||
std::unique_ptr<EngineLock> lock;
|
||||
|
@ -83,7 +83,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, RouteParameters and json::Object
|
||||
*/
|
||||
Status Route(const RouteParameters ¶meters, json::Object &result);
|
||||
Status Route(const RouteParameters ¶meters, json::Object &result) const;
|
||||
|
||||
/**
|
||||
* Distance tables for coordinates.
|
||||
@ -92,7 +92,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TableParameters and json::Object
|
||||
*/
|
||||
Status Table(const TableParameters ¶meters, json::Object &result);
|
||||
Status Table(const TableParameters ¶meters, json::Object &result) const;
|
||||
|
||||
/**
|
||||
* Nearest street segment for coordinate.
|
||||
@ -101,7 +101,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, NearestParameters and json::Object
|
||||
*/
|
||||
Status Nearest(const NearestParameters ¶meters, json::Object &result);
|
||||
Status Nearest(const NearestParameters ¶meters, json::Object &result) const;
|
||||
|
||||
/**
|
||||
* Trip: shortest round trip between coordinates.
|
||||
@ -110,7 +110,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TripParameters and json::Object
|
||||
*/
|
||||
Status Trip(const TripParameters ¶meters, json::Object &result);
|
||||
Status Trip(const TripParameters ¶meters, json::Object &result) const;
|
||||
|
||||
/**
|
||||
* Match: snaps noisy coordinate traces to the road network
|
||||
@ -119,7 +119,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, MatchParameters and json::Object
|
||||
*/
|
||||
Status Match(const MatchParameters ¶meters, json::Object &result);
|
||||
Status Match(const MatchParameters ¶meters, json::Object &result) const;
|
||||
|
||||
/**
|
||||
* Tile: vector tiles with internal graph representation
|
||||
@ -128,7 +128,7 @@ class OSRM final
|
||||
* \return Status indicating success for the query or failure
|
||||
* \see Status, TileParameters and json::Object
|
||||
*/
|
||||
Status Tile(const TileParameters ¶meters, std::string &result);
|
||||
Status Tile(const TileParameters ¶meters, std::string &result) const;
|
||||
|
||||
private:
|
||||
std::unique_ptr<engine::Engine> engine_;
|
||||
|
@ -124,7 +124,7 @@ namespace osrm
|
||||
namespace engine
|
||||
{
|
||||
|
||||
Engine::Engine(EngineConfig &config)
|
||||
Engine::Engine(const EngineConfig &config)
|
||||
{
|
||||
if (config.use_shared_memory)
|
||||
{
|
||||
@ -157,32 +157,32 @@ Engine::~Engine() = default;
|
||||
Engine::Engine(Engine &&) noexcept = default;
|
||||
Engine &Engine::operator=(Engine &&) noexcept = default;
|
||||
|
||||
Status Engine::Route(const api::RouteParameters ¶ms, util::json::Object &result)
|
||||
Status Engine::Route(const api::RouteParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *route_plugin, result);
|
||||
}
|
||||
|
||||
Status Engine::Table(const api::TableParameters ¶ms, util::json::Object &result)
|
||||
Status Engine::Table(const api::TableParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *table_plugin, result);
|
||||
}
|
||||
|
||||
Status Engine::Nearest(const api::NearestParameters ¶ms, util::json::Object &result)
|
||||
Status Engine::Nearest(const api::NearestParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *nearest_plugin, result);
|
||||
}
|
||||
|
||||
Status Engine::Trip(const api::TripParameters ¶ms, util::json::Object &result)
|
||||
Status Engine::Trip(const api::TripParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *trip_plugin, result);
|
||||
}
|
||||
|
||||
Status Engine::Match(const api::MatchParameters ¶ms, util::json::Object &result)
|
||||
Status Engine::Match(const api::MatchParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *match_plugin, result);
|
||||
}
|
||||
|
||||
Status Engine::Tile(const api::TileParameters ¶ms, std::string &result)
|
||||
Status Engine::Tile(const api::TileParameters ¶ms, std::string &result) const
|
||||
{
|
||||
return RunQuery(lock, *query_data_facade, params, *tile_plugin, result);
|
||||
}
|
||||
|
@ -21,32 +21,32 @@ OSRM &OSRM::operator=(OSRM &&) noexcept = default;
|
||||
|
||||
// Forward to implementation
|
||||
|
||||
engine::Status OSRM::Route(const engine::api::RouteParameters ¶ms, util::json::Object &result)
|
||||
engine::Status OSRM::Route(const engine::api::RouteParameters ¶ms, util::json::Object &result) const
|
||||
{
|
||||
return engine_->Route(params, result);
|
||||
}
|
||||
|
||||
engine::Status OSRM::Table(const engine::api::TableParameters ¶ms, json::Object &result)
|
||||
engine::Status OSRM::Table(const engine::api::TableParameters ¶ms, json::Object &result) const
|
||||
{
|
||||
return engine_->Table(params, result);
|
||||
}
|
||||
|
||||
engine::Status OSRM::Nearest(const engine::api::NearestParameters ¶ms, json::Object &result)
|
||||
engine::Status OSRM::Nearest(const engine::api::NearestParameters ¶ms, json::Object &result) const
|
||||
{
|
||||
return engine_->Nearest(params, result);
|
||||
}
|
||||
|
||||
engine::Status OSRM::Trip(const engine::api::TripParameters ¶ms, json::Object &result)
|
||||
engine::Status OSRM::Trip(const engine::api::TripParameters ¶ms, json::Object &result) const
|
||||
{
|
||||
return engine_->Trip(params, result);
|
||||
}
|
||||
|
||||
engine::Status OSRM::Match(const engine::api::MatchParameters ¶ms, json::Object &result)
|
||||
engine::Status OSRM::Match(const engine::api::MatchParameters ¶ms, json::Object &result) const
|
||||
{
|
||||
return engine_->Match(params, result);
|
||||
}
|
||||
|
||||
engine::Status OSRM::Tile(const engine::api::TileParameters ¶ms, std::string &result)
|
||||
engine::Status OSRM::Tile(const engine::api::TileParameters ¶ms, std::string &result) const
|
||||
{
|
||||
return engine_->Tile(params, result);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user