public long binaryFind(Func f)
{
object[] values = this.m_values;
int low = 0, high = m_size - 1;
bool oneArg = f.arity() == 1;
while (low <= high)
{
int probe = (low + high) >> 1;
object val = values[probe];
object res = oneArg ? f.call(val) : f.call(val, Long.valueOf(probe));
long cmp = ((Long)res).longValue();
if (cmp > 0)
{
low = probe + 1;
}
else if (cmp < 0)
{
high = probe - 1;
}
else
{
return(probe);
}
}
return(-(low + 1));
}