Use uturn default from .properties file
This commit is contained in:
		
							parent
							
								
									71c336d9dd
								
							
						
					
					
						commit
						a781c36876
					
				| @ -143,6 +143,8 @@ class BaseDataFacade | ||||
|     virtual std::size_t GetCoreSize() const = 0; | ||||
| 
 | ||||
|     virtual std::string GetTimestamp() const = 0; | ||||
| 
 | ||||
|     virtual bool GetUTurnsDefault() const = 0; | ||||
| }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -9,6 +9,7 @@ | ||||
| 
 | ||||
| #include "engine/geospatial_query.hpp" | ||||
| #include "extractor/original_edge_data.hpp" | ||||
| #include "extractor/profile_properties.hpp" | ||||
| #include "extractor/query_node.hpp" | ||||
| #include "contractor/query_edge.hpp" | ||||
| #include "util/shared_memory_vector_wrapper.hpp" | ||||
| @ -79,6 +80,7 @@ class InternalDataFacade final : public BaseDataFacade | ||||
|     util::ShM<unsigned, false>::vector m_segment_weights; | ||||
|     util::ShM<uint8_t, false>::vector m_datasource_list; | ||||
|     util::ShM<std::string, false>::vector m_datasource_names; | ||||
|     extractor::ProfileProperties m_profile_properties; | ||||
| 
 | ||||
|     boost::thread_specific_ptr<InternalRTree> m_static_rtree; | ||||
|     boost::thread_specific_ptr<InternalGeospatialQuery> m_geospatial_query; | ||||
| @ -86,6 +88,17 @@ class InternalDataFacade final : public BaseDataFacade | ||||
|     boost::filesystem::path file_index_path; | ||||
|     util::RangeTable<16, false> m_name_table; | ||||
| 
 | ||||
|     void LoadProfileProperties(const boost::filesystem::path &properties_path) | ||||
|     { | ||||
|         boost::filesystem::ifstream in_stream(properties_path); | ||||
|         if (!in_stream) | ||||
|         { | ||||
|             throw util::exception("Could not open " + properties_path.string() + " for reading."); | ||||
|         } | ||||
| 
 | ||||
|         in_stream.read(reinterpret_cast<char*>(&m_profile_properties), sizeof(m_profile_properties)); | ||||
|     } | ||||
| 
 | ||||
|     void LoadTimestamp(const boost::filesystem::path ×tamp_path) | ||||
|     { | ||||
|         if (boost::filesystem::exists(timestamp_path)) | ||||
| @ -320,6 +333,9 @@ class InternalDataFacade final : public BaseDataFacade | ||||
|         util::SimpleLogger().Write() << "loading timestamp"; | ||||
|         LoadTimestamp(file_for("timestamp")); | ||||
| 
 | ||||
|         util::SimpleLogger().Write() << "loading profile properties"; | ||||
|         LoadProfileProperties(file_for("properties")); | ||||
| 
 | ||||
|         util::SimpleLogger().Write() << "loading street names"; | ||||
|         LoadStreetNames(file_for("namesdata")); | ||||
|     } | ||||
| @ -662,6 +678,8 @@ class InternalDataFacade final : public BaseDataFacade | ||||
|     } | ||||
| 
 | ||||
|     std::string GetTimestamp() const override final { return m_timestamp; } | ||||
| 
 | ||||
|     bool GetUTurnsDefault() const override final { return m_profile_properties.allow_u_turn_at_via; } | ||||
| }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -8,6 +8,7 @@ | ||||
| #include "storage/shared_memory.hpp" | ||||
| 
 | ||||
| #include "extractor/guidance/turn_instruction.hpp" | ||||
| #include "extractor/profile_properties.hpp" | ||||
| 
 | ||||
| #include "engine/geospatial_query.hpp" | ||||
| #include "util/range_table.hpp" | ||||
| @ -68,6 +69,7 @@ class SharedDataFacade final : public BaseDataFacade | ||||
|     std::unique_ptr<storage::SharedMemory> m_layout_memory; | ||||
|     std::unique_ptr<storage::SharedMemory> m_large_memory; | ||||
|     std::string m_timestamp; | ||||
|     extractor::ProfileProperties* m_profile_properties; | ||||
| 
 | ||||
|     std::shared_ptr<util::ShM<util::Coordinate, true>::vector> m_coordinate_list; | ||||
|     util::ShM<NodeID, true>::vector m_via_node_list; | ||||
| @ -98,6 +100,12 @@ class SharedDataFacade final : public BaseDataFacade | ||||
|         util::SimpleLogger().Write() << "set checksum: " << m_check_sum; | ||||
|     } | ||||
| 
 | ||||
|     void LoadProfileProperties() | ||||
|     { | ||||
|         m_profile_properties = | ||||
|             data_layout->GetBlockPtr<extractor::ProfileProperties>(shared_memory, storage::SharedDataLayout::PROPERTIES); | ||||
|     } | ||||
| 
 | ||||
|     void LoadTimestamp() | ||||
|     { | ||||
|         auto timestamp_ptr = | ||||
| @ -343,6 +351,7 @@ class SharedDataFacade final : public BaseDataFacade | ||||
|                 LoadViaNodeList(); | ||||
|                 LoadNames(); | ||||
|                 LoadCoreInformation(); | ||||
|                 LoadProfileProperties(); | ||||
| 
 | ||||
|                 util::SimpleLogger().Write() << "number of geometries: " | ||||
|                                              << m_coordinate_list->size(); | ||||
| @ -703,6 +712,8 @@ class SharedDataFacade final : public BaseDataFacade | ||||
|     } | ||||
| 
 | ||||
|     std::string GetTimestamp() const override final { return m_timestamp; } | ||||
| 
 | ||||
|     bool GetUTurnsDefault() const override final { return m_profile_properties->allow_u_turn_at_via; } | ||||
| }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -237,8 +237,6 @@ class ShortestPathRouting final | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     static const constexpr bool UTURN_DEFAULT = false; | ||||
| 
 | ||||
|     void operator()(const std::vector<PhantomNodes> &phantom_nodes_vector, | ||||
|                     const boost::optional<bool> uturns, | ||||
|                     InternalRouteResult &raw_route_data) const | ||||
| @ -268,7 +266,7 @@ class ShortestPathRouting final | ||||
|         std::vector<NodeID> total_packed_path_to_reverse; | ||||
|         std::vector<std::size_t> packed_leg_to_reverse_begin; | ||||
| 
 | ||||
|         const bool allow_u_turn_at_via = uturns ? *uturns : UTURN_DEFAULT; | ||||
|         const bool allow_u_turn_at_via = uturns ? *uturns : super::facade->GetUTurnsDefault(); | ||||
| 
 | ||||
|         std::size_t current_leg = 0; | ||||
|         // this implements a dynamic program that finds the shortest route through
 | ||||
|  | ||||
| @ -41,6 +41,7 @@ struct SharedDataLayout | ||||
|         DATASOURCE_NAME_DATA, | ||||
|         DATASOURCE_NAME_OFFSETS, | ||||
|         DATASOURCE_NAME_LENGTHS, | ||||
|         PROPERTIES, | ||||
|         NUM_BLOCKS | ||||
|     }; | ||||
| 
 | ||||
|  | ||||
| @ -53,10 +53,12 @@ populate_base_path(std::unordered_map<std::string, boost::filesystem::path> &ser | ||||
|         BOOST_ASSERT(server_paths.find("namesdata") != server_paths.end()); | ||||
|         server_paths["timestamp"] = base_string + ".timestamp"; | ||||
|         BOOST_ASSERT(server_paths.find("timestamp") != server_paths.end()); | ||||
|         server_paths["properties"] = base_string + ".properties"; | ||||
|         BOOST_ASSERT(server_paths.find("properties") != server_paths.end()); | ||||
|         server_paths["datasource_indexes"] = base_string + ".datasource_indexes"; | ||||
|         BOOST_ASSERT(server_paths.find("timestamp") != server_paths.end()); | ||||
|         BOOST_ASSERT(server_paths.find("datasource_indexes") != server_paths.end()); | ||||
|         server_paths["datasource_names"] = base_string + ".datasource_names"; | ||||
|         BOOST_ASSERT(server_paths.find("timestamp") != server_paths.end()); | ||||
|         BOOST_ASSERT(server_paths.find("datasource_names") != server_paths.end()); | ||||
|     } | ||||
| 
 | ||||
|     // check if files are give and whether they exist at all
 | ||||
|  | ||||
| @ -157,8 +157,8 @@ void ScriptingEnvironment::InitContext(ScriptingEnvironment::Context &context) | ||||
|              .def_readonly("datum", &RasterDatum::datum) | ||||
|              .def("invalid_data", &RasterDatum::get_invalid)]; | ||||
| 
 | ||||
|     luabind::globals(context.state)["properties"] = context.properties; | ||||
|     luabind::globals(context.state)["sources"] = context.sources; | ||||
|     luabind::globals(context.state)["properties"] = &context.properties; | ||||
|     luabind::globals(context.state)["sources"] = &context.sources; | ||||
| 
 | ||||
|     if (0 != luaL_dofile(context.state, file_name.c_str())) | ||||
|     { | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
| #include "util/range_table.hpp" | ||||
| #include "contractor/query_edge.hpp" | ||||
| #include "extractor/query_node.hpp" | ||||
| #include "extractor/profile_properties.hpp" | ||||
| #include "extractor/compressed_edge_container.hpp" | ||||
| #include "util/shared_memory_vector_wrapper.hpp" | ||||
| #include "util/static_graph.hpp" | ||||
| @ -148,6 +149,10 @@ int Storage::Run() | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
|     BOOST_ASSERT(!paths_iterator->second.empty()); | ||||
|     const boost::filesystem::path ×tamp_path = paths_iterator->second; | ||||
|     paths_iterator = paths.find("properties"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
|     BOOST_ASSERT(!paths_iterator->second.empty()); | ||||
|     const boost::filesystem::path &properties_path = paths_iterator->second; | ||||
|     paths_iterator = paths.find("ramindex"); | ||||
|     BOOST_ASSERT(paths.end() != paths_iterator); | ||||
|     BOOST_ASSERT(!paths_iterator->second.empty()); | ||||
| @ -285,6 +290,9 @@ int Storage::Run() | ||||
|     tree_node_file.read((char *)&tree_size, sizeof(uint32_t)); | ||||
|     shared_layout_ptr->SetBlockSize<RTreeNode>(SharedDataLayout::R_SEARCH_TREE, tree_size); | ||||
| 
 | ||||
|     // load profile properties
 | ||||
|     shared_layout_ptr->SetBlockSize<extractor::ProfileProperties>(SharedDataLayout::PROPERTIES, 1); | ||||
| 
 | ||||
|     // load timestamp size
 | ||||
|     std::string m_timestamp; | ||||
|     if (boost::filesystem::exists(timestamp_path)) | ||||
| @ -605,6 +613,15 @@ int Storage::Run() | ||||
|     } | ||||
|     hsgr_input_stream.close(); | ||||
| 
 | ||||
|     // load profile properties
 | ||||
|     auto profile_properties_ptr = shared_layout_ptr->GetBlockPtr<extractor::ProfileProperties, true>(shared_memory_ptr, SharedDataLayout::PROPERTIES); | ||||
|     boost::filesystem::ifstream profile_properties_stream(properties_path); | ||||
|     if (!profile_properties_stream) | ||||
|     { | ||||
|         util::exception("Could not open " + properties_path.string() + " for reading!"); | ||||
|     } | ||||
|     profile_properties_stream.read(reinterpret_cast<char*>(profile_properties_ptr), sizeof(extractor::ProfileProperties)); | ||||
| 
 | ||||
|     // acquire lock
 | ||||
|     SharedMemory *data_type_memory = | ||||
|         makeSharedMemory(CURRENT_REGIONS, sizeof(SharedDataTimestamp), true, false); | ||||
|  | ||||
| @ -44,7 +44,9 @@ bool generateDataStoreOptions(const int argc, const char *argv[], storage::DataP | ||||
|         ".datasource_names file")( | ||||
|         "datasource_indexes", | ||||
|         boost::program_options::value<boost::filesystem::path>(&paths["datasource_indexes"]), | ||||
|         ".datasource_indexes file"); | ||||
|         ".datasource_indexes file")( | ||||
|         "properties", boost::program_options::value<boost::filesystem::path>(&paths["properties"]), | ||||
|         ".properties file"); | ||||
| 
 | ||||
|     // hidden options, will be allowed on command line but will not be shown to the user
 | ||||
|     boost::program_options::options_description hidden_options("Hidden options"); | ||||
| @ -151,6 +153,12 @@ bool generateDataStoreOptions(const int argc, const char *argv[], storage::DataP | ||||
|         path_iterator->second = base_string + ".timestamp"; | ||||
|     } | ||||
| 
 | ||||
|     path_iterator = paths.find("properties"); | ||||
|     if (path_iterator != paths.end()) | ||||
|     { | ||||
|         path_iterator->second = base_string + ".properties"; | ||||
|     } | ||||
| 
 | ||||
|     path_iterator = paths.find("datasource_indexes"); | ||||
|     if (path_iterator != paths.end()) | ||||
|     { | ||||
| @ -219,6 +227,13 @@ bool generateDataStoreOptions(const int argc, const char *argv[], storage::DataP | ||||
|         throw util::exception("valid .timestamp file must be specified"); | ||||
|     } | ||||
| 
 | ||||
|     path_iterator = paths.find("properties"); | ||||
|     if (path_iterator == paths.end() || path_iterator->second.string().empty() || | ||||
|         !boost::filesystem::is_regular_file(path_iterator->second)) | ||||
|     { | ||||
|         throw util::exception("valid .properties file must be specified"); | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user