private int _numOfRequiredDocuments; // Only required number of documents are returned by to the client public IterativeOperation(IList <ISet> sets, List <IDataCombiner> combiners, IDataSelector dataSelector, IComparer comparer) { _lastReaderId = null; _lastSentChunkId = -1; _dataSelector = dataSelector; IList <ISet> setsToBeRemoved = new List <ISet>(); foreach (var set in sets) { if (set.IsFixedSize == true && set.GetTopElement() == null) { setsToBeRemoved.Add(set); set.DisposeReader(); } } ListUtilMethods.RemoveMultipleItemsFromList(sets, setsToBeRemoved); _dataSelector.Initialize(sets, combiners, comparer); _lastSentDataChunk = null; _autoChunkId = -1; }
public bool MoveNext() { bool readerUIDFound = false; bool documentFound = false; IList <ISet> dataSetToBeRemoved = new List <ISet>(); // Remove the shards where no more data is available int skipped = 0; if (_distributedDataSetsList.Count == 0) { return(false); } foreach (ISet set in _distributedDataSetsList) { if (set.ReaderUID.Equals(_lastReaderId) || readerUIDFound || _lastReaderId == null) { _lastReaderId = set.ReaderUID; readerUIDFound = true; int setsToBeRemovedCount = dataSetToBeRemoved.Count; _currentElement = GetCurrentElement(set, dataSetToBeRemoved); if (_currentElement != null) { documentFound = true; break; } else if (dataSetToBeRemoved.Count - setsToBeRemovedCount == 0) { skipped++; set.Load(); continue; } } else { skipped++; } } if (!readerUIDFound) { throw new Exception("At QueryRouter: Invalid Reader UID"); } int counter = 0; if (documentFound == false) { foreach (ISet set in _distributedDataSetsList) { if (skipped == counter) { break; } _currentElement = GetCurrentElement(set, dataSetToBeRemoved); if (_currentElement != null) { _lastReaderId = set.ReaderUID; documentFound = true; break; } counter++; } } if (dataSetToBeRemoved.Count != 0) { ListUtilMethods.RemoveMultipleItemsFromList(_distributedDataSetsList, dataSetToBeRemoved); } return(documentFound); }