コード例 #1
0
        private void InitializePriorityQueue(IList <IEnumerable <T> > inputList)
        {
            foreach (var list in inputList)
            {
                ComparableSortedSequenceEnumerator <T> enumerator = new ComparableSortedSequenceEnumerator <T>(list, this.keyComparer);
                bool enumeratorIsNotEmpty = this.PrepareEnumerator(enumerator);
                if (enumeratorIsNotEmpty == false)
                {
                    // Since enumerator does not have any items that fit the filter, discard the enumerator.
                    enumerator.Dispose();
                    continue;
                }

                this.InsertToPriortyQueueIfNecessary(enumerator);
            }
        }
コード例 #2
0
        private bool InsertToPriortyQueueIfNecessary(ComparableSortedSequenceEnumerator <T> enumerator)
        {
            Diagnostics.Assert(enumerator != null, ClassName, "Input enumerator must not be null.");

            while (true)
            {
                bool wasPushed = this.priorityQueue.TryPush(enumerator);
                if (wasPushed)
                {
                    return(true);
                }

                var isNotEmpty = enumerator.MoveNext();
                if (isNotEmpty == false)
                {
                    enumerator.Dispose();
                    return(false);
                }
            }
        }