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