in mavibot/src/main/java/org/apache/directory/mavibot/btree/TupleCursor.java [180:257]
public boolean hasNext() throws EndOfFileExceededException, IOException
{
// First check that we have elements in the BTree
if ( ( stack == null ) || ( stack.length == 0 ) )
{
return false;
}
// Take the leaf and check if we have no mare values
ParentPos<K, V> parentPos = stack[depth];
if ( parentPos.page == null )
{
// Empty BTree, get out
return false;
}
if ( parentPos.pos == AFTER_LAST )
{
// Ok, here, we have reached the last value in the leaf. We have to go up and
// see if we have some remaining values
int currentDepth = depth - 1;
while ( currentDepth >= 0 )
{
parentPos = stack[currentDepth];
if ( parentPos.pos < parentPos.page.getNbElems() )
{
// The parent has some remaining values on the right, get out
return true;
}
else
{
currentDepth--;
}
}
return false;
}
if ( parentPos.pos < parentPos.page.getNbElems() - 1 )
{
// Not the last position, we have a next value
return true;
}
else
{
// Check if we have some more value
if ( ( parentPos.valueCursor != null ) && parentPos.valueCursor.hasNext() )
{
// No problem, we still have some values to read
return true;
}
// Ok, here, we have reached the last value in the leaf. We have to go up and
// see if we have some remaining values
int currentDepth = depth - 1;
while ( currentDepth >= 0 )
{
parentPos = stack[currentDepth];
if ( parentPos.pos < parentPos.page.getNbElems() )
{
// The parent has some remaining values on the right, get out
return true;
}
else
{
currentDepth--;
}
}
// We are done, there are no more value left
return false;
}
}