diff options
Diffstat (limited to 'src/mongo/db/geo/geoparser.cpp')
-rw-r--r-- | src/mongo/db/geo/geoparser.cpp | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/src/mongo/db/geo/geoparser.cpp b/src/mongo/db/geo/geoparser.cpp index ea97c706851..005f6defef2 100644 --- a/src/mongo/db/geo/geoparser.cpp +++ b/src/mongo/db/geo/geoparser.cpp @@ -536,14 +536,14 @@ Status GeoParser::parseMultiLine(const BSONObj& obj, bool skipValidation, MultiL return BAD_VALUE("MultiLineString coordinates must be an array"); out->lines.clear(); - vector<S2Polyline*>& lines = out->lines.mutableVector(); + auto& lines = out->lines; BSONObjIterator it(coordElt.Obj()); // Iterate array while (it.more()) { - lines.push_back(new S2Polyline()); - status = parseGeoJSONLineCoordinates(it.next(), skipValidation, lines.back()); + lines.push_back(std::make_unique<S2Polyline>()); + status = parseGeoJSONLineCoordinates(it.next(), skipValidation, lines.back().get()); if (!status.isOK()) return status; } @@ -566,13 +566,13 @@ Status GeoParser::parseMultiPolygon(const BSONObj& obj, return BAD_VALUE("MultiPolygon coordinates must be an array"); out->polygons.clear(); - vector<S2Polygon*>& polygons = out->polygons.mutableVector(); + auto& polygons = out->polygons; BSONObjIterator it(coordElt.Obj()); // Iterate array while (it.more()) { - polygons.push_back(new S2Polygon()); - status = parseGeoJSONPolygonCoordinates(it.next(), skipValidation, polygons.back()); + polygons.push_back(std::make_unique<S2Polygon>()); + status = parseGeoJSONPolygonCoordinates(it.next(), skipValidation, polygons.back().get()); if (!status.isOK()) return status; } @@ -680,21 +680,20 @@ Status GeoParser::parseGeometryCollection(const BSONObj& obj, out->points.resize(out->points.size() + 1); status = parseGeoJSONPoint(geoObj, &out->points.back()); } else if (GEOJSON_LINESTRING == type) { - out->lines.mutableVector().push_back(new LineWithCRS()); - status = parseGeoJSONLine(geoObj, skipValidation, out->lines.vector().back()); + out->lines.push_back(std::make_unique<LineWithCRS>()); + status = parseGeoJSONLine(geoObj, skipValidation, out->lines.back().get()); } else if (GEOJSON_POLYGON == type) { - out->polygons.mutableVector().push_back(new PolygonWithCRS()); - status = parseGeoJSONPolygon(geoObj, skipValidation, out->polygons.vector().back()); + out->polygons.push_back(std::make_unique<PolygonWithCRS>()); + status = parseGeoJSONPolygon(geoObj, skipValidation, out->polygons.back().get()); } else if (GEOJSON_MULTI_POINT == type) { - out->multiPoints.mutableVector().push_back(new MultiPointWithCRS()); - status = parseMultiPoint(geoObj, out->multiPoints.mutableVector().back()); + out->multiPoints.push_back(std::make_unique<MultiPointWithCRS>()); + status = parseMultiPoint(geoObj, out->multiPoints.back().get()); } else if (GEOJSON_MULTI_LINESTRING == type) { - out->multiLines.mutableVector().push_back(new MultiLineWithCRS()); - status = parseMultiLine(geoObj, skipValidation, out->multiLines.mutableVector().back()); + out->multiLines.push_back(std::make_unique<MultiLineWithCRS>()); + status = parseMultiLine(geoObj, skipValidation, out->multiLines.back().get()); } else if (GEOJSON_MULTI_POLYGON == type) { - out->multiPolygons.mutableVector().push_back(new MultiPolygonWithCRS()); - status = parseMultiPolygon( - geoObj, skipValidation, out->multiPolygons.mutableVector().back()); + out->multiPolygons.push_back(std::make_unique<MultiPolygonWithCRS>()); + status = parseMultiPolygon(geoObj, skipValidation, out->multiPolygons.back().get()); } else { // Should not reach here. MONGO_UNREACHABLE; |