Pre-allocate up-front whenever possible

This commit is contained in:
Daniel J. Hofmann 2016-06-08 11:28:32 +02:00
parent 1c140a112a
commit 033dc0a72d
6 changed files with 16 additions and 2 deletions

View File

@ -57,6 +57,7 @@ util::json::Object makeGeoJSONGeometry(ForwardIter begin, ForwardIter end)
{
geojson.values["type"] = "LineString";
util::json::Array coordinates;
coordinates.values.reserve(num_coordinates);
std::transform(
begin, end, std::back_inserter(coordinates.values), &detail::coordinateToLonLat);
geojson.values["coordinates"] = std::move(coordinates);

View File

@ -173,6 +173,9 @@ class RouteAPI : public BaseAPI
for (const auto idx : util::irange<std::size_t>(0UL, legs.size()))
{
auto &leg_geometry = leg_geometries[idx];
step_geometries.reserve(step_geometries.size() + legs[idx].steps.size());
std::transform(
legs[idx].steps.begin(),
legs[idx].steps.end(),
@ -201,6 +204,11 @@ class RouteAPI : public BaseAPI
util::json::Array distances;
util::json::Array nodes;
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(
leg_geometry.annotations.begin(),
leg_geometry.annotations.end(),

View File

@ -133,6 +133,7 @@ std::vector<RouteStep> assembleSteps(const DataFacadeT &facade,
intersection.out = bearing_class.findMatchingBearing(bearings.second);
intersection.location = facade.GetCoordinateOfNode(path_point.turn_via_node);
intersection.bearings.clear();
intersection.bearings.reserve(bearing_class.getAvailableBearings().size());
std::copy(bearing_class.getAvailableBearings().begin(),
bearing_class.getAvailableBearings().end(),
std::back_inserter(intersection.bearings));

View File

@ -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_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(),
input_way.nodes().end(),
std::back_inserter(external_memory.used_node_id_list),

View File

@ -5,7 +5,6 @@
#include <boost/algorithm/string.hpp>
#include <boost/assert.hpp>
#include <boost/range/adaptor/transformed.hpp>
#include <boost/ref.hpp>
#include <iterator>

View File

@ -105,9 +105,11 @@ void RequestHandler::HandleRequest(const http::request &current_request, http::r
else
{
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(),
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");
}