From 9dcca981e2280941e9ce2dfd5a77631bd52c1397 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Fri, 6 May 2011 15:04:03 +0000 Subject: [PATCH] corrected: gcc compile errors, wrong assert in remove; + minor changes [SVN r71764] --- .../extensions/index/rtree/linear/linear.hpp | 3 +++ .../index/rtree/linear/redistribute_elements.hpp | 3 --- .../index/rtree/quadratic/redistribute_elements.hpp | 5 +---- .../extensions/index/rtree/visitors/insert.hpp | 7 ++++++- .../extensions/index/rtree/visitors/remove.hpp | 13 +++++++------ .../extensions/index/rtree/visitors/save.hpp | 2 +- tests/additional_sizes_and_times.cpp | 4 ++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/include/boost/geometry/extensions/index/rtree/linear/linear.hpp b/include/boost/geometry/extensions/index/rtree/linear/linear.hpp index 7bb7879c4..67e0a5e8d 100644 --- a/include/boost/geometry/extensions/index/rtree/linear/linear.hpp +++ b/include/boost/geometry/extensions/index/rtree/linear/linear.hpp @@ -16,6 +16,9 @@ struct linear_tag {}; }}} // namespace boost::geometry::index +//TEST +// TODO + #include #endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_LINEAR_LINEAR_HPP diff --git a/include/boost/geometry/extensions/index/rtree/linear/redistribute_elements.hpp b/include/boost/geometry/extensions/index/rtree/linear/redistribute_elements.hpp index a04b95521..cbbc197b2 100644 --- a/include/boost/geometry/extensions/index/rtree/linear/redistribute_elements.hpp +++ b/include/boost/geometry/extensions/index/rtree/linear/redistribute_elements.hpp @@ -281,9 +281,6 @@ struct redistribute_elements --remaining; } } - - assert(min_elems <= elements1.size() && elements1.size() <= max_elems); - assert(min_elems <= elements2.size() && elements2.size() <= max_elems); } }; diff --git a/include/boost/geometry/extensions/index/rtree/quadratic/redistribute_elements.hpp b/include/boost/geometry/extensions/index/rtree/quadratic/redistribute_elements.hpp index 75fcfec14..a75b3a93d 100644 --- a/include/boost/geometry/extensions/index/rtree/quadratic/redistribute_elements.hpp +++ b/include/boost/geometry/extensions/index/rtree/quadratic/redistribute_elements.hpp @@ -143,7 +143,7 @@ struct redistribute_elements // redistribute the rest of the elements while ( !elements_copy.empty() ) { - elements_type::reverse_iterator el_it = elements_copy.rbegin(); + typename elements_type::reverse_iterator el_it = elements_copy.rbegin(); bool insert_into_group1 = false; size_t elements1_count = elements1.size(); @@ -204,9 +204,6 @@ struct redistribute_elements assert(0 < remaining); --remaining; } - - assert(min_elems <= elements1.size() && elements1.size() <= max_elems); - assert(min_elems <= elements2.size() && elements2.size() <= max_elems); } // sprawdzic szukanie najmniejszego powiekszenia wezla dla grupy1 i grupy2 diff --git a/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp b/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp index b0a358d17..8ece15db2 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/insert.hpp @@ -96,11 +96,16 @@ struct split Translator const& tr) { node * second_node = rtree::create_node(Node()); + Node & n2 = boost::get(*second_node); // redistribute elements Box box1, box2; redistribute_elements:: - apply(n, boost::get(*second_node), box1, box2, min_elems, max_elems, tr); + apply(n, n2, box1, box2, min_elems, max_elems, tr); + + // check numbers of elements + assert(min_elems <= rtree::elements_get(n).size() && rtree::elements_get(n).size() <= max_elems); + assert(min_elems <= rtree::elements_get(n2).size() && rtree::elements_get(n2).size() <= max_elems); // node is not the root if ( parent != 0 ) diff --git a/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp b/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp index 875896ffb..5647ad6fc 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/remove.hpp @@ -84,12 +84,13 @@ public: m_is_underflow = elements.size() < m_min_elems_per_node; } - // test - underflow state should be ok here - assert(elements.size() < m_min_elems_per_node == m_is_underflow); - // n is not root - adjust aabb if ( 0 != m_parent ) { + // test underflow state should be ok here + // note that there may be less than min_elems elements in root + assert((elements.size() < m_min_elems_per_node) == m_is_underflow); + rtree::elements_get(*m_parent)[m_current_child_index].first = rtree::elements_box(elements.begin(), elements.end(), m_tr); } @@ -104,7 +105,7 @@ public: // reinsert elements from removed nodes // begin with levels closer to the root - for ( std::vector< std::pair >::reverse_iterator it = m_underflowed_nodes.rbegin(); + for ( typename std::vector< std::pair >::reverse_iterator it = m_underflowed_nodes.rbegin(); it != m_underflowed_nodes.rend() ; ++it ) { if ( boost::apply_visitor(is_leaf(), *it->second) ) @@ -128,7 +129,7 @@ public: elements_type & elements = rtree::elements_get(n); // find value and remove it - for ( elements_type::iterator it = elements.begin() ; it != elements.end() ; ++it ) + for ( typename elements_type::iterator it = elements.begin() ; it != elements.end() ; ++it ) { if ( m_tr.equals(*it, m_value) ) { @@ -182,7 +183,7 @@ private: for ( typename elements_type::iterator it = elements.begin(); it != elements.end() ; ++it ) { - visitors::insert insert_v( + visitors::insert insert_v( m_root_node, *it, m_min_elems_per_node, diff --git a/include/boost/geometry/extensions/index/rtree/visitors/save.hpp b/include/boost/geometry/extensions/index/rtree/visitors/save.hpp index 47925e6ad..29652a7f1 100644 --- a/include/boost/geometry/extensions/index/rtree/visitors/save.hpp +++ b/include/boost/geometry/extensions/index/rtree/visitors/save.hpp @@ -29,7 +29,7 @@ struct save< >, size_t >, - typename Translator, + Translator, Box, Tag > diff --git a/tests/additional_sizes_and_times.cpp b/tests/additional_sizes_and_times.cpp index cdcab5eed..958170ba7 100644 --- a/tests/additional_sizes_and_times.cpp +++ b/tests/additional_sizes_and_times.cpp @@ -17,8 +17,8 @@ int main() typedef bg::model::point P; typedef bg::model::box

B; - //typedef bgi::rtree, bgi::default_parameter, bgi::linear_tag> RT; - typedef bgi::rtree, bgi::default_parameter, bgi::quadratic_tag> RT; + typedef bgi::rtree, bgi::default_parameter, bgi::linear_tag> RT; + //typedef bgi::rtree, bgi::default_parameter, bgi::quadratic_tag> RT; std::ifstream file_cfg("config.txt"); size_t max_elems = 4;