in mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedValueHolder.java [372:445]
private V removeFromBtree( V removedValue )
{
// First check that we have a loaded BTree
checkAndDeserialize();
if ( btreeContains( removedValue ) )
{
try
{
if ( valueBtree.getNbElems() - 1 < PersistedBTree.valueThresholdLow )
{
int nbValues = ( int ) ( valueBtree.getNbElems() - 1 );
// We have to switch to an Array of values
valueArray = ( V[] ) Array.newInstance( valueSerializer.getType(), nbValues );
// Now copy all the value but the one we have removed
TupleCursor<V, V> cursor = valueBtree.browse();
V returnedValue = null;
int pos = 0;
while ( cursor.hasNext() )
{
Tuple<V, V> tuple = cursor.next();
V value = tuple.getKey();
if ( valueSerializer.getComparator().compare( removedValue, value ) == 0 )
{
// This is the removed value : skip it
returnedValue = value;
}
else
{
valueArray[pos++] = value;
}
}
cursor.close();
return returnedValue;
}
else
{
Tuple<V, V> removedTuple = valueBtree.delete( removedValue );
if ( removedTuple != null )
{
return removedTuple.getKey();
}
else
{
return null;
}
}
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
catch ( KeyNotFoundException knfe )
{
// TODO Auto-generated catch block
knfe.printStackTrace();
return null;
}
}
else
{
return null;
}
}