public int CompareTo(CrawlerItemIterator <TSort> .SortKey other) { TSort tsort = this.value; int num = tsort.CompareTo(other.value); if (num == 0) { num = this.documentId.CompareTo(other.documentId); } if (num == 0) { num = this.folderId.CompareTo(other.folderId); } if (!this.isAscending) { num = -num; } return(num); }
public IEnumerable <MdbCompositeItemIdentity> GetItems(MailboxSession session, TSort intervalStart, TSort intervalStop) { Util.ThrowOnNullArgument(session, "session"); List <CrawlerItemIterator <TSort> .QueryResultWrapper> resultsToDispose = new List <CrawlerItemIterator <TSort> .QueryResultWrapper>(); SortedList <CrawlerItemIterator <TSort> .SortKey, CrawlerItemIterator <TSort> .QueryResultWrapper> mergeList = new SortedList <CrawlerItemIterator <TSort> .SortKey, CrawlerItemIterator <TSort> .QueryResultWrapper>(); try { using (IEnumerator <StoreObjectId> enumerator = this.folderIterator.GetFolders(session).GetEnumerator()) { while (enumerator.MoveNext()) { StoreObjectId folderId = enumerator.Current; CrawlerItemIterator <TSort> .QueryResultWrapper queryResultWrapper = new CrawlerItemIterator <TSort> .QueryResultWrapper(this.diagnosticsSession, session, folderId, this.sortProperty, intervalStart, intervalStop, this.filterPredicate, this.predicateProperties, this.maxRowCount); resultsToDispose.Add(queryResultWrapper); queryResultWrapper.CanCacheQueryResult = (50 < mergeList.Count); if (queryResultWrapper.MoveNext()) { mergeList.Add(queryResultWrapper.CurrentValue, queryResultWrapper); } } goto IL_217; } IL_11D: int cacheCounter = 0; using (IEnumerator <CrawlerItemIterator <TSort> .QueryResultWrapper> enumerator2 = mergeList.Values.GetEnumerator()) { if (enumerator2.MoveNext()) { CrawlerItemIterator <TSort> .QueryResultWrapper result = enumerator2.Current; yield return(result.CurrentIdentity); mergeList.RemoveAt(0); if (result.MoveNext()) { mergeList.Add(result.CurrentValue, result); if (cacheCounter > 0 && !result.CanCacheQueryResult) { result.CanCacheQueryResult = true; cacheCounter--; } } else if (result.CanCacheQueryResult) { cacheCounter++; } } } IL_217: if (mergeList.Count > 0) { goto IL_11D; } } finally { foreach (CrawlerItemIterator <TSort> .QueryResultWrapper queryResultWrapper2 in resultsToDispose) { queryResultWrapper2.Dispose(); } resultsToDispose.Clear(); } yield break; }