@@ -163,8 +163,7 @@ int output_pgsql_t::pending_way(osmid_t id, int exists) {
163163 int polygon;
164164 int roads;
165165 auto &way = buffer.get <osmium::Way>(0 );
166- if (!m_tagtransform->filter_tags (way, &polygon, &roads,
167- *m_export_list.get (), outtags)) {
166+ if (!m_tagtransform->filter_tags (way, &polygon, &roads, outtags)) {
168167 auto nnodes = m_mid->nodes_get_list (&(way.nodes ()));
169168 if (nnodes > 1 ) {
170169 pgsql_out_way (way, &outtags, polygon, roads);
@@ -243,7 +242,7 @@ void output_pgsql_t::stop(osmium::thread::Pool *pool)
243242{
244243 // attempt to stop tables in parallel
245244 for (auto &t : m_tables) {
246- pool->submit (std::bind (&table_t ::stop, t));
245+ pool->submit (std::bind (&table_t ::stop, t. get () ));
247246 }
248247
249248 if (m_options.expire_tiles_zoom_min > 0 ) {
@@ -255,8 +254,7 @@ void output_pgsql_t::stop(osmium::thread::Pool *pool)
255254int output_pgsql_t::node_add (osmium::Node const &node)
256255{
257256 taglist_t outtags;
258- if (m_tagtransform->filter_tags (node, nullptr , nullptr ,
259- *m_export_list.get (), outtags))
257+ if (m_tagtransform->filter_tags (node, nullptr , nullptr , outtags))
260258 return 1 ;
261259
262260 auto wkb = m_builder.get_wkb_node (node.location ());
@@ -273,8 +271,7 @@ int output_pgsql_t::way_add(osmium::Way *way)
273271 taglist_t outtags;
274272
275273 /* Check whether the way is: (1) Exportable, (2) Maybe a polygon */
276- auto filter = m_tagtransform->filter_tags (*way, &polygon, &roads,
277- *m_export_list.get (), outtags);
274+ auto filter = m_tagtransform->filter_tags (*way, &polygon, &roads, outtags);
278275
279276 if (!filter) {
280277 /* Get actual node data and generate output */
@@ -291,8 +288,7 @@ int output_pgsql_t::way_add(osmium::Way *way)
291288int output_pgsql_t::pgsql_process_relation (osmium::Relation const &rel)
292289{
293290 taglist_t prefiltered_tags;
294- if (m_tagtransform->filter_tags (rel, nullptr , nullptr , *m_export_list.get (),
295- prefiltered_tags)) {
291+ if (m_tagtransform->filter_tags (rel, nullptr , nullptr , prefiltered_tags)) {
296292 return 1 ;
297293 }
298294
@@ -318,9 +314,9 @@ int output_pgsql_t::pgsql_process_relation(osmium::Relation const &rel)
318314
319315 // If it's a route relation make_boundary and make_polygon will be false
320316 // otherwise one or the other will be true.
321- if (m_tagtransform->filter_rel_member_tags (
322- prefiltered_tags, buffer, xrole, &make_boundary, &make_polygon,
323- &roads, *m_export_list. get () , outtags)) {
317+ if (m_tagtransform->filter_rel_member_tags (prefiltered_tags, buffer, xrole,
318+ &make_boundary, &make_polygon,
319+ &roads, outtags)) {
324320 return 0 ;
325321 }
326322
@@ -492,10 +488,9 @@ int output_pgsql_t::relation_modify(osmium::Relation const &rel)
492488
493489int output_pgsql_t::start ()
494490{
495- for (std::vector<std::shared_ptr<table_t > >::iterator table = m_tables.begin (); table != m_tables.end (); ++table)
496- {
491+ for (auto &t : m_tables) {
497492 // setup the table in postgres
498- table-> get () ->start ();
493+ t ->start ();
499494 }
500495
501496 return 0 ;
@@ -515,27 +510,18 @@ output_pgsql_t::output_pgsql_t(std::shared_ptr<middle_query_t> const &mid,
515510 buffer(32768 , osmium::memory::Buffer::auto_grow::yes),
516511 rels_buffer(1024 , osmium::memory::Buffer::auto_grow::yes)
517512{
518- m_export_list. reset ( new export_list ()) ;
513+ export_list exlist ;
519514
520- m_enable_way_area = read_style_file ( m_options.style , m_export_list. get () );
515+ m_enable_way_area = read_style_file (m_options.style , &exlist );
521516
522- try {
523- m_tagtransform = tagtransform_t::make_tagtransform (&m_options);
524- }
525- catch (const std::runtime_error& e) {
526- fprintf (stderr, " %s\n " , e.what ());
527- fprintf (stderr, " Error: Failed to initialise tag processing.\n " );
528- util::exit_nicely ();
529- }
517+ m_tagtransform = tagtransform_t::make_tagtransform (&m_options, exlist);
530518
531519 // for each table
532- m_tables.reserve (t_MAX);
533520 for (int i = 0 ; i < t_MAX; i++) {
534521
535522 // figure out the columns this table needs
536- columns_t columns = m_export_list->normal_columns ((i == t_point)
537- ? osmium::item_type::node
538- : osmium::item_type::way);
523+ columns_t columns = exlist.normal_columns (
524+ (i == t_point) ? osmium::item_type::node : osmium::item_type::way);
539525
540526 // figure out what name we are using for this and what type
541527 std::string name = m_options.prefix ;
@@ -566,21 +552,20 @@ output_pgsql_t::output_pgsql_t(std::shared_ptr<middle_query_t> const &mid,
566552 // tremble in awe of this massive constructor! seriously we are trying to avoid passing an
567553 // options object because we want to make use of the table_t in output_mutli_t which could
568554 // have a different tablespace/hstores/etc per table
569- m_tables. push_back (std::shared_ptr< table_t > (new table_t (
555+ m_tables[i]. reset (new table_t (
570556 m_options.database_options .conninfo (), name, type, columns,
571557 m_options.hstore_columns , m_options.projection ->target_srs (),
572558 m_options.append , m_options.slim , m_options.droptemp ,
573559 m_options.hstore_mode , m_options.enable_hstore_index ,
574- m_options.tblsmain_data , m_options.tblsmain_index ))) ;
560+ m_options.tblsmain_data , m_options.tblsmain_index ));
575561 }
576562}
577563
578564output_pgsql_t ::output_pgsql_t (output_pgsql_t const *other,
579565 std::shared_ptr<middle_query_t > const &mid)
580566: output_t (mid, other->m_options),
581- m_tagtransform (tagtransform_t ::make_tagtransform(&m_options )),
567+ m_tagtransform (other->m_tagtransform-> clone ( )),
582568 m_enable_way_area(other->m_enable_way_area),
583- m_export_list(new export_list(*other->m_export_list)),
584569 m_builder(m_options.projection, other->m_options.enable_multi),
585570 expire(m_options.expire_tiles_zoom, m_options.expire_tiles_max_bbox,
586571 m_options.projection),
@@ -590,9 +575,9 @@ output_pgsql_t::output_pgsql_t(output_pgsql_t const *other,
590575 buffer(1024 , osmium::memory::Buffer::auto_grow::yes),
591576 rels_buffer(1024 , osmium::memory::Buffer::auto_grow::yes)
592577{
593- for (auto const &t : other-> m_tables ) {
578+ for (size_t i = 0 ; i < t_MAX; ++i ) {
594579 // copy constructor will just connect to the already there table
595- m_tables. push_back (std::shared_ptr< table_t >( new table_t (*t .get ())));
580+ m_tables[i]. reset ( new table_t (*(other-> m_tables [i] .get ())));
596581 }
597582}
598583
0 commit comments