/// <summary> /// The terms array must be newly created <see cref="TermsEnum"/>, ie /// <see cref="TermsEnum.MoveNext()"/> has not yet been called. /// </summary> public TermsEnum Reset(TermsEnumIndex[] termsEnumsIndex) { if (Debugging.AssertsEnabled) { Debugging.Assert(termsEnumsIndex.Length <= top.Length); } numSubs = 0; numTop = 0; termComp = null; queue.Clear(); for (int i = 0; i < termsEnumsIndex.Length; i++) { TermsEnumIndex termsEnumIndex = termsEnumsIndex[i]; if (Debugging.AssertsEnabled) { Debugging.Assert(termsEnumIndex != null); } // init our term comp if (termComp == null) { queue.termComp = termComp = termsEnumIndex.TermsEnum.Comparer; } else { // We cannot merge sub-readers that have // different TermComps IComparer <BytesRef> subTermComp = termsEnumIndex.TermsEnum.Comparer; if (subTermComp != null && !subTermComp.Equals(termComp)) { throw new InvalidOperationException("sub-readers have different BytesRef.Comparers: " + subTermComp + " vs " + termComp + "; cannot merge"); } } BytesRef term; if (termsEnumIndex.TermsEnum.MoveNext()) { term = termsEnumIndex.TermsEnum.Term; TermsEnumWithSlice entry = subs[termsEnumIndex.SubIndex]; entry.Reset(termsEnumIndex.TermsEnum, term); queue.Add(entry); currentSubs[numSubs++] = entry; } else { // field has no terms } } if (queue.Count == 0) { return(TermsEnum.EMPTY); } else { return(this); } }
/// <summary> /// The terms array must be newly created TermsEnum, ie /// <seealso cref="TermsEnum#next"/> has not yet been called. /// </summary> public TermsEnum Reset(TermsEnumIndex[] termsEnumsIndex) { Debug.Assert(termsEnumsIndex.Length <= Top.Length); NumSubs = 0; NumTop = 0; TermComp = null; Queue.Clear(); for (int i = 0; i < termsEnumsIndex.Length; i++) { TermsEnumIndex termsEnumIndex = termsEnumsIndex[i]; Debug.Assert(termsEnumIndex != null); // init our term comp if (TermComp == null) { Queue.TermComp = TermComp = termsEnumIndex.TermsEnum.Comparator; } else { // We cannot merge sub-readers that have // different TermComps IComparer <BytesRef> subTermComp = termsEnumIndex.TermsEnum.Comparator; if (subTermComp != null && !subTermComp.Equals(TermComp)) { throw new InvalidOperationException("sub-readers have different BytesRef.Comparators: " + subTermComp + " vs " + TermComp + "; cannot merge"); } } BytesRef term = termsEnumIndex.TermsEnum.Next(); if (term != null) { TermsEnumWithSlice entry = Subs[termsEnumIndex.SubIndex]; entry.Reset(termsEnumIndex.TermsEnum, term); Queue.Add(entry); CurrentSubs[NumSubs++] = entry; } else { // field has no terms } } if (Queue.Size() == 0) { return(TermsEnum.EMPTY); } else { return(this); } }