diff --git a/Include/osrm/ServerConfig.h b/Include/osrm/ServerConfig.h new file mode 100644 index 000000000..4c6b52a1d --- /dev/null +++ b/Include/osrm/ServerConfig.h @@ -0,0 +1,48 @@ +/* + +Copyright (c) 2014, 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 SERVER_CONFIG_H +#define SERVER_CONFIG_H + +#include + +struct ServerConfig +{ + ServerConfig(); + + void setServerPaths(const ServerPaths paths); + + void setUseSharedMemory(const bool use_shared_memory); + + void setMaxLocationsDistanceTable(const int max_locations_distance_table); + + ServerPaths server_paths; + bool use_shared_memory; + int max_locations_distance_table; +}; + +#endif // SERVER_CONFIG_H diff --git a/Library/OSRM.h b/Library/OSRM.h index 6bfa845a6..3c9c4d5e5 100644 --- a/Library/OSRM.h +++ b/Library/OSRM.h @@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef OSRM_H #define OSRM_H -#include +#include #include @@ -46,7 +46,7 @@ class OSRM std::unique_ptr OSRM_pimpl_; public: - explicit OSRM(ServerPaths paths, const bool use_shared_memory = false, const int max_locations_distance_table = 100); + explicit OSRM(ServerConfig serverConfig); ~OSRM(); void RunQuery(RouteParameters &route_parameters, http::Reply &reply); }; diff --git a/Library/OSRM_impl.cpp b/Library/OSRM_impl.cpp index b0e7f013d..8604878ae 100644 --- a/Library/OSRM_impl.cpp +++ b/Library/OSRM_impl.cpp @@ -32,7 +32,7 @@ namespace boost { namespace interprocess { class named_mutex; } } #include #include -#include +#include #include "../plugins/distance_table.hpp" #include "../plugins/hello_world.hpp" @@ -57,9 +57,9 @@ namespace boost { namespace interprocess { class named_mutex; } } #include #include -OSRM_impl::OSRM_impl(ServerPaths server_paths, const bool use_shared_memory, const int max_locations_distance_table) +OSRM_impl::OSRM_impl(ServerConfig serverConfig) { - if (use_shared_memory) + if (serverConfig.use_shared_memory) { barrier = osrm::make_unique(); query_data_facade = new SharedDataFacade(); @@ -67,12 +67,13 @@ OSRM_impl::OSRM_impl(ServerPaths server_paths, const bool use_shared_memory, con else { // populate base path - populate_base_path(server_paths); - query_data_facade = new InternalDataFacade(server_paths); + populate_base_path(serverConfig.server_paths); + query_data_facade = new InternalDataFacade(serverConfig.server_paths); } // The following plugins handle all requests. - RegisterPlugin(new DistanceTablePlugin>(query_data_facade, max_locations_distance_table)); + RegisterPlugin(new DistanceTablePlugin>(query_data_facade, + serverConfig.max_locations_distance_table)); RegisterPlugin(new HelloWorldPlugin()); RegisterPlugin(new LocatePlugin>(query_data_facade)); RegisterPlugin(new NearestPlugin>(query_data_facade)); @@ -152,8 +153,8 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply) // proxy code for compilation firewall -OSRM::OSRM(ServerPaths paths, const bool use_shared_memory, const int max_locations_distance_table) - : OSRM_pimpl_(osrm::make_unique(paths, use_shared_memory, max_locations_distance_table)) +OSRM::OSRM(ServerConfig server_config) + : OSRM_pimpl_(osrm::make_unique(server_config)) { } diff --git a/Library/OSRM_impl.h b/Library/OSRM_impl.h index 56dc137d9..2b9639fb8 100644 --- a/Library/OSRM_impl.h +++ b/Library/OSRM_impl.h @@ -32,8 +32,9 @@ class BasePlugin; namespace http { class Reply; } struct RouteParameters; -#include +#include +#include "../data_structures/server_config.hpp" #include "../data_structures/query_edge.hpp" #include @@ -49,7 +50,7 @@ class OSRM_impl using PluginMap = std::unordered_map; public: - OSRM_impl(ServerPaths paths, const bool use_shared_memory, const int max_locations_distance_table); + OSRM_impl(ServerConfig serverConfig); OSRM_impl(const OSRM_impl &) = delete; virtual ~OSRM_impl(); void RunQuery(RouteParameters &route_parameters, http::Reply &reply); diff --git a/data_structures/server_config.hpp b/data_structures/server_config.hpp new file mode 100644 index 000000000..7adbd5694 --- /dev/null +++ b/data_structures/server_config.hpp @@ -0,0 +1,39 @@ +/* + +Copyright (c) 2014, 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. + +*/ + +#include + +ServerConfig::ServerConfig() + : use_shared_memory(false), max_locations_distance_table(100) +{ +} + +void ServerConfig::setServerPaths(const ServerPaths object) { server_paths = object; } + +void ServerConfig::setUseSharedMemory(const bool flag) { use_shared_memory = flag; } + +void ServerConfig::setMaxLocationsDistanceTable(const int max) { max_locations_distance_table = max; } diff --git a/routed.cpp b/routed.cpp index 26a39ef12..6133577fc 100644 --- a/routed.cpp +++ b/routed.cpp @@ -118,7 +118,11 @@ int main(int argc, const char *argv[]) pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask); #endif - OSRM osrm_lib(server_paths, use_shared_memory, max_locations_distance_table); + ServerConfig server_config; + server_config.setServerPaths(server_paths); + server_config.setUseSharedMemory(use_shared_memory); + server_config.setMaxLocationsDistanceTable(max_locations_distance_table); + OSRM osrm_lib(server_config); auto routing_server = Server::CreateServer(ip_address, ip_port, requested_thread_num);