1 /** 2 * SPDX-License-Identifier: GPL-2.0-or-later 3 * 4 * This file is part of osm2pgsql (https://osm2pgsql.org/). 5 * 6 * Copyright (C) 2006-2021 by the osm2pgsql developer community. 7 * For a full list of authors see the git log. 8 */ 9 10 #include "dependency-manager.hpp" 11 #include "middle.hpp" 12 13 #include <algorithm> 14 #include <iterator> 15 node_changed(osmid_t id)16void full_dependency_manager_t::node_changed(osmid_t id) 17 { 18 for (auto const way_id : m_object_store->get_ways_by_node(id)) { 19 way_changed(way_id); 20 m_ways_pending_tracker.set(way_id); 21 } 22 23 for (auto const rel_id : m_object_store->get_rels_by_node(id)) { 24 m_rels_pending_tracker.set(rel_id); 25 } 26 } 27 way_changed(osmid_t id)28void full_dependency_manager_t::way_changed(osmid_t id) 29 { 30 if (m_ways_pending_tracker.get(id)) { 31 return; 32 } 33 34 for (auto const rel_id : m_object_store->get_rels_by_way(id)) { 35 m_rels_pending_tracker.set(rel_id); 36 } 37 } 38 has_pending() const39bool full_dependency_manager_t::has_pending() const noexcept 40 { 41 return !m_ways_pending_tracker.empty() || !m_rels_pending_tracker.empty(); 42 } 43 get_ids(osmium::index::IdSetSmall<osmid_t> & tracker)44idlist_t full_dependency_manager_t::get_ids(osmium::index::IdSetSmall<osmid_t> &tracker) 45 { 46 tracker.sort_unique(); 47 48 idlist_t list; 49 list.reserve(tracker.size()); 50 51 std::copy(tracker.cbegin(), tracker.cend(), std::back_inserter(list)); 52 53 tracker.clear(); 54 55 return list; 56 } 57