From 4f088cff5a68939a01292f01ea19d3ad8ec438b2 Mon Sep 17 00:00:00 2001 From: kdiluca Date: Sun, 26 Jun 2016 22:39:42 -0400 Subject: [PATCH] refactor rapidjson Change-Id: Ic2386a64452021c7d385ee28ee265311c2c70562 --- src/mapzen/mapzen_route.cpp | 60 +++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/src/mapzen/mapzen_route.cpp b/src/mapzen/mapzen_route.cpp index 9f5e2f2..7eb820e 100644 --- a/src/mapzen/mapzen_route.cpp +++ b/src/mapzen/mapzen_route.cpp @@ -57,8 +57,14 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t rapidjson::Document document; rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); - rapidjson::Value& costing = document.AddMember(rapidjson::Value("costing", allocator).Move(), - rapidjson::Value(rapidjson::kStringType).Move(), allocator); + rapidjson::Value directions_options(rapidjson::kObjectType); + rapidjson::Value costing(rapidjson::kStringType); + rapidjson::Value locations(rapidjson::kArrayType); + rapidjson::Value location(rapidjson::kObjectType); + rapidjson::Value startloc(rapidjson::kObjectType); + rapidjson::Value endloc(rapidjson::kObjectType); + rapidjson::Value costing_options(rapidjson::kObjectType); + switch (type) { case COSTING_AUTO: costing.SetString("auto"); @@ -79,10 +85,12 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t costing.SetString("auto"); } - rapidjson::Value& locations = document.AddMember(rapidjson::Value("locations", allocator).Move(), - rapidjson::Value(rapidjson::kArrayType).Move(), allocator); - rapidjson::Value& location = locations.AddMember(rapidjson::Value("", allocator).Move(), - rapidjson::Value(rapidjson::kObjectType).Move(), allocator); + document.AddMember("costing", costing, allocator); + MAP_DEBUG("**********SET COSTING: %f", costing.GetString()); + + directions_options.AddMember("unit","mi",allocator); + document.AddMember("directions_options", directions_options, allocator); + MAP_DEBUG("**********SET DIRECTIONS_OPTIONS: %s", directions_options.GetString()); int length = g_list_length(waypoints); if (length != 0) { @@ -91,7 +99,9 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t waypoints_list = g_list_first(waypoints); while (waypoints_list) { coords_s *data = (coords_s *) waypoints_list->data; + MAP_DEBUG("**********IN WAYPOINT LIST******************"); + location.SetObject(); for (unsigned i = 0; i < sizeof(data); i++) { location.AddMember("lat", data[i].latitude, allocator); location.AddMember("lon", data[i].longitude, allocator); @@ -99,21 +109,22 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t waypoints_list = g_list_next(waypoints_list); index++; } + locations.PushBack(location, allocator); + document.AddMember("locations", locations, allocator); } else { - location.AddMember("lat", startPoint.latitude, allocator); - location.AddMember("lon", startPoint.longitude, allocator); - location.AddMember("lat", endPoint.latitude, allocator); - location.AddMember("lon", endPoint.longitude, allocator); + startloc.SetObject(); + startloc.AddMember("lat", startPoint.latitude, allocator); + startloc.AddMember("lon", startPoint.longitude, allocator); + endloc.SetObject(); + endloc.AddMember("lat", endPoint.latitude, allocator); + endloc.AddMember("lon", endPoint.longitude, allocator); + + locations.PushBack(startloc, allocator); + locations.PushBack(endloc, allocator); + document.AddMember("locations", locations, allocator); } - rapidjson::Value& directions_options = document.AddMember(rapidjson::Value("directions_options", allocator).Move(), - rapidjson::Value(rapidjson::kObjectType).Move(), allocator); - directions_options.AddMember("unit","mi",allocator); - if (avoids) { - rapidjson::Value& costing_options = document.AddMember(rapidjson::Value("costing_options", allocator).Move(), - rapidjson::Value(rapidjson::kObjectType).Move(), allocator); - switch (avoids) { case PENALTY_NONE: //TODO @@ -137,10 +148,12 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t costing_options.AddMember("country_crossing_penalty","1", allocator); break; } + document.AddMember("costing_options", costing_options, allocator); + MAP_DEBUG("**********SET COSTING_OPTIONS: %f", costing_options.GetString()); + } - /*rapidjson::Value& drive_style = document.AddMember(rapidjson::Value("drive_style", allocator).Move(), - * rapidjson::Value(rapidjson::kStringType).Move(), allocator); + /*rapidjson::Value& drive_style; switch (style) { case DRIVING_STYLE_NORMAL: //TODO @@ -151,22 +164,23 @@ int query_route(gchar *maps_key, coords_s startPoint, coords_s endPoint, route_t case DRIVING_STYLE_AGGRESSIVE: //TODO break; - }*/ + } + document.AddMember("driving_style", driving_style, allocator);*/ //Stringify JSON rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); document.Accept(writer); - const char* json = buffer.GetString(); + const char* jsonString = buffer.GetString(); //we think that this is already being encoded somewhere else //std::string encoded_json = url_encode(json); char routeRequest[1024]; if (maps_key != NULL) - snprintf(routeRequest, sizeof(routeRequest), ROUTE_URL, maps_key, json); + snprintf(routeRequest, sizeof(routeRequest), ROUTE_URL, maps_key, jsonString); else - snprintf(routeRequest, sizeof(routeRequest), ROUTE_URL, "null", json); + snprintf(routeRequest, sizeof(routeRequest), ROUTE_URL, "null", jsonString); add_handle(routeRequest, REQ_TYPE_ROUTE, user_data); return 0; -- 2.34.1