Pre-allocate up-front whenever possible
This commit is contained in:
		
							parent
							
								
									1c140a112a
								
							
						
					
					
						commit
						033dc0a72d
					
				| @ -57,6 +57,7 @@ util::json::Object makeGeoJSONGeometry(ForwardIter begin, ForwardIter end) | |||||||
|     { |     { | ||||||
|         geojson.values["type"] = "LineString"; |         geojson.values["type"] = "LineString"; | ||||||
|         util::json::Array coordinates; |         util::json::Array coordinates; | ||||||
|  |         coordinates.values.reserve(num_coordinates); | ||||||
|         std::transform( |         std::transform( | ||||||
|             begin, end, std::back_inserter(coordinates.values), &detail::coordinateToLonLat); |             begin, end, std::back_inserter(coordinates.values), &detail::coordinateToLonLat); | ||||||
|         geojson.values["coordinates"] = std::move(coordinates); |         geojson.values["coordinates"] = std::move(coordinates); | ||||||
|  | |||||||
| @ -173,6 +173,9 @@ class RouteAPI : public BaseAPI | |||||||
|         for (const auto idx : util::irange<std::size_t>(0UL, legs.size())) |         for (const auto idx : util::irange<std::size_t>(0UL, legs.size())) | ||||||
|         { |         { | ||||||
|             auto &leg_geometry = leg_geometries[idx]; |             auto &leg_geometry = leg_geometries[idx]; | ||||||
|  | 
 | ||||||
|  |             step_geometries.reserve(step_geometries.size() + legs[idx].steps.size()); | ||||||
|  | 
 | ||||||
|             std::transform( |             std::transform( | ||||||
|                 legs[idx].steps.begin(), |                 legs[idx].steps.begin(), | ||||||
|                 legs[idx].steps.end(), |                 legs[idx].steps.end(), | ||||||
| @ -201,6 +204,11 @@ class RouteAPI : public BaseAPI | |||||||
|                 util::json::Array distances; |                 util::json::Array distances; | ||||||
|                 util::json::Array nodes; |                 util::json::Array nodes; | ||||||
|                 auto &leg_geometry = leg_geometries[idx]; |                 auto &leg_geometry = leg_geometries[idx]; | ||||||
|  | 
 | ||||||
|  |                 durations.values.reserve(leg_geometry.annotations.size()); | ||||||
|  |                 distances.values.reserve(leg_geometry.annotations.size()); | ||||||
|  |                 nodes.values.reserve(leg_geometry.osm_node_ids.size()); | ||||||
|  | 
 | ||||||
|                 std::for_each( |                 std::for_each( | ||||||
|                     leg_geometry.annotations.begin(), |                     leg_geometry.annotations.begin(), | ||||||
|                     leg_geometry.annotations.end(), |                     leg_geometry.annotations.end(), | ||||||
|  | |||||||
| @ -133,6 +133,7 @@ std::vector<RouteStep> assembleSteps(const DataFacadeT &facade, | |||||||
|                 intersection.out = bearing_class.findMatchingBearing(bearings.second); |                 intersection.out = bearing_class.findMatchingBearing(bearings.second); | ||||||
|                 intersection.location = facade.GetCoordinateOfNode(path_point.turn_via_node); |                 intersection.location = facade.GetCoordinateOfNode(path_point.turn_via_node); | ||||||
|                 intersection.bearings.clear(); |                 intersection.bearings.clear(); | ||||||
|  |                 intersection.bearings.reserve(bearing_class.getAvailableBearings().size()); | ||||||
|                 std::copy(bearing_class.getAvailableBearings().begin(), |                 std::copy(bearing_class.getAvailableBearings().begin(), | ||||||
|                           bearing_class.getAvailableBearings().end(), |                           bearing_class.getAvailableBearings().end(), | ||||||
|                           std::back_inserter(intersection.bearings)); |                           std::back_inserter(intersection.bearings)); | ||||||
|  | |||||||
| @ -193,6 +193,9 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti | |||||||
|                             ((parsed_way.forward_speed != parsed_way.backward_speed) || |                             ((parsed_way.forward_speed != parsed_way.backward_speed) || | ||||||
|                              (parsed_way.forward_travel_mode != parsed_way.backward_travel_mode)); |                              (parsed_way.forward_travel_mode != parsed_way.backward_travel_mode)); | ||||||
| 
 | 
 | ||||||
|  |     external_memory.used_node_id_list.reserve(external_memory.used_node_id_list.size() + | ||||||
|  |                                               input_way.nodes().size()); | ||||||
|  | 
 | ||||||
|     std::transform(input_way.nodes().begin(), |     std::transform(input_way.nodes().begin(), | ||||||
|                    input_way.nodes().end(), |                    input_way.nodes().end(), | ||||||
|                    std::back_inserter(external_memory.used_node_id_list), |                    std::back_inserter(external_memory.used_node_id_list), | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ | |||||||
| 
 | 
 | ||||||
| #include <boost/algorithm/string.hpp> | #include <boost/algorithm/string.hpp> | ||||||
| #include <boost/assert.hpp> | #include <boost/assert.hpp> | ||||||
| #include <boost/range/adaptor/transformed.hpp> |  | ||||||
| #include <boost/ref.hpp> | #include <boost/ref.hpp> | ||||||
| 
 | 
 | ||||||
| #include <iterator> | #include <iterator> | ||||||
|  | |||||||
| @ -105,9 +105,11 @@ void RequestHandler::HandleRequest(const http::request ¤t_request, http::r | |||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             BOOST_ASSERT(result.is<std::string>()); |             BOOST_ASSERT(result.is<std::string>()); | ||||||
|  |             current_reply.content.resize(current_reply.content.size() + | ||||||
|  |                                          result.get<std::string>().size()); | ||||||
|             std::copy(result.get<std::string>().cbegin(), |             std::copy(result.get<std::string>().cbegin(), | ||||||
|                       result.get<std::string>().cend(), |                       result.get<std::string>().cend(), | ||||||
|                       std::back_inserter(current_reply.content)); |                       current_reply.content.end()); | ||||||
| 
 | 
 | ||||||
|             current_reply.headers.emplace_back("Content-Type", "application/x-protobuf"); |             current_reply.headers.emplace_back("Content-Type", "application/x-protobuf"); | ||||||
|         } |         } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user