|
17 | 17 | #include <osmium/util/verbose_output.hpp> |
18 | 18 | #include <osmium/visitor.hpp> |
19 | 19 |
|
20 | | -#include <boost/iterator/filter_iterator.hpp> |
21 | | - |
22 | 20 | #include <algorithm> |
23 | 21 | #include <cstdlib> |
24 | 22 | #include <cstring> |
@@ -69,27 +67,38 @@ class CheckMPManager |
69 | 67 | [[nodiscard]] bool compare_tags(osmium::TagList const &rtags, |
70 | 68 | osmium::TagList const &wtags) const |
71 | 69 | { |
72 | | - auto const d = |
73 | | - std::count_if(wtags.cbegin(), wtags.cend(), std::cref(m_filter)); |
74 | | - if (d > 0) { |
75 | | - using iterator = |
76 | | - boost::filter_iterator<MPFilter, |
77 | | - osmium::TagList::const_iterator>; |
78 | | - iterator const rfi_begin{std::cref(m_filter), rtags.cbegin(), |
79 | | - rtags.cend()}; |
80 | | - iterator const rfi_end{std::cref(m_filter), rtags.cend(), |
81 | | - rtags.cend()}; |
82 | | - iterator const wfi_begin{std::cref(m_filter), wtags.cbegin(), |
83 | | - wtags.cend()}; |
84 | | - iterator const wfi_end{std::cref(m_filter), wtags.cend(), |
85 | | - wtags.cend()}; |
86 | | - |
87 | | - if (std::equal(wfi_begin, wfi_end, rfi_begin) && |
88 | | - d == std::distance(rfi_begin, rfi_end)) { |
89 | | - return true; |
| 70 | + auto const rend = rtags.cend(); |
| 71 | + auto const wend = wtags.cend(); |
| 72 | + |
| 73 | + auto rit = rtags.cbegin(); |
| 74 | + auto wit = wtags.cbegin(); |
| 75 | + |
| 76 | + while (rit != rend && wit != wend) { |
| 77 | + if (!m_filter(*rit)) { |
| 78 | + ++rit; |
| 79 | + continue; |
90 | 80 | } |
| 81 | + if (!m_filter(*wit)) { |
| 82 | + ++wit; |
| 83 | + continue; |
| 84 | + } |
| 85 | + if (*rit == *wit) { |
| 86 | + ++rit; |
| 87 | + ++wit; |
| 88 | + continue; |
| 89 | + } |
| 90 | + return false; |
91 | 91 | } |
92 | | - return false; |
| 92 | + |
| 93 | + while (rit != rend && !m_filter(*rit)) { |
| 94 | + ++rit; |
| 95 | + } |
| 96 | + |
| 97 | + while (wit != wend && !m_filter(*wit)) { |
| 98 | + ++wit; |
| 99 | + } |
| 100 | + |
| 101 | + return rit == rend && wit == wend; |
93 | 102 | } |
94 | 103 |
|
95 | 104 | public: |
|
0 commit comments