private IEnumerable<long?> GetMergeSortedFieldDocToOrdEnumerable(AtomicReader[] readers, SortedDocValues[] dvs, OrdinalMap map)
{
int readerUpTo = -1;
int docIDUpTo = 0;
AtomicReader currentReader = null;
Bits currentLiveDocs = null;
while (true)
{
if (readerUpTo == readers.Length)
{
yield break;
}
if (currentReader == null || docIDUpTo == currentReader.MaxDoc)
{
readerUpTo++;
if (readerUpTo < readers.Length)
{
currentReader = readers[readerUpTo];
currentLiveDocs = currentReader.LiveDocs;
}
docIDUpTo = 0;
continue;
}
if (currentLiveDocs == null || currentLiveDocs.Get(docIDUpTo))
{
int segOrd = dvs[readerUpTo].GetOrd(docIDUpTo);
docIDUpTo++;
yield return map.GetGlobalOrd(readerUpTo, segOrd);
continue;
}
docIDUpTo++;
}
}