From 26ffdf2dcb15c3d770665767e8a05f616cfb9662 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Thu, 17 Mar 2016 17:22:35 +0100 Subject: [PATCH] Also exclude the compressed flag from the data format --- .../engine/datafacade/internal_datafacade.hpp | 1 - .../routing_algorithms/routing_base.hpp | 7 +- include/extractor/original_edge_data.hpp | 6 +- src/extractor/edge_based_graph_factory.cpp | 76 +++++-------------- src/storage/storage.cpp | 1 - 5 files changed, 28 insertions(+), 63 deletions(-) diff --git a/include/engine/datafacade/internal_datafacade.hpp b/include/engine/datafacade/internal_datafacade.hpp index d0e131ea1..6aac20823 100644 --- a/include/engine/datafacade/internal_datafacade.hpp +++ b/include/engine/datafacade/internal_datafacade.hpp @@ -160,7 +160,6 @@ template class InternalDataFacade final : public BaseDataFacad m_name_ID_list[i] = current_edge_data.name_id; m_turn_instruction_list[i] = current_edge_data.turn_instruction; m_travel_mode_list[i] = current_edge_data.travel_mode; - BOOST_ASSERT(current_edge_data.compressed_geometry); } } diff --git a/include/engine/routing_algorithms/routing_base.hpp b/include/engine/routing_algorithms/routing_base.hpp index e079d2c7c..797499b98 100644 --- a/include/engine/routing_algorithms/routing_base.hpp +++ b/include/engine/routing_algorithms/routing_base.hpp @@ -300,12 +300,14 @@ template class BasicRoutingInterface std::vector id_vector; facade->GetUncompressedGeometry(facade->GetGeometryIndexForEdgeID(ed.id), id_vector); + BOOST_ASSERT(id_vector.size() > 0); std::vector weight_vector; facade->GetUncompressedWeights(facade->GetGeometryIndexForEdgeID(ed.id), weight_vector); + BOOST_ASSERT(weight_vector.size() > 0); - int total_weight = + auto total_weight = std::accumulate(weight_vector.begin(), weight_vector.end(), 0); BOOST_ASSERT(weight_vector.size() == id_vector.size()); @@ -322,13 +324,14 @@ template class BasicRoutingInterface const std::size_t end_index = id_vector.size(); BOOST_ASSERT(start_index >= 0); - BOOST_ASSERT(start_index <= end_index); + BOOST_ASSERT(start_index < end_index); for (std::size_t i = start_index; i < end_index; ++i) { unpacked_path.emplace_back(id_vector[i], name_index, extractor::TurnInstruction::NoTurn, weight_vector[i], travel_mode); } + BOOST_ASSERT(unpacked_path.size() > 0); unpacked_path.back().turn_instruction = turn_instruction; unpacked_path.back().segment_duration += (ed.distance - total_weight); } diff --git a/include/extractor/original_edge_data.hpp b/include/extractor/original_edge_data.hpp index 3e5c0016d..4ebcc04e8 100644 --- a/include/extractor/original_edge_data.hpp +++ b/include/extractor/original_edge_data.hpp @@ -17,24 +17,22 @@ struct OriginalEdgeData explicit OriginalEdgeData(NodeID via_node, unsigned name_id, TurnInstruction turn_instruction, - bool compressed_geometry, TravelMode travel_mode) : via_node(via_node), name_id(name_id), turn_instruction(turn_instruction), - compressed_geometry(compressed_geometry), travel_mode(travel_mode) + travel_mode(travel_mode) { } OriginalEdgeData() : via_node(std::numeric_limits::max()), name_id(std::numeric_limits::max()), turn_instruction(TurnInstruction::NoTurn), - compressed_geometry(false), travel_mode(TRAVEL_MODE_INACCESSIBLE) + travel_mode(TRAVEL_MODE_INACCESSIBLE) { } NodeID via_node; unsigned name_id; TurnInstruction turn_instruction; - bool compressed_geometry; TravelMode travel_mode; }; } diff --git a/src/extractor/edge_based_graph_factory.cpp b/src/extractor/edge_based_graph_factory.cpp index 240ffbbce..8b9c0a531 100644 --- a/src/extractor/edge_based_graph_factory.cpp +++ b/src/extractor/edge_based_graph_factory.cpp @@ -297,7 +297,6 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( restricted_turns_counter = 0; skipped_uturns_counter = 0; skipped_barrier_turns_counter = 0; - std::size_t compressed = 0; std::ofstream edge_data_file(original_edge_data_filename.c_str(), std::ios::binary); std::ofstream edge_segment_file; @@ -369,19 +368,10 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( distance += turn_penalty; - const bool edge_is_compressed = - m_compressed_edge_container.HasEntryForID(edge_form_u); - - if (edge_is_compressed) - { - ++compressed; - } - + BOOST_ASSERT(m_compressed_edge_container.HasEntryForID(edge_form_u)); original_edge_data_vector.emplace_back( - (edge_is_compressed ? m_compressed_edge_container.GetPositionForID(edge_form_u) - : node_v), - edge_data1.name_id, turn_instruction, edge_is_compressed, - edge_data1.travel_mode); + m_compressed_edge_container.GetPositionForID(edge_form_u), edge_data1.name_id, + turn_instruction, edge_data1.travel_mode); ++original_edges_counter; @@ -416,56 +406,32 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( unsigned fixed_penalty = distance - edge_data1.distance; edge_penalty_file.write(reinterpret_cast(&fixed_penalty), sizeof(fixed_penalty)); - if (edge_is_compressed) + const auto node_based_edges = + m_compressed_edge_container.GetBucketReference(edge_form_u); + NodeID previous = node_u; + + const unsigned node_count = node_based_edges.size() + 1; + edge_segment_file.write(reinterpret_cast(&node_count), + sizeof(node_count)); + const QueryNode &first_node = m_node_info_list[previous]; + edge_segment_file.write(reinterpret_cast(&first_node.node_id), + sizeof(first_node.node_id)); + + for (auto target_node : node_based_edges) { - const auto node_based_edges = - m_compressed_edge_container.GetBucketReference(edge_form_u); - NodeID previous = node_u; - - const unsigned node_count = node_based_edges.size() + 1; - edge_segment_file.write(reinterpret_cast(&node_count), - sizeof(node_count)); - const QueryNode &first_node = m_node_info_list[previous]; - edge_segment_file.write(reinterpret_cast(&first_node.node_id), - sizeof(first_node.node_id)); - - for (auto target_node : node_based_edges) - { - const QueryNode &from = m_node_info_list[previous]; - const QueryNode &to = m_node_info_list[target_node.node_id]; - const double segment_length = - util::coordinate_calculation::greatCircleDistance( - from.lat, from.lon, to.lat, to.lon); - - edge_segment_file.write(reinterpret_cast(&to.node_id), - sizeof(to.node_id)); - edge_segment_file.write(reinterpret_cast(&segment_length), - sizeof(segment_length)); - edge_segment_file.write( - reinterpret_cast(&target_node.weight), - sizeof(target_node.weight)); - previous = target_node.node_id; - } - } - else - { - static const unsigned node_count = 2; - const QueryNode from = m_node_info_list[node_u]; - const QueryNode to = m_node_info_list[node_v]; + const QueryNode &from = m_node_info_list[previous]; + const QueryNode &to = m_node_info_list[target_node.node_id]; const double segment_length = util::coordinate_calculation::greatCircleDistance(from.lat, from.lon, to.lat, to.lon); - edge_segment_file.write(reinterpret_cast(&node_count), - sizeof(node_count)); - edge_segment_file.write(reinterpret_cast(&from.node_id), - sizeof(from.node_id)); + edge_segment_file.write(reinterpret_cast(&to.node_id), sizeof(to.node_id)); edge_segment_file.write(reinterpret_cast(&segment_length), sizeof(segment_length)); - edge_segment_file.write( - reinterpret_cast(&edge_data1.distance), - sizeof(edge_data1.distance)); + edge_segment_file.write(reinterpret_cast(&target_node.weight), + sizeof(target_node.weight)); + previous = target_node.node_id; } } } diff --git a/src/storage/storage.cpp b/src/storage/storage.cpp index dbc4076fa..9f53a50e7 100644 --- a/src/storage/storage.cpp +++ b/src/storage/storage.cpp @@ -405,7 +405,6 @@ int Storage::Run() name_id_ptr[i] = current_edge_data.name_id; travel_mode_ptr[i] = current_edge_data.travel_mode; turn_instructions_ptr[i] = current_edge_data.turn_instruction; - BOOST_ASSERT(current_edge_data.compressed_geometry); } edges_input_stream.close();