/// <summary> /// NOTE: This was getLongEnumerable() in Lucene /// </summary> private IEnumerable <long?> GetInt64Enumerable(SegmentReader reader, string field, NumericDocValuesFieldUpdates fieldUpdates) { int maxDoc = reader.MaxDoc; IBits DocsWithField = reader.GetDocsWithField(field); NumericDocValues currentValues = reader.GetNumericDocValues(field); NumericDocValuesFieldUpdates.Iterator iter = (NumericDocValuesFieldUpdates.Iterator)fieldUpdates.GetIterator(); int updateDoc = iter.NextDoc(); for (int curDoc = 0; curDoc < maxDoc; ++curDoc) { if (curDoc == updateDoc) //document has an updated value { long?value = iter.Value; // either null or updated updateDoc = iter.NextDoc(); //prepare for next round yield return(value); } else { // no update for this document if (Debugging.AssertsEnabled) { Debugging.Assert(curDoc < updateDoc); } if (currentValues != null && DocsWithField.Get(curDoc)) { // only read the current value if the document had a value before yield return(currentValues.Get(curDoc)); } else { yield return(null); } } } }
private IEnumerable<long?> GetLongEnumerable(SegmentReader reader, string field, NumericDocValuesFieldUpdates fieldUpdates) { int maxDoc = reader.MaxDoc; Bits DocsWithField = reader.GetDocsWithField(field); NumericDocValues currentValues = reader.GetNumericDocValues(field); NumericDocValuesFieldUpdates.Iterator iter = (NumericDocValuesFieldUpdates.Iterator)fieldUpdates.GetIterator(); int updateDoc = iter.NextDoc(); for (int curDoc = 0; curDoc < maxDoc; ++curDoc) { if (curDoc == updateDoc) //document has an updated value { long? value = (long?)iter.Value(); // either null or updated updateDoc = iter.NextDoc(); //prepare for next round yield return value; } else { // no update for this document if (currentValues != null && DocsWithField.Get(curDoc)) { // only read the current value if the document had a value before yield return currentValues.Get(curDoc); } else { yield return null; } } } }