diff --git a/Library/OSRM.cpp b/Library/OSRM.cpp index 79f6b869f..1ddb5e62d 100644 --- a/Library/OSRM.cpp +++ b/Library/OSRM.cpp @@ -20,80 +20,97 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "OSRM.h" -OSRM::OSRM(const char * server_ini_path) { - if( !testDataFile(server_ini_path) ){ - std::string error_message = std::string(server_ini_path) + " not found"; - throw OSRMException(error_message.c_str()); +OSRM::OSRM(const char * server_ini_path, const bool use_shared_memory) + : use_shared_memory(use_shared_memory) +{ + if( !use_shared_memory ) { + if( !testDataFile(server_ini_path) ){ + std::string error_message = std::string(server_ini_path) + " not found"; + throw OSRMException(error_message.c_str()); + } + + IniFile serverConfig(server_ini_path); + + boost::filesystem::path base_path = + boost::filesystem::absolute(server_ini_path).parent_path(); + + if ( !serverConfig.Holds("hsgrData")) { + throw OSRMException("no ram index file name in server ini"); + } + if ( !serverConfig.Holds("ramIndex") ) { + throw OSRMException("no mem index file name in server ini"); + } + if ( !serverConfig.Holds("fileIndex") ) { + throw OSRMException("no nodes file name in server ini"); + } + if ( !serverConfig.Holds("nodesData") ) { + throw OSRMException("no nodes file name in server ini"); + } + if ( !serverConfig.Holds("edgesData") ) { + throw OSRMException("no edges file name in server ini"); + } + + boost::filesystem::path hsgr_path = boost::filesystem::absolute( + serverConfig.GetParameter("hsgrData"), + base_path + ); + + boost::filesystem::path ram_index_path = boost::filesystem::absolute( + serverConfig.GetParameter("ramIndex"), + base_path + ); + + boost::filesystem::path file_index_path = boost::filesystem::absolute( + serverConfig.GetParameter("fileIndex"), + base_path + ); + + boost::filesystem::path node_data_path = boost::filesystem::absolute( + serverConfig.GetParameter("nodesData"), + base_path + ); + boost::filesystem::path edge_data_path = boost::filesystem::absolute( + serverConfig.GetParameter("edgesData"), + base_path + ); + boost::filesystem::path name_data_path = boost::filesystem::absolute( + serverConfig.GetParameter("namesData"), + base_path + ); + boost::filesystem::path timestamp_path = boost::filesystem::absolute( + serverConfig.GetParameter("timestamp"), + base_path + ); + + objects = new QueryObjectsStorage( + hsgr_path.string(), + ram_index_path.string(), + file_index_path.string(), + node_data_path.string(), + edge_data_path.string(), + name_data_path.string(), + timestamp_path.string() + ); + + RegisterPlugin(new HelloWorldPlugin()); + RegisterPlugin(new LocatePlugin(objects)); + RegisterPlugin(new NearestPlugin(objects)); + RegisterPlugin(new TimestampPlugin(objects)); + RegisterPlugin(new ViaRoutePlugin(objects)); + + } else { + //TODO: fetch pointers from shared memory + + //TODO: objects = new QueryObjectsStorage() + + //TODO: generate shared memory plugins + RegisterPlugin(new HelloWorldPlugin()); + RegisterPlugin(new LocatePlugin(objects)); + RegisterPlugin(new NearestPlugin(objects)); + RegisterPlugin(new TimestampPlugin(objects)); + RegisterPlugin(new ViaRoutePlugin(objects)); + } - - IniFile serverConfig(server_ini_path); - - boost::filesystem::path base_path = - boost::filesystem::absolute(server_ini_path).parent_path(); - - if ( !serverConfig.Holds("hsgrData")) { - throw OSRMException("no ram index file name in server ini"); - } - if ( !serverConfig.Holds("ramIndex") ) { - throw OSRMException("no mem index file name in server ini"); - } - if ( !serverConfig.Holds("fileIndex") ) { - throw OSRMException("no nodes file name in server ini"); - } - if ( !serverConfig.Holds("nodesData") ) { - throw OSRMException("no nodes file name in server ini"); - } - if ( !serverConfig.Holds("edgesData") ) { - throw OSRMException("no edges file name in server ini"); - } - - boost::filesystem::path hsgr_path = boost::filesystem::absolute( - serverConfig.GetParameter("hsgrData"), - base_path - ); - - boost::filesystem::path ram_index_path = boost::filesystem::absolute( - serverConfig.GetParameter("ramIndex"), - base_path - ); - - boost::filesystem::path file_index_path = boost::filesystem::absolute( - serverConfig.GetParameter("fileIndex"), - base_path - ); - - boost::filesystem::path node_data_path = boost::filesystem::absolute( - serverConfig.GetParameter("nodesData"), - base_path - ); - boost::filesystem::path edge_data_path = boost::filesystem::absolute( - serverConfig.GetParameter("edgesData"), - base_path - ); - boost::filesystem::path name_data_path = boost::filesystem::absolute( - serverConfig.GetParameter("namesData"), - base_path - ); - boost::filesystem::path timestamp_path = boost::filesystem::absolute( - serverConfig.GetParameter("timestamp"), - base_path - ); - - objects = new QueryObjectsStorage( - hsgr_path.string(), - ram_index_path.string(), - file_index_path.string(), - node_data_path.string(), - edge_data_path.string(), - name_data_path.string(), - timestamp_path.string() - ); - - RegisterPlugin(new HelloWorldPlugin()); - RegisterPlugin(new LocatePlugin(objects)); - RegisterPlugin(new NearestPlugin(objects)); - RegisterPlugin(new TimestampPlugin(objects)); - RegisterPlugin(new ViaRoutePlugin(objects)); } OSRM::~OSRM() { diff --git a/Library/OSRM.h b/Library/OSRM.h index bb3caa7d9..17e27a1c8 100644 --- a/Library/OSRM.h +++ b/Library/OSRM.h @@ -47,12 +47,13 @@ class OSRM : boost::noncopyable { typedef boost::unordered_map PluginMap; QueryObjectsStorage * objects; public: - OSRM(const char * server_ini_path); + OSRM(const char * server_ini_path, const bool use_shared_memory = false); ~OSRM(); void RunQuery(RouteParameters & route_parameters, http::Reply & reply); private: void RegisterPlugin(BasePlugin * plugin); PluginMap pluginMap; + const bool use_shared_memory; }; #endif //OSRM_H