corrected: gcc compile errors, wrong assert in remove; + minor changes

[SVN r71764]
This commit is contained in:
Adam Wulkiewicz
2011-05-06 15:04:03 +00:00
parent 4d82c421ac
commit 9dcca981e2
7 changed files with 20 additions and 17 deletions

View File

@@ -16,6 +16,9 @@ struct linear_tag {};
}}} // namespace boost::geometry::index
//TEST
// TODO
#include <boost/geometry/extensions/index/rtree/linear/redistribute_elements.hpp>
#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_RTREE_LINEAR_LINEAR_HPP

View File

@@ -281,9 +281,6 @@ struct redistribute_elements<Value, Translator, Box, linear_tag>
--remaining;
}
}
assert(min_elems <= elements1.size() && elements1.size() <= max_elems);
assert(min_elems <= elements2.size() && elements2.size() <= max_elems);
}
};

View File

@@ -143,7 +143,7 @@ struct redistribute_elements<Value, Translator, Box, quadratic_tag>
// 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<Value, Translator, Box, quadratic_tag>
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

View File

@@ -96,11 +96,16 @@ struct split
Translator const& tr)
{
node * second_node = rtree::create_node(Node());
Node & n2 = boost::get<Node>(*second_node);
// redistribute elements
Box box1, box2;
redistribute_elements<Value, Translator, Box, Tag>::
apply(n, boost::get<Node>(*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 )

View File

@@ -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<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<size_t, node*> >::reverse_iterator it = m_underflowed_nodes.rbegin();
for ( typename std::vector< std::pair<size_t, node*> >::reverse_iterator it = m_underflowed_nodes.rbegin();
it != m_underflowed_nodes.rend() ; ++it )
{
if ( boost::apply_visitor(is_leaf<Value, Box, Tag>(), *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<elements_type::value_type, Value, Translator, Box, Tag> insert_v(
visitors::insert<typename elements_type::value_type, Value, Translator, Box, Tag> insert_v(
m_root_node,
*it,
m_min_elems_per_node,

View File

@@ -29,7 +29,7 @@ struct save<
>,
size_t
>,
typename Translator,
Translator,
Box,
Tag
>

View File

@@ -17,8 +17,8 @@ int main()
typedef bg::model::point<float, 2, bg::cs::cartesian> P;
typedef bg::model::box<P> B;
//typedef bgi::rtree<std::pair<B, size_t>, bgi::default_parameter, bgi::linear_tag> RT;
typedef bgi::rtree<std::pair<B, size_t>, bgi::default_parameter, bgi::quadratic_tag> RT;
typedef bgi::rtree<std::pair<B, size_t>, bgi::default_parameter, bgi::linear_tag> RT;
//typedef bgi::rtree<std::pair<B, size_t>, bgi::default_parameter, bgi::quadratic_tag> RT;
std::ifstream file_cfg("config.txt");
size_t max_elems = 4;