Skip to content

Commit 108e05d

Browse files
committed
Merge pull request #391 from pnorman/auto_ptr
Switch from auto_ptr to unique_ptr
2 parents 06138b0 + eccdca3 commit 108e05d

2 files changed

Lines changed: 23 additions & 24 deletions

File tree

geometry-builder.cpp

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ using namespace geos::operation::linemerge;
5656

5757
#include "geometry-builder.hpp"
5858

59-
typedef std::auto_ptr<Geometry> geom_ptr;
59+
typedef std::unique_ptr<Geometry> geom_ptr;
6060

6161
namespace {
6262

@@ -91,7 +91,7 @@ struct polygondata_comparearea {
9191
geometry_builder::maybe_wkt_t geometry_builder::get_wkt_simple(const nodelist_t &nodes, int polygon) const
9292
{
9393
GeometryFactory gf;
94-
std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
94+
std::unique_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
9595

9696
try
9797
{
@@ -102,7 +102,7 @@ geometry_builder::maybe_wkt_t geometry_builder::get_wkt_simple(const nodelist_t
102102
maybe_wkt_t wkt(new geometry_builder::wkt_t());
103103
geom_ptr geom;
104104
if (polygon && (coords->getSize() >= 4) && (coords->getAt(coords->getSize() - 1).equals2D(coords->getAt(0)))) {
105-
std::auto_ptr<LinearRing> shell(gf.createLinearRing(coords.release()));
105+
std::unique_ptr<LinearRing> shell(gf.createLinearRing(coords.release()));
106106
geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector<Geometry *>));
107107
if (!geom->isValid()) {
108108
if (excludepoly) {
@@ -143,7 +143,7 @@ geometry_builder::maybe_wkt_t geometry_builder::get_wkt_simple(const nodelist_t
143143
geometry_builder::maybe_wkts_t geometry_builder::get_wkt_split(const nodelist_t &nodes, int polygon, double split_at) const
144144
{
145145
GeometryFactory gf;
146-
std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
146+
std::unique_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
147147
WKTWriter writer;
148148
//TODO: use count to get some kind of hint of how much we should reserve?
149149
maybe_wkts_t wkts(new std::vector<geometry_builder::wkt_t>);
@@ -156,7 +156,7 @@ geometry_builder::maybe_wkts_t geometry_builder::get_wkt_split(const nodelist_t
156156

157157
geom_ptr geom;
158158
if (polygon && (coords->getSize() >= 4) && (coords->getAt(coords->getSize() - 1).equals2D(coords->getAt(0)))) {
159-
std::auto_ptr<LinearRing> shell(gf.createLinearRing(coords.release()));
159+
std::unique_ptr<LinearRing> shell(gf.createLinearRing(coords.release()));
160160
geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector<Geometry *>));
161161
if (!geom->isValid()) {
162162
if (excludepoly) {
@@ -178,8 +178,7 @@ geometry_builder::maybe_wkts_t geometry_builder::get_wkt_split(const nodelist_t
178178
throw std::runtime_error("Excluding degenerate line.");
179179

180180
double distance = 0;
181-
std::auto_ptr<CoordinateSequence> segment;
182-
segment = std::auto_ptr<CoordinateSequence>(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
181+
std::unique_ptr<CoordinateSequence> segment(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
183182
segment->add(coords->getAt(0));
184183
for(unsigned i=1; i<coords->getSize(); i++) {
185184
const Coordinate this_pt = coords->getAt(i);
@@ -313,7 +312,7 @@ int geometry_builder::parse_wkt(const char * wkt, multinodelist_t &nodes, int *p
313312
geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodelist_t &xnodes,
314313
bool enable_multi, osmid_t osm_id) const
315314
{
316-
std::auto_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
315+
std::unique_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
317316
GeometryFactory gf;
318317
geom_ptr geom;
319318
geos::geom::prep::PreparedGeometryFactory pgf;
@@ -323,7 +322,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodel
323322
try
324323
{
325324
for (multinodelist_t::const_iterator it = xnodes.begin(); it != xnodes.end(); ++it) {
326-
std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
325+
std::unique_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
327326
for (nodelist_t::const_iterator node = it->begin(); node != it->end(); ++node) {
328327
Coordinate c;
329328
c.x = node->lon;
@@ -342,7 +341,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodel
342341
LineMerger merger;
343342
//merger.add(noded.get());
344343
merger.add(mline.get());
345-
std::auto_ptr<std::vector<LineString *> > merged(merger.getMergedLineStrings());
344+
std::unique_ptr<std::vector<LineString *> > merged(merger.getMergedLineStrings());
346345
WKTWriter writer;
347346

348347
// Procces ways into lines or simple polygon list
@@ -351,7 +350,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodel
351350
unsigned totalpolys = 0;
352351
for (unsigned i=0 ;i < merged->size(); ++i)
353352
{
354-
std::auto_ptr<LineString> pline ((*merged ) [i]);
353+
std::unique_ptr<LineString> pline ((*merged ) [i]);
355354
if (pline->getNumPoints() > 3 && pline->isClosed())
356355
{
357356
polys[totalpolys].polygon = gf.createPolygon(gf.createLinearRing(pline->getCoordinates()),0);
@@ -426,15 +425,15 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodel
426425
// polys now is a list of polygons tagged with which ones are inside each other
427426

428427
// List of polygons for multipolygon
429-
std::auto_ptr<std::vector<Geometry*> > polygons(new std::vector<Geometry*>);
428+
std::unique_ptr<std::vector<Geometry*> > polygons(new std::vector<Geometry*>);
430429

431430
// For each top level polygon create a new polygon including any holes
432431
for (unsigned i=0 ;i < totalpolys; ++i)
433432
{
434433
if (polys[i].iscontained != 0) continue;
435434

436435
// List of holes for this top level polygon
437-
std::auto_ptr<std::vector<Geometry*> > interior(new std::vector<Geometry*>);
436+
std::unique_ptr<std::vector<Geometry*> > interior(new std::vector<Geometry*>);
438437
for (unsigned j=i+1; j < totalpolys; ++j)
439438
{
440439
if (polys[j].iscontained == 1 && polys[j].containedbyid == i)
@@ -507,7 +506,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const multinodel
507506

508507
geometry_builder::maybe_wkt_t geometry_builder::build_multilines(const multinodelist_t &xnodes, osmid_t osm_id) const
509508
{
510-
std::auto_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
509+
std::unique_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
511510
GeometryFactory gf;
512511
geom_ptr geom;
513512

@@ -516,7 +515,7 @@ geometry_builder::maybe_wkt_t geometry_builder::build_multilines(const multinode
516515
try
517516
{
518517
for (multinodelist_t::const_iterator it = xnodes.begin(); it != xnodes.end(); ++it) {
519-
std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
518+
std::unique_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
520519
for (nodelist_t::const_iterator node = it->begin(); node != it->end(); ++node) {
521520
Coordinate c;
522521
c.x = node->lon;
@@ -552,7 +551,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
552551
int make_polygon, int enable_multi,
553552
double split_at, osmid_t osm_id) const
554553
{
555-
std::auto_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
554+
std::unique_ptr<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
556555
GeometryFactory gf;
557556
geom_ptr geom;
558557
geos::geom::prep::PreparedGeometryFactory pgf;
@@ -562,7 +561,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
562561
try
563562
{
564563
for (multinodelist_t::const_iterator it = xnodes.begin(); it != xnodes.end(); ++it) {
565-
std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
564+
std::unique_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
566565
for (nodelist_t::const_iterator node = it->begin(); node != it->end(); ++node) {
567566
Coordinate c;
568567
c.x = node->lon;
@@ -581,7 +580,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
581580
LineMerger merger;
582581
//merger.add(noded.get());
583582
merger.add(mline.get());
584-
std::auto_ptr<std::vector<LineString *> > merged(merger.getMergedLineStrings());
583+
std::unique_ptr<std::vector<LineString *> > merged(merger.getMergedLineStrings());
585584
WKTWriter writer;
586585

587586
// Procces ways into lines or simple polygon list
@@ -590,7 +589,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
590589
unsigned totalpolys = 0;
591590
for (unsigned i=0 ;i < merged->size(); ++i)
592591
{
593-
std::auto_ptr<LineString> pline ((*merged ) [i]);
592+
std::unique_ptr<LineString> pline ((*merged ) [i]);
594593
if (make_polygon && pline->getNumPoints() > 3 && pline->isClosed())
595594
{
596595
polys[totalpolys].polygon = gf.createPolygon(gf.createLinearRing(pline->getCoordinates()),0);
@@ -609,8 +608,8 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
609608
{
610609
//std::cerr << "polygon(" << osm_id << ") is no good: points(" << pline->getNumPoints() << "), closed(" << pline->isClosed() << "). " << writer.write(pline.get()) << std::endl;
611610
double distance = 0;
612-
std::auto_ptr<CoordinateSequence> segment;
613-
segment = std::auto_ptr<CoordinateSequence>(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
611+
std::unique_ptr<CoordinateSequence> segment;
612+
segment = std::unique_ptr<CoordinateSequence>(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
614613
segment->add(pline->getCoordinateN(0));
615614
for(unsigned i=1; i<pline->getNumPoints(); i++) {
616615
segment->add(pline->getCoordinateN(i));
@@ -694,15 +693,15 @@ geometry_builder::maybe_wkts_t geometry_builder::build_both(const multinodelist_
694693
// polys now is a list of polygons tagged with which ones are inside each other
695694

696695
// List of polygons for multipolygon
697-
std::auto_ptr<std::vector<Geometry*> > polygons(new std::vector<Geometry*>);
696+
std::unique_ptr<std::vector<Geometry*> > polygons(new std::vector<Geometry*>);
698697

699698
// For each top level polygon create a new polygon including any holes
700699
for (unsigned i=0 ;i < totalpolys; ++i)
701700
{
702701
if (polys[i].iscontained != 0) continue;
703702

704703
// List of holes for this top level polygon
705-
std::auto_ptr<std::vector<Geometry*> > interior(new std::vector<Geometry*>);
704+
std::unique_ptr<std::vector<Geometry*> > interior(new std::vector<Geometry*>);
706705
for (unsigned j=i+1; j < totalpolys; ++j)
707706
{
708707
if (polys[j].iscontained == 1 && polys[j].containedbyid == i)

middle-ram.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ struct middle_ram_t : public middle_t {
7171
std::vector<std::vector<ramWay> > ways;
7272
std::vector<std::vector<ramRel> > rels;
7373

74-
std::auto_ptr<node_ram_cache> cache;
74+
std::unique_ptr<node_ram_cache> cache;
7575

7676
/* the previous behaviour of iterate_ways was to delete all ways as they
7777
* were being iterated. this doesn't work now that the output handles its

0 commit comments

Comments
 (0)