[osmium-tool] 22/44: Move bool vector wrapper class into libosmium.

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Tue Jul 21 20:15:55 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to tag v1.1.0
in repository osmium-tool.

commit 57c39325eefb082bb5a2b0290413ab6aa07fbb8a
Author: Jochen Topf <jochen at topf.org>
Date:   Fri Jun 26 15:31:25 2015 +0200

    Move bool vector wrapper class into libosmium.
---
 src/command_check_refs.cpp | 51 +++++++++-------------------------------------
 1 file changed, 10 insertions(+), 41 deletions(-)

diff --git a/src/command_check_refs.cpp b/src/command_check_refs.cpp
index 5287ece..61b53d7 100644
--- a/src/command_check_refs.cpp
+++ b/src/command_check_refs.cpp
@@ -28,6 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <boost/program_options.hpp>
 
+#include <osmium/index/bool_vector.hpp>
 #include <osmium/io/any_input.hpp>
 #include <osmium/io/any_output.hpp>
 
@@ -107,42 +108,10 @@ bool CommandCheckRefs::setup(const std::vector<std::string>& arguments) {
 }
 
 
-/*
- * Small wrapper class around std::vector<bool> that make sure the vector is
- * always large enough for the data we are putting in.
- */
-class bitsvec {
-
-    std::vector<bool> m_bits;
-
-public:
-
-    bitsvec() :
-        m_bits() {
-    }
-
-    void set(osmium::object_id_type id) {
-        osmium::unsigned_object_id_type pid = std::abs(id);
-
-        if (m_bits.size() <= pid) {
-            m_bits.resize(pid + 1024 * 1024);
-        }
-
-        m_bits[pid] = true;
-    }
-
-    bool get(osmium::object_id_type id) const {
-        osmium::unsigned_object_id_type pid = std::abs(id);
-
-        return pid < m_bits.size() && m_bits[pid];
-    }
-
-}; // class bitsvec
-
 class RefCheckHandler : public osmium::handler::Handler {
 
-    bitsvec m_nodes;
-    bitsvec m_ways;
+    osmium::index::BoolVector<osmium::unsigned_object_id_type> m_nodes;
+    osmium::index::BoolVector<osmium::unsigned_object_id_type> m_ways;
 
     std::vector<uint32_t> m_relation_ids;
     std::set<uint32_t> m_member_relation_ids;
@@ -220,7 +189,7 @@ public:
         }
         ++m_node_count;
 
-        m_nodes.set(node.id());
+        m_nodes.set(node.positive_id());
     }
 
     void way(const osmium::Way& way) {
@@ -230,11 +199,11 @@ public:
         ++m_way_count;
 
         if (m_check_relations) {
-            m_ways.set(way.id());
+            m_ways.set(way.positive_id());
         }
 
         for (const auto& node_ref : way.nodes()) {
-            if (!m_nodes.get(node_ref.ref())) {
+            if (!m_nodes.get(node_ref.positive_ref())) {
                 ++m_missing_nodes_in_ways;
                 if (m_show_ids) {
                     std::cout << "n" << node_ref.ref() << " in w" << way.id() << "\n";
@@ -254,18 +223,18 @@ public:
             for (const auto& member : relation.members()) {
                 switch (member.type()) {
                     case osmium::item_type::node:
-                        if (!m_nodes.get(member.ref())) {
+                        if (!m_nodes.get(member.positive_ref())) {
                             ++m_missing_nodes_in_relations;
-                            m_nodes.set(member.ref());
+                            m_nodes.set(member.positive_ref());
                             if (m_show_ids) {
                                 std::cout << "n" << member.ref() << " in r" << relation.id() << "\n";
                             }
                         }
                         break;
                     case osmium::item_type::way:
-                        if (!m_ways.get(member.ref())) {
+                        if (!m_ways.get(member.positive_ref())) {
                             ++m_missing_ways_in_relations;
-                            m_ways.set(member.ref());
+                            m_ways.set(member.positive_ref());
                             if (m_show_ids) {
                                 std::cout << "w" << member.ref() << " in r" << relation.id() << "\n";
                             }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osmium-tool.git



More information about the Pkg-grass-devel mailing list