/// <summary>
/// Insert the specified sequence into the list of sequences to be merged.
/// Insert it in reverse document order with respect to the current nodes in other sequences.
/// </summary>
private void InsertSequence(IEnumerator <XPathNavigator> sequence)
{
for (int i = _sequencesToMerge.Count - 1; i >= 0; i--)
{
int cmp = _runtime.ComparePosition(sequence.Current, _sequencesToMerge[i].Current);
if (cmp == -1)
{
// Insert after current item
_sequencesToMerge.Insert(i + 1, sequence);
return;
}
else if (cmp == 0)
{
// Found duplicate, so skip the duplicate
if (!sequence.MoveNext())
{
// No more nodes, so don't insert anything
return;
}
// Next node must be after current node in document order, so don't need to reset loop
}
}
// Insert at beginning of list
_sequencesToMerge.Insert(0, sequence);
}