public FindResult FindKey(List<NodeIdxPair> stack, out long keyIndex, byte[] prefix, ByteBuffer key)
{
stack.Clear();
if (_rootNode == null)
{
keyIndex = -1;
return FindResult.NotFound;
}
var result = _rootNode.FindKey(stack, out keyIndex, prefix, key);
if (result == FindResult.Previous)
{
if (keyIndex < 0)
{
keyIndex = 0;
stack[stack.Count - 1] = new NodeIdxPair { Node = stack[stack.Count - 1].Node, Idx = 0 };
result = FindResult.Next;
}
else
{
if (!KeyStartsWithPrefix(prefix, GetKeyFromStack(stack)))
{
result = FindResult.Next;
keyIndex++;
if (!FindNextKey(stack))
{
return FindResult.NotFound;
}
}
}
if (!KeyStartsWithPrefix(prefix, GetKeyFromStack(stack)))
{
return FindResult.NotFound;
}
}
return result;
}