in mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedValueHolder.java [492:608]
private int findPos( V value )
{
if ( valueArray.length == 0 )
{
return -1;
}
// Do a search using dichotomy
int pivot = valueArray.length / 2;
int low = 0;
int high = valueArray.length - 1;
Comparator<V> comparator = valueSerializer.getComparator();
while ( high > low )
{
switch ( high - low )
{
case 1:
// We have 2 elements
int result = comparator.compare( value, valueArray[pivot] );
if ( result == 0 )
{
return pivot;
}
if ( result < 0 )
{
if ( pivot == low )
{
return -( low + 1 );
}
else
{
result = comparator.compare( value, valueArray[low] );
if ( result == 0 )
{
return low;
}
if ( result < 0 )
{
return -( low + 1 );
}
else
{
return -( low + 2 );
}
}
}
else
{
if ( pivot == high )
{
return -( high + 2 );
}
else
{
result = comparator.compare( value, valueArray[high] );
if ( result == 0 )
{
return high;
}
if ( result < 0 )
{
return -( high + 1 );
}
else
{
return -( high + 2 );
}
}
}
default:
// We have 3 elements
result = comparator.compare( value, valueArray[pivot] );
if ( result == 0 )
{
return pivot;
}
if ( result < 0 )
{
high = pivot - 1;
}
else
{
low = pivot + 1;
}
pivot = ( high + low ) / 2;
continue;
}
}
int result = comparator.compare( value, valueArray[pivot] );
if ( result == 0 )
{
return pivot;
}
if ( result < 0 )
{
return -( pivot + 1 );
}
else
{
return -( pivot + 2 );
}
}