in mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java [333:436]
/* no qualifier*/static <K, V> LevelInfo<K, V> computeLevel( BTree<K, V> btree, int nbElems, LevelEnum levelType )
{
int pageSize = btree.getPageSize();
int incrementNode = 0;
if ( levelType == LevelEnum.NODE )
{
incrementNode = 1;
}
LevelInfo<K, V> level = new LevelInfo<K, V>();
level.setType( ( levelType == LevelEnum.NODE ) );
level.setNbElems( nbElems );
level.setNbPages( nbElems / ( pageSize + incrementNode ) );
level.setLevelNumber( 0 );
level.setNbAddedElems( 0 );
level.setCurrentPos( 0 );
// Create the first level page
if ( nbElems <= pageSize + incrementNode )
{
if ( nbElems % ( pageSize + incrementNode ) != 0 )
{
level.setNbPages( 1 );
}
level.setNbElemsLimit( nbElems );
if ( level.isNode() )
{
level.setCurrentPage( BTreeFactory.createNode( btree, 0L, nbElems - 1 ) );
}
else
{
level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, nbElems ) );
}
}
else
{
int remaining = nbElems % ( pageSize + incrementNode );
if ( remaining == 0 )
{
level.setNbElemsLimit( nbElems );
if ( level.isNode() )
{
level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
}
else
{
level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
}
}
else
{
level.incNbPages();
if ( remaining < ( pageSize / 2 ) + incrementNode )
{
level.setNbElemsLimit( nbElems - remaining - ( pageSize + incrementNode ) );
if ( level.getNbElemsLimit() > 0 )
{
if ( level.isNode() )
{
level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
}
else
{
level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
}
}
else
{
if ( level.isNode() )
{
level
.setCurrentPage( BTreeFactory.createNode( btree, 0L, ( pageSize / 2 ) + remaining - 1 ) );
}
else
{
level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, ( pageSize / 2 ) + remaining ) );
}
}
}
else
{
level.setNbElemsLimit( nbElems - remaining );
if ( level.isNode() )
{
level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
}
else
{
level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
}
}
}
}
return level;
}