Skip to content
Snippets Groups Projects
Commit 1785908b authored by Christian Engwer's avatar Christian Engwer
Browse files

removed two bugs in GenericLeafIterator

1) we had a false assumption about the HierarchicIterator
2) the leafbegin() wasn't in a consistent state

[[Imported from SVN: r1838]]
parent 31d7670d
No related branches found
No related tags found
No related merge requests found
......@@ -83,24 +83,41 @@ namespace Dune
{
while(true)
{
++hit;
if (hit != hend) ++hit;
if (hit == hend)
{
++lit;
if (lit != lend) ++lit;
if (lit == lend)
{
break;
// end iterator is lend<0>(0)
static_cast<EntityPointerImp&>(*this) = lit.realIterator;
return;
}
else
{
hit = lit->hbegin(maxlevel);
hend = lit->hend(maxlevel);
if (hit == hend)
{
// level 0 is leaf
static_cast<EntityPointerImp&>(*this) = lit.realIterator;
return;
}
}
}
if(hit->level() == maxlevel) break;
if(hit->isLeaf()) break;
if(hit->level() == maxlevel)
{
// assign hit to this
static_cast<EntityPointerImp&>(*this) = hit.realIterator;
return;
}
if(hit->isLeaf())
{
// assign hit to this
static_cast<EntityPointerImp&>(*this) = hit.realIterator;
return;
}
}
static_cast<EntityPointerImp&>(*this) = hit.realIterator;
}
GenericLeafIterator(GridImp & g, int maxl, bool end) :
......@@ -113,9 +130,23 @@ namespace Dune
{
if (end)
{
// end iterator is lend<0>(0)
lit = grid.template lend<0>(0);
static_cast<EntityPointerImp&>(*this) = lit.realIterator;
return;
}
if (hit != hend)
{
// find first leaf
increment();
// assign
static_cast<EntityPointerImp&>(*this) = hit.realIterator;
}
else
{
// level 0 is leaf
static_cast<EntityPointerImp&>(*this) = lit.realIterator;
}
static_cast<EntityPointerImp&>(*this) = hit.realIterator;
}
GenericLeafIterator(const GenericLeafIterator & rhs) :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment