#ifndef ENGINE_HPP #define ENGINE_HPP #include "engine/status.hpp" #include "storage/shared_barriers.hpp" #include "util/json_container.hpp" #include #include #include namespace osrm { namespace util { namespace json { struct Object; } } namespace engine { struct EngineConfig; namespace api { struct RouteParameters; struct TableParameters; } namespace plugins { class ViaRoutePlugin; class TablePlugin; } namespace datafacade { class BaseDataFacade; } class Engine final { public: // Needs to be public struct EngineLock; explicit Engine(EngineConfig &config); Engine(const Engine &) = delete; Engine &operator=(const Engine &) = delete; // Needed because we have 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); private: std::unique_ptr lock; std::unique_ptr route_plugin; std::unique_ptr table_plugin; std::unique_ptr query_data_facade; }; } } #endif // OSRM_IMPL_HPP