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)16 void 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)28 void 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() const39 bool 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)44 idlist_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